求助lpc1768读片内flash,小概率出现某个地址数据读出来错误
方法如下:void ReadIapFlashConfig(uint32_t readAddr, uint8_t *readBuf, uint16_t readLen){
while(readLen--)
{
*(readBuf++) = *((uint8_t*)readAddr++);
}
}进一步实验发现,错误原因是把某一位0读成了1,错误数据地址是随机。如果flash内部全0xff,不会出错。如果用jlink读任何情况都能读对。郁闷了。 给你的读指针加个volatile试试。。 wye11083 发表于 2022-7-22 10:10
给你的读指针加个volatile试试。。
(引用自2楼)
加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。 读一个uint32 addr到内存,再装载到buf,类似 reader=*((volatile uint32_t*)raddr);Flash本来就是4个字节访问的 jia_xuan 发表于 2022-7-22 13:18
加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。 ...
(引用自3楼)
也许是通讯出错了 modbus 发表于 2022-7-22 16:05
也许是通讯出错了
(引用自5楼)
我在程序内部做了判断,==0,!=0,返回值不一样,的确是读错误。 本帖最后由 baal 于 2022-7-22 19:53 编辑
1768有个flash加速寄存器,对应运行速度,设下就好 初音之恋 发表于 2022-7-22 14:03
读一个uint32 addr到内存,再装载到buf,类似 reader=*((volatile uint32_t*)raddr);Flash本来就是4个字 ...
(引用自4楼)
读不受限制。CPU DBus支持byte/half/word自动对齐(根据指令格式)。 lpc1768就是有这个问题的,不要全速跑,降下频就好了。 xmlbb 发表于 2022-7-23 10:39
lpc1768就是有这个问题的,不要全速跑,降下频就好了。
(引用自9楼)
我记得2368貌似也有这个问题,出现过一次,当时没怎么在意。
页:
[1]