用不同格式文件进行OTA,上位机下发最后一位地址数据时,对后面多余的数据位怎么处理
<p>如题,用官方的上位机(用户ISP下载程序(串口版))进行OTA时,通过打开不同格式的文件:bin文件,HEX文件</p><p><img src="data/attachment/forum/202510/11/164257zzmfw4vr8wp5mqzv.png" alt="image.png" title="image.png" /></p>
<p>上位机下发最后一帧地址数据时,打开不同格式的文件,上位机对后面多余的数据处理方式不一样,</p>
<p>bin文件填充的数据不知道是什么意思,HEX文件填充0xFF就理解</p>
<p><img src="data/attachment/forum/202510/11/164645u5zv1s00k1yiy5ee.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202510/11/164826uraqdqck2xbaa67a.png" alt="image.png" title="image.png" /></p>
<p>还有写入的地址为什么不是连续的呢?</p>
<p><img src="data/attachment/forum/202510/11/174356hv30s8yz344272x3.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202510/11/174544fzsw3sg3wiyslfo8.png" alt="image.png" title="image.png" /></p>
<p>上面是我打印出来的上位机在每次发送写入数据时的地址,不应该是</p>
<p>0000 0080 0100 0180 0200 0280 0300 0380 0400 0480 0500 0580 0600 0680 0700 0780……吗?</p>
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下? 乘风飞扬 发表于 2025-10-11 19:55
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?
<p>bin文件是通过Keil5自带的一个HEX转换成bin软件生成的,编译之后可以自动生成</p>
<p><img src="data/attachment/forum/202510/13/085439abl32etdbzsdo9wg.png" alt="image.png" title="image.png" /></p>
<p>下面是bin文件和HEX文件</p>
<p><a href="forum.php?mod=attachment&aid=117402" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:AP代码.bin</a><a href="forum.php?mod=attachment&aid=117403" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:AP代码.bin</a></p>
乘风飞扬 发表于 2025-10-11 19:55
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?
写入地址那里不是连续的,能解释一下为什么吗? 烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序功能。
至于地址不连续是因为烧录过程中如果一包数据的起始位置遇到FF就会跳过,从非FF数据地址开始取128字节进行发送。 程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影响的 乘风飞扬 发表于 2025-10-13 10:18
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序 ...
好的,感谢解答 王昱顺 发表于 2025-10-13 10:38
程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影 ...
好的,感谢解答 乘风飞扬 发表于 2025-10-13 10:18
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序 ...
还有一个问题想请教一下,
DWORD xdata DfuFlag _at_ 0xffc;
#define DFU_TAG 0x12ABCD34
void dfu_check()
{
_nop_(); _nop_();
_nop_(); _nop_();
delay();
if ((DfuFlag != DFU_TAG) && (*(BYTE code *)(LDR_SIZE) == 0x02) && (*(WORD code *)(LDR_SIZE + 1) >= LDR_SIZE + 3))
{ //DfuFlag是否被置位 //检查用户AP代码的复位指令是否规范
((void (code *)())(LDR_SIZE))(); //在进入ISP代码区后,若没有检测到执行了相对应的指令,则跳转执行AP程序代码区
}
//如果以上条件有一个被触发,则执行ISP程序代码区(即DfuFlag被置位,或用户AP代码的复位指令不规范)
// DfuFlag = 0;//把这个搬到升级成功后,再进入AP区
}
新芯片,第一次烧录后,DfuFlag的值是0xFFFFFFFF还是0x12ABCD34?
如果DfuFlag = 0xFFFFFFFF的话,
然后我把DfuFlag = 0;搬到升级成功后,再进入AP区的话,是不是第一次烧录并上电后,程序是不是会一直在ISP区?
页:
[1]
2