发现一种linux的nand_data+obb的读写算法 请管理员判断是否必要加入编程器
本人经常读写一些设备的NAND,其实大部分设备使用坏块跳过时可以很好的解决坏块问题,即使单文件不分区,因为分区模式下的坏块跳过只是为了应对 分区内剩余块数小于分区内的坏块数这一情况,也就是说不分区的情况下 出现分区数据起始地址偏移的情况必然是本区坏块数大于分区剩余块数。多分区烧录虽然可以保证每个块的起始地址不受影响 ,但是这种情况下依然不能保证存在坏块的本分区数据完整性。那么最可靠的坏块管理办法必然是设备本身的坏块管理方式,而绝大部分设备是支持跳过坏块的
回到正题
关于跳过坏块,最近遇到某一品牌设备只要跳过就无法正常启动的情况,通过简单的分析其配置文件发现对nand的一套读写方案 他在逻辑层将所有芯片的OOB_len配置为64
其实大的设备厂家往往有多个nand供应商,那么为了统一管理 很多厂家都采用对oob固定尺寸的方案
那么我硬拷贝全片数据后验证这个情况
下面是硬件环境
芯片:NW874
芯片页大小:2048
obb:128
block:2048
那么正常的数据组成应该是 2048(data)+128(oob)
那通过对备份数据的分析发现实际linux的应用为:
第一页 2048data+64oob,后面为64data+2048data+64oob 以此类推也就是说他把每一个oob拆分多2个64,第一个64作为oob数据,第二个作为data
那么除了第一页配置为2048+64外,其他页均为2112+64
这时使用我们软件默认的芯片配置 来跳过坏块必然发生错误的地址偏移或者部分data被抛弃的情况
我已经通过以上算法成功从nand备份的数据中剥离出有效数据 并通过了CRC校验,所以以上算法不用存在质疑
以上数据仅为举例,既然有厂家将原本128oob拆分为2个64使用,那么也就会有厂家将原本64的oob拆分为2个32使用
我想表达的意思就是 是否可以将linux拆分oob这一情况 考虑到软件中,新增选项让用户也可以自定义拆分oob来实现配套的读写管理。
该功能可能将解决很大一部分的nand读写问题,将是消费者福音
以上表达写的有点乱,如果没有看明白欢迎讨论,毕竟这是个有价值的线索。或许可以解决八成的nand坏块问题
如需要芯片备份出的数据 可以提供 |