写flash 后读 flash 导致 bus fault
未解决
YTM32B1H系列
-
自己写的写 flash 函数,单次写 256 Bytes,循环写 flash 后再读 flash,容易导致如下错误
psr: 0x01000000 [22:12:35.756] r00: 0x20010ec4 [22:12:35.759] r01: 0x20010ec8 [22:12:35.759] r02: 0x02150100 [22:12:35.762] r03: 0x20010ec4 [22:12:35.762] r04: 0x0200ac05 [22:12:35.765] r05: 0xdeadbeef [22:12:35.765] r06: 0xdeadbeef [22:12:35.768] r07: 0x20010e38 [22:12:35.768] r08: 0xdeadbeef [22:12:35.771] r09: 0xdeadbeef [22:12:35.771] r10: 0xdeadbeef [22:12:35.774] r11: 0xdeadbeef [22:12:35.774] r12: 0x0000000a [22:12:35.777] lr: 0x02004101 [22:12:35.777] pc: 0x02008280 [22:12:35.780] hard fault on thread: main [22:12:35.780] bus fault: [22:12:35.783] SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:02150100但是我如果在写之后,添加一定的延时,比如 1ms (实测过),就可以正常运行。请问可能是什么原因?
-
swust 感谢你的回复,目前测试了在read 之前添加下述代码可以正常运行。
while(0X00 == (REG32(EFM_STS) & EFM_STS_IDLE_MASK));补丁如下:
int board_flash_read(uint32_t addr, uint8_t *data, uint32_t size) { + // Wait Flash Idle + while(0X00 == (REG32(EFM_STS) & EFM_STS_IDLE_MASK)); rt_memcpy(data, (uint8_t *)addr, size); return 0; }但是这个 while 循环等待放在 write 函数的末尾还是不能解决问题,好奇怪。
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...
