找回密码
 立即注册
查看: 58|回复: 15

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

积分
257
发表于 3 天前 | 显示全部楼层 |阅读模式

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

image.png

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

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

image.png

image.png

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

积分
257
发表于 3 天前 | 显示全部楼层

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

image.png

image.png

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

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:530
  • 最近打卡:2025-10-13 10:18:58
已绑定手机

47

主题

2259

回帖

7957

积分

论坛元老

积分
7957
发表于 3 天前 来自手机 | 显示全部楼层
你的bin文件是通过hex文件生成的吗?能不能将两个文件发出来分析一下?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

积分
257
发表于 昨天 08:56 | 显示全部楼层
[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

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:530
  • 最近打卡:2025-10-13 10:18:58
已绑定手机

47

主题

2259

回帖

7957

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:590
  • 最近打卡:2025-10-13 10:38:33
已绑定手机
已实名认证

116

主题

2881

回帖

7342

积分

版主

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

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

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

好的,感谢解答
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

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

好的,感谢解答
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-10-13 08:56:04
已绑定手机

9

主题

47

回帖

257

积分

中级会员

积分
257
发表于 昨天 11:37 | 显示全部楼层
乘风*** 发表于 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, 2025-10-14 08:04 , Processed in 0.120128 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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