网页升级失败之迷雾 -- DMA
背景
需要做网页升级, 升级数据是来自于 MCU 外部的一个模块, 由串口来传递消息, 并且该升级模块每次从网页接收升级文件之后掉电就会丢失, 所以在升级的时候复位该设备就要从头传输, 并且每次网页升级文件传输给该升级模块之后模块要先完整校验一遍才通知 MCU 要开始升级, 很消耗时间.
BUG
每次在 application 区域 jump 到 bootloader 区域接收数据包, 然后校验的时候就会失败, 但是如果复位直接在 bootloader 区域等待升级模块重新从网页接收完整升级文件之后再接收数据包校验就能通过.
原因
application 中打开了 DAM, bootloader 所用的 RAM 和 application 所用的 RAM 完全重叠, DAM 正好修改了接收升级数据包的数组, 导致升级包校验失败.
解决办法
- 从 application jump 到 bootloader 之前关闭 DAM
- application 和 bootloader 不要使用同一个 RAM 区域, 但对于 MCU 这种小内存设备不友好, 并且要修改链接脚本和启动汇编, 比较麻烦

浙公网安备 33010602011771号