- 片上系统设计思想与源代码分析
- 陈曦 黄毅
- 613字
- 2025-02-20 07:00:49
4.4 NandFlash控制器的设计
4.4.1 NandFlash控制器的方框图
最基本的NandFlash控制器只完成NandFlash的操作中的基本子操作,包括命令周期、地址周期、地址结束周期、读周期,将其他操作留给软件。
更加复杂一点的NandFlash控制器能够完成NandFlash的硬件前向纠检错功能,如图4-8所示。写操作中,整个页的数据被写到2048B的缓存中,同时硬件生成前向纠错校验字节,并将所有数据存储到NandFlash中。在读数据的过程中,整个页被读出,同时前向纠错逻辑负责检测读取的数据是否有效。若数据有效,则主处理器或DMA可以将数据进一步使用,否则主处理器进行相应的错误处理。可以根据设计者的喜好进一步设计DMA请求和应答逻辑。

图4-8 NandFlash控制器的方框图
4.4.2 NandFlash控制器的前向纠错原理
NandFlash控制器的前向纠错可以自由设计,三星公司给出了一个参考设计,可以纠正1比特错误,检测多比特错误。
在该算法中,每2048个比特生成22比特校验码,包括16比特的行奇校验和6比特的列奇校验。数据安排如表4-2所示,生成的校验位如表4-3所示。
表4-2 数据安排

表4-3 生成的校验位

校验位的初值为0,生成方法如图4-9所示。

图4-9 校验位生成方法


经过观察可以发现,若只发生了1比特错误,则该比特的位置为
( P1024,P512,P256,P128,P64,P32,P16,P8,P4,P2,P1)。
当读取了256节的数据,新生成的校验码和存储的校验码进行比较,如果两者相等,则数据无错误,若有新生成的校验码和存储的校验码异或后,可出现如下几种情况。
(1)有11个1,则该错误为可纠正错误;
(2)为1个比特,则校验比特发生错误,数据本身无错误;
(3)出现其他情况,代表多个错误,不可纠正。如图4-10所示。

图4-10 数据校验