找回密码
 立即注册
查看: 918|回复: 18

用不同格式文件进行OTA,上位机下发最后一位地址数据时,对后面多余的数据位怎么处理

[复制链接]
已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
发表于 2025-10-11 16:49:12 | 显示全部楼层 |阅读模式

如题,用官方的上位机(用户ISP下载程序(串口版))进行OTA时,通过打开不同格式的文件:bin文件,HEX文件

image.png

上位机下发最后一帧地址数据时,打开不同格式的文件,上位机对后面多余的数据处理方式不一样,

bin文件填充的数据不知道是什么意思,HEX文件填充0xFF就理解

image.png

image.png

回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 2025-10-11 17:49:20 | 显示全部楼层

还有写入的地址为什么不是连续的呢?

image.png

image.png

上面是我打印出来的上位机在每次发送写入数据时的地址,不应该是

0000 0080 0100 0180 0200 0280 0300 0380 0400 0480 0500 0580 0600 0680 0700 0780……吗?

回复

使用道具 举报 送花

已绑定手机

51

主题

2744

回帖

9547

积分

论坛元老

积分
9547
发表于 2025-10-11 19:55:17 来自手机 | 显示全部楼层
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?
回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 2025-10-13 08:56:04 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=189735&ptid=20493][color=#999999]乘风飞扬 发表于 2025-10-11 19:55[/color][/url][/size] 你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?[/quote]

bin文件是通过Keil5自带的一个HEX转换成bin软件生成的,编译之后可以自动生成

image.png

下面是bin文件和HEX文件

upload 附件:AP代码.binupload 附件:AP代码.bin

回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 2025-10-13 08:57:09 | 显示全部楼层
乘风*** 发表于 2025-10-11 19:55
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?

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

使用道具 举报 送花

已绑定手机

51

主题

2744

回帖

9547

积分

论坛元老

积分
9547
发表于 2025-10-13 10:18:58 | 显示全部楼层
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序功能。
至于地址不连续是因为烧录过程中如果一包数据的起始位置遇到FF就会跳过,从非FF数据地址开始取128字节进行发送。
回复

使用道具 举报 送花

已绑定手机
已实名认证

147

主题

4045

回帖

1万

积分

超级版主

积分
10681
发表于 2025-10-13 10:38:33 | 显示全部楼层
程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影响的
回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 2025-10-13 11:02:54 | 显示全部楼层
乘风*** 发表于 2025-10-13 10:18
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序 ...

好的,感谢解答
回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 2025-10-13 11:03:44 | 显示全部楼层
王*** 发表于 2025-10-13 10:38
程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影 ...

好的,感谢解答
回复

使用道具 举报 送花

已绑定手机

10

主题

49

回帖

284

积分

中级会员

积分
284
 楼主| 发表于 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区?
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-23 16:14 , Processed in 0.086514 second(s), 92 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表