R5F10Pgg OTA via UART bin文件传输失败

请教一下,在ota升级  传输app的bin文件过程中出现下述情况,是不是因为  app  bin文件有128k  ,codeflash总共为128k    但是写入起始位置为0x4000,所以app  的数据还没写完  codeflash'空间就用完了,才导致这样?

Parents
  • 上面packet = 897, 每一个包是128byte, 也就是 897 * 128 = 1C080H, 写入的首地址是4000H,所以

    4000H + 1C080H = 20080H > 128K

    当然写不进去了,

    不是另外一个帖子和你说过吗, 你要写入的bin文件是4000H - 1FFFFH 这个空间的, 你在编译App时候, 要把这个空间的数据分离出来. 只有112K, 不可能有128K这么大. 128K是 0-1FFFFH这么大的空间.

    另外再仿真的时候, 由于仿真器的firmware需要占用一定的ROM空间, 一般在最后的xxxE00H-xxxFFFH, 所以你仿真的时候, 的bin文件还没有112K这么大.

    做Xmodem 传送的bin文件最大只能是112K,

  • 不好意思,请问把4000H - 1FFFFH这个空间的数据分离出来要怎么做呢

  • 首先按照你的要求我们划分ROM 空间, boot = 0- 3FFFH, App = 4000H-1FFFFH. 那么所有的都是基于这个大的框架.从而定义 FLASH_TABLE = 4000H.

    下面是你的工程的主要问题.

    1 先说Boot 区: user_def.h里面相应地都要跟着改. FLASH_AREA 就不可能是2200H, 虽然boot 和app是独立的工程, 但空间分配上是相互关联的, 应该设置为4000H. 这个在Xmodem写flash时是需要用到的. 地址不对, 也就出现错误了.

    2 App工程, 原样例程序APP是2000H-FFFFH, 其中在2000H放置映射的向量表FLASH_TABLE, 而程序入口是在2200H, 这个设置是在section里面的.

    按照你的工程总体设置, App是4000H- 1FFFFH, 那么这个入口地址应该设置成4200H. 而不是3000H, 这个和整个空间划分不符.

    boot 和 app 空间上没有重叠, 它们就是通过中断向量表做映射而已. 

    所以建议你还是把原来的样例工程吃透, 其实并没有什么复杂, 不同MCU的ROM或大或小, 只是做一下地址偏移就行了. 你这个两个程序空间分配比较乱.

  • 不好意思  黄工,再打扰一下,首先,抱歉,我的工程发错了,出现update  failed  这个结果是基于  图123的设置下发生的。 

                                             图1

            

                                 图2     boot                                               图3  app

     

    通过查看源码我发现

  • Boot的user_def.h, 有存放CRC的宏 计算出来存放CRC的地址分别是1FBFCH, 1FBF8H, 1FBF4H

    然后CRC的存放地址在 FBF4这里, 相差了64K, 怎么可能不updated failed. 你再看看哪里错了

  • 黄工,我把CRC相关的设置改了下

    CRC部分应该没问题了吧

    结果是程序跑飞了

    我对照例程又看了一遍,发现不同的地方,也是可能造成这种问题的地方就是section的分配了,因为我是两个工程独立创建的  所以我也不确定section该怎么分配才是正确的 您看我这种分配是不是导致程序跑飞的原因呢?

  • 自己做个excel表, 把对应的地址列出来如下图, 不同ROM size 实际上就是改动 黄色的部分, 

    独立的工程没有问题, 既然没有单独给stack设定, 就不要有这个段. 你设置了这个段, 就要按照样例程序修改asm文件.这个和启动文件有关.

  • 黄工  这几个文件我没有添加到我的boot狗工程里面,因为我在别的帖子里看到独立工程不需要这几个文件 ,我想向您确认一下,这几个文件是不是移植的必需文件?(我尝试过将这几个文件添加进boot工程,但是编译会出错)

  • 黄工  能给个联系方式吗?我实在搞不定了,麻烦您有偿指导下可以吗?

  • 留下邮箱, 

    你基于一个样例移植, 不要几个不同的样例搅和在一起, 每个人写的bootloader不完全一样. 但实现的功能是一样的.

  •  ocdrom_ce.asm和这里的设置是一回事

    如果你在这样设置成Yes, 就不需要ocdrom_ce.asm, 如果你设置成No, 就需要这个文件. 

    所以建议你基于一个工程去移植, 

Reply Children
No Data