找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 22536|回复: 54

每台openwrt路由器都是编程器,wndr 4300 v1 当做Nand 编程器刷写ARM 机器的固件

  [复制链接]
发表于 2020-1-6 01:23 | 显示全部楼层
你遇到的各种问题,总结下来都是对NAND本身不熟,对NAND控制器不熟。有以下几点:

1. ECC 算法不符。
不同CPU的NAND控制器有不同的ECC算法,有些硬件不带ECC的,会使用软件ECC算法。
假定一个full page是刚erase过的,也就是包括oob区域都是ff。
假定此时开启了ECC,那么写入数据时(一个page,不含oob),那么NAND除了将这个page的数据写进去,还会对这个page的数据计算ecc校验码,并将其写入oob区域。
之后,要读取这个page的数据时,nand控制器会将两部分数据都读出来,通过ecc校验码检查page数据有没有出错,如果只有有限个(<=N)bit flip(位翻转),那么它可以将这个错误纠正。
不同的NAND控制器使用不同的ECC算法,因此对于相同数据,它们产生的ECC校验码也都不会相同。
如果你在A芯片上开启ECC后写进去了数据,在B芯片上也开启ECC并读取数据,那么就会出现ECC校验失败(翻转的bit太多),提示不可恢复的ECC错误。

针对你帖子里的描述:
AR9344是属于硬件自带ECC算法的。如果你替换上去的NAND原本使用的ECC算法跟AR9344自带的不同(与AR9344使用相同ECC算法的只有QCA9558,如果是ARM平台,那么99.99%不会相同),那么在breed/原厂uboot/固件mtd里面读取数据都会出现ECC错误。
跟你的机器时大小端序没有关系。

2. AR9344/QCA9558 的NAND控制器的特殊性。
这个NAND控制器有个奇葩的地方,就是会将每4个字节颠倒字节序后写进NAND,读取时也会改变字节序。这个毛病导致通过这个NAND控制器读取NAND的ONFI参数页时,都需要依次对每4个字节进行一次字节序转换。
我没见过有哪几家常用的NAND控制器会干这件事。
估计还是因为这个NAND控制器的IP core是Atheros买的,不是自己的,对接的时候没处理这个细节。

另外AR9344的NAND控制器极不稳定,时不时就不工作了。直到QCA9558这个问题才被修复。
针对AR9344的这个问题,驱动里面会不停对NAND控制器进行复位,对NAND芯片进行复位,以期它能重新正常工作。
因此你在操作NAND时出现读写速度突然变慢的情况,就是控制器出BUG了。
此外你接上TTL,观察机器从NAND启动时的log,就会发现BootROM一旦检测到NAND控制器出现BUG,就会对机器进行复位,重头再来。
这个现象很常见。我接手的两台WNDR3400v1都是相同的毛病,有时候能折腾1分钟才启动到kernel。

3. breed不是编程器软件。
breed的flash命令不支持RAW数据读写,因此你拿breed去读肯定是各种ECC错误。

4. 你如果真要这样做编程器,最好的方法就是读写都关闭ECC后再操作。
你帖子里的做法其实是将OOB留空,也就是关闭ECC后再写数据,OOB里面没有有效的ECC校验码。你这样的NAND拿到一个开了ECC的系统上去读,照样还是ECC错误。
解决方法是找到CPU的NAND控制器使用的ECC算法/或者厂商提供的ECC工具,对要写入的数据计算ECC校验码,并组合成一个包含page+oob的特殊格式的文件,通过写RAW数据+oob区的方式写入,这样才能实现你的目的,也就是写给另一个CPU用。
但是难点在于你很难获取到ECC算法。因为一个ECC算法如果能在相同大小的ECC校验码内纠正更多的位翻转,就说明这个ECC算法的纠错能力更强。强大的ECC算法都属于商业机密,厂商能给你一个编译好的ECC工具就不错了。

因此你这样折腾顶多就只能做成一个不支持ECC的原始编程器。

P.S.
我自己用MT7628的丰富的GPIO做过一个GPIO模拟NAND时序的NAND编程器,比AR9344稳定多了。

点评

大佬。我最近在折腾OOB,这个nand是MT29F4G08ABAFA,一直找不到他的OOB算法。能否恳请您指点迷津。  发表于 2023-11-16 06:53
感谢您能阅读本帖并回复,之前在别的帖子中的问题,您能很快回复,再次感谢!!! 仔细阅读了您的回复,学习了不少知识盲点,本人小白,碰到问题后才上网查资料,有些东西连蒙带猜。肯定有不少错误。 一、回帖中  详情 回复 发表于 2020-1-6 10:58
大神出现,字字都是宝贵经验啊  发表于 2020-1-6 08:51
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2020-1-6 11:23 | 显示全部楼层
本帖最后由 hackpascal 于 2020-1-6 11:25 编辑
jiuweiljp 发表于 2020-1-6 10:58
感谢您能阅读本帖并回复,之前在别的帖子中的问题,您能很快回复,再次感谢!!!
仔细阅读了您的回复, ...

是不是可以理解AR9344 nand控制器为读的时候4字节翻过来,写的时候再倒回去,对实际的操作没有影响。
--> 对AR9344的实际操作没有影响,对这之外的就不一定了。因为别的CPU可不见得会在读取的时候转换字节序。

新的nand flash 中oob数据并没有留空
--> 擦除的时候就已经擦成空的了。即使写入上次的ECC数据,只要数据变了,ECC也就无效了

那个有问题的目标机器(ARM CPU)在这样操作后能启动新写进的nand flash。
--> 你这ARM的CPU在启动阶段就多半没有开ECC

市面上的编程器的上位机软件没有那么牛x吧,能将不同的对象cpu的ecc校验算法也能做进去
--> 它们可以从芯片厂商那里买啊,不见得是源码,可能就是一个程序。钱给够就行

那个上位机软件是开源的吧
--> 我用breed做的,专门做了raw读写

点评

H大 大麦 DW33D 的NAND是以CPU字节序保存的吗,BREED下写入操作实际写入的是CPU字节序。读出来是正常的  详情 回复 发表于 2020-1-11 10:11
H大 大麦 DW33D 的NAND是以CPU字节序保存的吗,BREED下写入操作实际写入的是CPU字节序。读出来是正常的  详情 回复 发表于 2020-1-11 10:11
请问大佬,BREED不继续开发了吗?  详情 回复 发表于 2020-1-9 15:57
感谢回复!! 文中提到 ----------- 新的nand flash 中oob数据并没有留空 --> 擦除的时候就已经擦成空的了。即使写入上次的ECC数据,只要数据变了,ECC也就无效了 ---------- 假如 源nand flash芯片,与新的  详情 回复 发表于 2020-1-6 18:54
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2020-1-6 19:28 | 显示全部楼层
jiuweiljp 发表于 2020-1-6 18:54
感谢回复!!我也没有指望能弄一个带ecc校验的nand 写设备,只要能一比一复制就非常满足了。

另外回文 ...

这种没问题
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-23 14:33

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表