STM32L431每次对Flash的操作是八字节对齐,如果我每次以八字节对齐写数据,没问题,对一个扇区只需擦除一次。
但如果是每次4字节写,则写第3个4字节的时候会失败。
我的操作如下,先擦除这个扇区,然后从0x801c000开始,第一个4字节写0x11223344, 第二个4字节写0x44332211, 如此往复
第一个4字节写入成功
Flash_Test,i=0
< 28448>FlashWrite:address=0x801c000,bytenum=4
< 28452>startCheckAddr=0x801c000,endCheckAddr=0x801c008
< 28457>tadd=0x801c000, byteNum=8
11223344 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
第2个4字节,因为写操作是八个字节对齐,所以先要擦除这个扇区,写入成功
Flash_Test,i=4
< 28862>FlashWrite:address=0x801c004,bytenum=4
< 28867>Writed,need to erase!
< 28870>startCheckAddr=0x801c000,endCheckAddr=0x801c008
11223344 44332211 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
第3个4个字节,因为全是1,所以直接写,但是失败
Flash_Test,i=8
< 29300>FlashWrite:address=0x801c008,bytenum=4
< 29305>startCheckAddr=0x801c008,endCheckAddr=0x801c010
< 29310>tadd=0x801c008, byteNum=8
ERROR=0xa8, error=0xa8
< 29316>Program 0 Dword fail,status=1
< 29319>data1=0xFFFFFFFF,data2=0xFFFFFFFF
11223344 44332211 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
0xa8对应的错误是FLASH_FLAG_PROGERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR,为什么此时0x801c008开始的FLASH地址都是1,但是写数据却失败,可能是什么原因
|