amobbs.com 阿莫电子技术论坛

标题: 求助lpc1768读片内flash,小概率出现某个地址数据读出来错误 [打印本页]

作者: jia_xuan    时间: 2022-7-22 09:24
标题: 求助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
给你的读指针加个volatile试试。。
作者: jia_xuan    时间: 2022-7-22 13:18
wye11083 发表于 2022-7-22 10:10
给你的读指针加个volatile试试。。
(引用自2楼)

加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。
作者: 初音之恋    时间: 2022-7-22 14:03
读一个uint32 addr到内存,再装载到buf,类似 reader=*((volatile uint32_t*)raddr);  Flash本来就是4个字节访问的
作者: modbus    时间: 2022-7-22 16:05
jia_xuan 发表于 2022-7-22 13:18
加了,还是会出错。如图,写入全0x00,读某个地址数据出错。每次读错误的位置不一样。 ...
(引用自3楼)

也许是通讯出错了
作者: jia_xuan    时间: 2022-7-22 19:48
modbus 发表于 2022-7-22 16:05
也许是通讯出错了
(引用自5楼)

我在程序内部做了判断,==0,!=0,返回值不一样,的确是读错误。
作者: baal    时间: 2022-7-22 19:51
本帖最后由 baal 于 2022-7-22 19:53 编辑

1768有个flash加速寄存器,对应运行速度,设下就好
作者: wye11083    时间: 2022-7-22 21:13
初音之恋 发表于 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
lpc1768就是有这个问题的,不要全速跑,降下频就好了。
作者: justdomyself    时间: 2022-7-25 13:15
xmlbb 发表于 2022-7-23 10:39
lpc1768就是有这个问题的,不要全速跑,降下频就好了。
(引用自9楼)

我记得2368貌似也有这个问题,出现过一次,当时没怎么在意。




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4