WINCE FAL+FMD nand flash驱动
2010-02-08 11:10
696 查看
以下是本人对 FAL+FMD的一点点理解,记录下来防止以后忘掉:)
FAL层会管理nand 地址影射。FAL层以sector为单位写一个sector(不会超过一个,虽然有长度的参数),在擦除sector所在块之前,一般会有下面三步写操作:
1) prepare to write (只写sectorinfo): 这个时候写这个sector的spare区,把这个sector标志为可写sector。
2) write main area + sectorinfo : 这个时候会向这个块中写数据,同时将sectorinfo写入,标志这个块已经有有效数据,同时FMD层也应该将ECC code 存入spare区。
3) 置dirty (只写sectorinfo):把这个sector数据标志为无效,待擦除。
这样对每个sector来说,会有3次的编程操作,因此对NOP=1的MLC nand来说,这样的构架肯定是不行的。因此可以认为FAL+FMD构架只能支持SLC nand.
spare区的layout ,举一个例子, 2K page SLC HW 1bit ECC 每512byte 可以矫正1bit 的错误,使用2K 为一个sector:
1 byte -------------------bad block ------------------------------------------------------------------
1 byte-------------------OEM reserved |-->SECC checked |
4 bytes------------------dwReseverd ----------- |--> Sectorinfo Structure
2 bytes------------------reseverd2 ------------------------------------------------------------------
4 bytes------------------MECC(1st 512)
4 bytes------------------MECC(2st 512)
4 bytes------------------MECC(3st 512)
4 bytes------------------MECC(4st 512)
2 bytes------------------SECC(checked first 6 bytes)
SECC一开始当步骤1)的时候就已经被写入了,因为之后的步骤2) 步骤3)还会改变reseverd2 (prepare dirty bit and etc) 以及 MECC,因此SECC 只能做到check前6个字节。
在第一步的时候spare区还不确定的部分都是写 FF的。 之后需要置0的时候再写0。 因为一旦写成0 就只能通过擦除整个块再重新对sector编程。
MECC由于是每512byte产生一次ECC parity code. 因此写的时候每512保存一次,最后一起写入spare区。读的时候先把spare中读出,然后在读main的时候作ECC check.
FAL层会管理nand 地址影射。FAL层以sector为单位写一个sector(不会超过一个,虽然有长度的参数),在擦除sector所在块之前,一般会有下面三步写操作:
1) prepare to write (只写sectorinfo): 这个时候写这个sector的spare区,把这个sector标志为可写sector。
2) write main area + sectorinfo : 这个时候会向这个块中写数据,同时将sectorinfo写入,标志这个块已经有有效数据,同时FMD层也应该将ECC code 存入spare区。
3) 置dirty (只写sectorinfo):把这个sector数据标志为无效,待擦除。
这样对每个sector来说,会有3次的编程操作,因此对NOP=1的MLC nand来说,这样的构架肯定是不行的。因此可以认为FAL+FMD构架只能支持SLC nand.
spare区的layout ,举一个例子, 2K page SLC HW 1bit ECC 每512byte 可以矫正1bit 的错误,使用2K 为一个sector:
1 byte -------------------bad block ------------------------------------------------------------------
1 byte-------------------OEM reserved |-->SECC checked |
4 bytes------------------dwReseverd ----------- |--> Sectorinfo Structure
2 bytes------------------reseverd2 ------------------------------------------------------------------
4 bytes------------------MECC(1st 512)
4 bytes------------------MECC(2st 512)
4 bytes------------------MECC(3st 512)
4 bytes------------------MECC(4st 512)
2 bytes------------------SECC(checked first 6 bytes)
SECC一开始当步骤1)的时候就已经被写入了,因为之后的步骤2) 步骤3)还会改变reseverd2 (prepare dirty bit and etc) 以及 MECC,因此SECC 只能做到check前6个字节。
在第一步的时候spare区还不确定的部分都是写 FF的。 之后需要置0的时候再写0。 因为一旦写成0 就只能通过擦除整个块再重新对sector编程。
MECC由于是每512byte产生一次ECC parity code. 因此写的时候每512保存一次,最后一起写入spare区。读的时候先把spare中读出,然后在读main的时候作ECC check.
相关文章推荐
- WinCE BSP-NAND flash驱动(whimory)
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- WinCE NAND flash - FAL
- wince FAL+FMD 分析(修改)
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- WinCE NAND flash - FAL
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(18)-Nand Flash驱动(FMD)及其简析(1)
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- 块设备驱动指的是文件系统驱动(FAL+FMD)吗
- WinCE NAND flash - FAL
- WinCE NAND flash - FAL
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(19)-Nand Flash驱动(FMD)及其简析(2)
- WinCE NAND flash - FAL
- WinCE NAND FLASH 驱动的开发
- WinCE NAND flash - FAL
- WinCE NAND flash - FAL
- Windows Mobile中使用WinCE驱动调试助手的小技巧
- WinCE虚拟串口驱动(一)