打印
[STM32F4]

求助STM32F407VGT6写内部FLASH问题

[复制链接]
1221|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liweidxh|  楼主 | 2019-4-4 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个产品要远程升级功能,现在程序远程下发成功,校验也成功。
程序大致是将存储在外部RAM里面的程序,按照512byte一包,写入内部flash。
现在问题来了,我每写一包,然后再从flash里面读这包数据,都是正常,但是我再写下一包的时候,会把上一包数据擦除,最后用jflash查看内部flash时候,只剩下最后一包写入的数据,导致升级失败。
bootloader和app里面都使用了ucosiii。
不知道是什么原因,求助各位。

使用特权

评论回复
评论
liweidxh 2019-4-4 10:18 回复TA
void BSP_FLASH_Write(uint32_t WriteAddr,uint32_t *WriteBuf,uint32_t WriteNum) { FLASH_Status status = FLASH_COMPLETE; uint32_t addrx=0; uint32_t endaddr=0; if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4) return; //非法地址 FLASH_Unlock(); FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存 addrx=WriteAddr; //写入的起始地址 endaddr=WriteAddr+WriteNum*4; //写入的结束地址 if(addrx<0X1FFF0000){ //只有主存储区,才需要执行擦除操作!! whil  
沙发
yklstudent| | 2019-4-4 10:58 | 只看该作者
这个需要整体先擦除,然后再接收一包写入一包

使用特权

评论回复
评论
liweidxh 2019-4-4 11:06 回复TA
前面有个升级前准备,已经擦除过了 
板凳
huzi2099| | 2019-4-4 11:22 | 只看该作者
你查一下手册,flash里不同地址段的擦除扇区是不一样的,前面块小后面块大,好像是128K字节一次一擦.

使用特权

评论回复
评论
huzi2099 2019-4-4 12:19 回复TA
@liweidxh :有关系,扇区大小不一样 
liweidxh 2019-4-4 11:33 回复TA
擦除是按扇区擦的,和大小没关系吧 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝