本帖最后由 flying1104 于 2024-7-5 14:02 编辑
环境:
使用Bootloader写入带有CRC的app.bin
使用U盘读取后,写入
使用RL-FLASHFS 函数调用
现象:
在调用RL-FLASHFS函数写入的时候,发现在99%的时候,永远写入错误
分析:
排查发现写入CPU FLASH必须为32位对齐
正常使用生成的APP.bin是32位对齐的
而加了CRC后,是会在末尾增加4位的校验数据,造成不是32位数据包
因此造成了写入到99%时候会出错
发现:
然后看了例子,为什么没有出错
[C] 纯文本查看 复制代码 TotalSize += bw;
ucState = bsp_WriteCpuFlash((uint32_t)(AppAddr + Count*sizeof(tempbuf)), (uint8_t *)tempbuf, bw);
其中tempbuf的大小位4096,永远为32位对齐
使用RL-FLASHFS的时候,修改成
[C] 纯文本查看 复制代码 uiReadCnt = fread(ucaBuff, sizeof(uint8_t), PAGE_SIZE, fin);
ucState = bsp_WriteCpuFlash((uint32_t)(APP_ADDR + uiPageCnt * uiReadCnt), (uint8_t *)ucaBuff, uiReadCnt);
uiReadCnt 为实际读取到的数据大小,最终造成了读取到不一定是32位对齐
解决:
暂时的解决方法是读取字节数,然后判断差了多少个字节,在写入到片内FLASH后面增加相应的0x00填充到32位对齐
不知道还有没更方便的方案,尤其是能够在根源解决问题
3楼把根源的图片解析了一下
|