ZARD渐空 发表于 2025-10-11 16:49:12

用不同格式文件进行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>

ZARD渐空 发表于 2025-10-11 17:49:20

<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>

乘风飞扬 发表于 2025-10-11 19:55:17

你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?

ZARD渐空 发表于 2025-10-13 08:56:04

乘风飞扬 发表于 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&amp;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&amp;aid=117403" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:AP代码.bin</a></p>

ZARD渐空 发表于 2025-10-13 08:57:09

乘风飞扬 发表于 2025-10-11 19:55
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?

写入地址那里不是连续的,能解释一下为什么吗?

乘风飞扬 发表于 2025-10-13 10:18:58

烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序功能。
至于地址不连续是因为烧录过程中如果一包数据的起始位置遇到FF就会跳过,从非FF数据地址开始取128字节进行发送。

王昱顺 发表于 2025-10-13 10:38:33

程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影响的

ZARD渐空 发表于 2025-10-13 11:02:54

乘风飞扬 发表于 2025-10-13 10:18
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序 ...

好的,感谢解答

ZARD渐空 发表于 2025-10-13 11:03:44

王昱顺 发表于 2025-10-13 10:38
程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影 ...

好的,感谢解答

ZARD渐空 发表于 2025-10-13 11:37:07

乘风飞扬 发表于 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
查看完整版本: 用不同格式文件进行OTA,上位机下发最后一位地址数据时,对后面多余的数据位怎么处理