歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Nandflash的訪問

1.Nandflash的硬件連接:

2.K9F1G08U0C:

    a.容量   : 256M(Byte)

    b.頁大小: (2K + 64) (Byte)

    c.塊大小: (128K + 4K)(Byte)

    d.頁數  :  a / b =128K

   

    e.對於256M的Nandflash, 需要28位的地址,發出命令後,後面緊跟著4個地址序列

    f.對於k9f2g08u0c, 以頁為單位進行讀寫, 以塊為單位進行擦除.

 

3.命令字及其操作方法:

    a.傳輸命令

       

    b.傳輸地址

     

        Column Address : 列地址 

                                      由於一頁有 (2048 + 64)Byte , 所以需要 12 根地址線來尋址 , 即 A0 ~ A11.

        Row       Address : 行地址

                                      由於整個Flash有128K個頁 (Page), 所以需要 17 跟地址線來尋址 , 即A12 ~A28.

 

    c.讀/寫數據 :

        以頁為單位進行讀寫, 以塊為單位進行擦除.

 

4.操作K9F2G08U0C , 以讀取Nand為例 , 沒用ECC校驗:

    4.1. S3C2440 Nandflash 的 PIN Configuration

           

           由於是2Kbyte的page , 5個cycle的地址 ,所以應該PIN Configuration 應該如下:

           OM[1:0]: 00:                -  Enable NAND flash memory boot

           NCON0 : 1                   -  Advance NAND flash(1KWords/2KBytes page size, 4/5 address cycle)

           GPG13  : 1                   -  Page=512Bytes(NCON = 0) or Page=2KBytes(NCON = 1)

           GPG14  : 1                   -  4 address cycle(NCON = 0) or 5 address cycle(NCON = 1)

           GPG15  : 0                   -  0: 8-bit bus width

    4.2. S3C2440 Nandflash Memory Timing:

           4.2.1.K9F2G08U0C的Timing:

         

          4.2.2.  S3C2440的Timing

           

          4.2.3. 使用默認的HCLK , 即 FCLK = HCLK = PCLK = 12Mhz .

          4.2.4. 設置NFCONF (0x4E000000):  0x1000 .

                    TACLS         [ 12 : 13 ] : 1            -Duration = HCLK x TACLS

                    TWRPH0     [  8  : 10 ] : 0            -Duration = HCLK x ( TWRPH0 + 1 )

                    TWRPH1     [  4  :   6 ] : 0            -Duration = HCLK x ( TWRPH1 + 1 )

                    BUSWIDTH [ 0          ] : 0            -8-bit bus

           4.2.5. 設置NFCONT (0x4E000004):  0x12.

                    InitECC        [4]  : 1                      -Initialize ECC decoder/encoder

                Reg_nCE      [1]   :1                     -Force nFCE to high (Disable chip select)

                    MODE         [0]  : 1                      -NAND flash controller enable

           4.2.6. 在第一次操作Nandflash前 , 復位Nandflash:

                    NFCONT &= ~(1 << 1)               -Force nFCE to low (Enable chip select)

                    NFCMD     = 0xff                         -reset

                    while( !(NFSTAT & 1) )                -Wait untill NAND Flash memory ready to operate

                    NFCONT   |=  (1 << 1)                 -Force nFCE to high (Disable chip select)  

            4.2.7. 發出讀命令 :

                    NFCONT &= ~(1 << 1)               -Force nFCE to low (Enable chip select)

                    NFCMD     =  0                            -Read command

            4.2.8. 發出地址信號 :

                    NFADDR = addr                 0xff   -addr's bit[0:7] , 1st Cycle

                    NFADDR = (addr >> 8 ) & 0x0f  -addr's bit[8:11] , 2nd Cycle

                    NFADDR = (addr >> 12)& 0xff   -addr's bit[12:19], 3rd Cycle

                    NFADDR = (addr >> 20)& 0xff   -addr's bit[20:27], 4th Cycle

                    NFADDR = (addr >> 28)& 0x01 -addr's bit[28], 5th Cycle           

          4.2.9.發送讀確認命令

 

                NFCMD     =  0x30

 

             4.2.10. 忙檢測 :

                    while( !(NFSTAT & 1) )                -Wait untill NAND Flash memory ready to operate

             4.2.11.讀NFDATA寄存器2048次 ,得到一頁數據 (2K Byte)

                    for(i =0; i<2048; i++) *p = NFDATA ;

             4.2.12.取消選中芯片

                     NFCONT   |=  (1 << 1)                 -Force nFCE to high (Disable chip select) 

Copyright © Linux教程網 All Rights Reserved