jia_xuan 发表于 2022-7-22 09:24:26

求助lpc1768读片内flash,小概率出现某个地址数据读出来错误

方法如下:void ReadIapFlashConfig(uint32_t readAddr, uint8_t *readBuf, uint16_t readLen)
{
        while(readLen--)
        {
                *(readBuf++) = *((uint8_t*)readAddr++);
        }
}进一步实验发现,错误原因是把某一位0读成了1,错误数据地址是随机。如果flash内部全0xff,不会出错。如果用jlink读任何情况都能读对。郁闷了。

wye11083 发表于 2022-7-22 10:10:10

给你的读指针加个volatile试试。。

jia_xuan 发表于 2022-7-22 13:18:29

wye11083 发表于 2022-7-22 10:10
给你的读指针加个volatile试试。。
(引用自2楼)

加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。

初音之恋 发表于 2022-7-22 14:03:54

读一个uint32 addr到内存,再装载到buf,类似 reader=*((volatile uint32_t*)raddr);Flash本来就是4个字节访问的

modbus 发表于 2022-7-22 16:05:40

jia_xuan 发表于 2022-7-22 13:18
加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。 ...
(引用自3楼)

也许是通讯出错了

jia_xuan 发表于 2022-7-22 19:48:30

modbus 发表于 2022-7-22 16:05
也许是通讯出错了
(引用自5楼)

我在程序内部做了判断,==0,!=0,返回值不一样,的确是读错误。

baal 发表于 2022-7-22 19:51:49

本帖最后由 baal 于 2022-7-22 19:53 编辑

1768有个flash加速寄存器,对应运行速度,设下就好

wye11083 发表于 2022-7-22 21:13:36

初音之恋 发表于 2022-7-22 14:03
读一个uint32 addr到内存,再装载到buf,类似 reader=*((volatile uint32_t*)raddr);Flash本来就是4个字 ...
(引用自4楼)

读不受限制。CPU DBus支持byte/half/word自动对齐(根据指令格式)。

xmlbb 发表于 2022-7-23 10:39:39

lpc1768就是有这个问题的,不要全速跑,降下频就好了。

justdomyself 发表于 2022-7-25 13:15:55

xmlbb 发表于 2022-7-23 10:39
lpc1768就是有这个问题的,不要全速跑,降下频就好了。
(引用自9楼)

我记得2368貌似也有这个问题,出现过一次,当时没怎么在意。
页: [1]
查看完整版本: 求助lpc1768读片内flash,小概率出现某个地址数据读出来错误