请教一下,在ota升级 传输app的bin文件过程中出现下述情况,是不是因为 app bin文件有128k ,codeflash总共为128k 但是写入起始位置为0x4000,所以app 的数据还没写完 codeflash'空间就用完了,才导致这样?
我这样设置出来是119K, 前面0-2000H是8K, 你搞不定就把工程发给我
你分离出来的文件名是flash4000-1FFFF.bin, 你给我的是uart3.bin, 两个文件不是一码事.
你用xmodem传输的文件应该是flash4000-1FFFF.bin, 这个才是app的数据, 用错文件了!!!
上面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不完全一样. 但实现的功能是一样的.
2497749418@qq.cm
ocdrom_ce.asm和这里的设置是一回事
如果你在这样设置成Yes, 就不需要ocdrom_ce.asm, 如果你设置成No, 就需要这个文件.
所以建议你基于一个工程去移植,