stm32 iap 程序跳转进入硬件异常 hex合并
来源:互联网 发布:玲珑加速器mac破解版 编辑:程序博客网 时间:2024/05/16 02:52
工作多年,常常觉得自己遇到的问题及解决办法,时间稍长,就容易遗忘,且没地方查。再者,经常看别人的文章,受益匪浅,自己也有些经验,却从来没有分享出来,深感惭愧。工作忙不是好借口,今日开始开博,不为别的,只为记录、备忘,以及解决其他人可能遇到的相同问题顺利找到解决办法。
问题:
stm32f103ret6上做的IAP,仿真调试阶段没有遇到过问题,外场使用就发现不能跳转到app,且不同板子、不同isp等都可能出现这种问题
解决:
直觉上是有规律的,一直找规律,经过一天试验、跟踪、bin代码对比,终于发现bin的最后一部分代码没有成功写入flash。
进一步分析iap的bootloader程序,果然最后不够整页的代码写入时指针不对,在已写入的区域,由于有代码且没擦除,不会执行编程操作,对已写入的部分没有影响,但是最后一部分程序丢失,当app启动运行时pc指针0xFFFFFFFF,进入硬件异常,修正指针后正常。其实增加写入代码验证会更利于debug。
附加问题:
1、bootloader、app是采用flash_loader_demo_v2.8.0,分两次写入flash
2、使用mcu isp可以使用网上的一个批处理文件合并之后,下载,也能运行
copy /b .\bootloader.hex+.\app.hex *-hb.hex
效果就是把app.hex拷贝到bootloader后面,写入*-hb.hex。
1、mcu isp是整片擦除,flash_loader是可选
2、mcu isp不验证hex结束,文件内容全部写入flash,flash_loader到第一个hex结束行即停止
so,
目前mcu isp只能烧写*-hb.hex能正常运行,单独烧写一个文件会擦除整个片子内容,在烧写这个文件,对iap来说运行不了。
flash_loader要灵活的多,但是烧写不了*-hb.hex,因为第一个文件结束行能被检测到,不在执行第二个文件的烧写。
度娘hex的格式,其实把bootloader.hex的最后一行去掉,把app.hex拷贝到后面即可,这样两个烧写软件都能够使用。
附hex文件格式说明:
用记事本打开hex,内容是一行一行的,且以冒号开头,16进制:
第一个字节:本行数据长度
第二个字节和第三个字节:本行代码写入flash的相对地址
第四个字节:数据类型
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
'03' Start Segment Address Record:开始段地址记录
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录
'05' Start Linear Address Record:开始线性地址记录
最后一个字节:校验码,0x100-所有的字节加起来的最后一个字节
例:
:020000040800F2第一行:1000000050FA002009010008490800084B080008C0第二行02本行数据0x02个字节
0000相对地址0x0000
04表示数据内容是扩展地址,绝对地址的高16位
0800编程地址的高字节,左移16位即0x0800 0000构成了基地址
F2校验码,02+00+00+04+08+00=0x0E 0x100-0x0E=0xF2
:04000005080030EDD2:00000001FF最后一行倒数第二行
05 表示main的入口地址,080030ED
最后一行
01 表示hex文件结束
- stm32 iap 程序跳转进入硬件异常 hex合并
- STM32 IAP程序跳转前后的中断问题
- STM32 IAP程序升级
- STM32 IAP程序相关记录
- STM32两个hex文件合并问题
- STM32 HEX文件合并的方法
- STM32 实现 IAP与APP文件合并
- IAP+YMODEM+CRC16+AES256+PC端软件+hex合并
- STM32程序进入HardFault_Handler
- STM32 IAP程序 源码 和测试代码
- 基于IAP的STM32程序更新技术
- 基于IAP的STM32程序更新技术
- stm32 IAP程序烧写方案
- STM32 无线下载程序(非IAP)
- 基于IAP的STM32程序更新技术
- STM32 IAP
- STM32 IAP
- STM32 IAP
- JSP内置对象
- BZOJ3771: Triple
- c语言中有关scanf的一个小趣谈
- Java基础知识(一)
- MSRA TD-500数据集
- stm32 iap 程序跳转进入硬件异常 hex合并
- 自己用到的网址
- ACM DP Super Jumping! Jumping! Jumping!
- Android设置监听器
- hdu6047 Maximum Sequence
- 优荐MQ
- next数组完美诠释
- 题目1168:字符串的查找删除
- ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)