您尚未登录。

楼主 # 2021-06-25 18:32:54

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

记一天愚蠢的调试

F1C100s上写数据到Nand Flash,LittleFS文件系统。保存的数据有很多bit错误。
调试发现和LittleFS层无关,不经过文件系统直接写Flash也会出错。
花了一天时间换不同的数据测试写Flash,情况非常奇怪,写入比较“规律”的数据则很少出错,写入比较“乱”的数据则很多错误。
是坏块的问题吗?不像,因为出错的数目远超过正常的坏块数。
而且写入不同的数据,出错的地方也不一样。每次都是一个bit错误,应当是1的bit变成了0。
…………
…………
在快要下班的时候,换块Flash试试。咦?Flash ID怎么不一样了?
换了Flash竟然完全正常了!!
原来是从代理商那拿了两种样品,两种的型号只差一点点,代理商说用起来是一样的。我照着一个规格书实现了驱动。
但其实两种型号,一个是内置4-bit ECC,一个是需要host自己做8-bit ECC。
我一开始焊的是不带ECC的那种,所以发生好多bit错误。换成内置ECC的就全好了!
…………
愚蠢的一天啊[哭][哭][哭]
以前没做过ECC相关的,不知道Nand Flash内部其实会有这么多错误,非常依赖ECC。

最近编辑记录 Quotation (2021-06-25 18:36:54)

离线

#1 2021-06-25 20:08:56

unturned3
会员
注册时间: 2020-07-01
已发帖子: 263
积分: 301

Re: 记一天愚蠢的调试

我也分享一个……
今天才发现C语言 & 运算符的优先级低于 ==
怪不得 if (reg_1>>16 & 0xff == reg_2) 之类的代码会造成诡异的逻辑错误
其实 GCC 是给了我 warning 的,不过被我忽略了……

离线

#2 2021-06-26 10:22:49

lcfmax
会员
注册时间: 2018-04-13
已发帖子: 319
积分: 272.5

Re: 记一天愚蠢的调试

unturned3 说:

我也分享一个……
今天才发现C语言 & 运算符的优先级低于 ==
怪不得 if (reg_1>>16 & 0xff == reg_2) 之类的代码会造成诡异的逻辑错误
其实 GCC 是给了我 warning 的,不过被我忽略了……

很多时候懒得想这个优先级,全部加括号,自己控制优先级

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn