s3c2440 存儲控制器

  s3c2440存儲控制器提供了訪問外部設備的信號。比如像nandflash、sram、sdram、dm9000網卡之類的。那麼s3c2440存儲設備有哪些特性呢?

  — Little/Big endian (selectable by a software)
       支持小字節序、大字節序(通過軟件選擇)

  — Address space: 128Mbytes per bank (total 1GB/8 banks)
       每個bank地址空間爲128,總共八個,即1GB

  — Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit)
       編程控制訪問總線位度:8/16/32bit,但bank0只有16/32bit兩種選擇

  — Total 8 memory banks; Six memory banks for ROM, SRAM, etc. Remaining two memory banks for ROM, SRAM, SDRAM, etc .
       總共八個bank,前6個bank支持ROM,SRAM等,剩下的兩個支持ROM,SRAM,SDRAM等

  — Seven fixed memory bank start address
       前七個bank的起始地址是固定的。

  — One flexible memory bank start address and programmable bank size
       bank7有靈活的起始地址和可編程的大小

  — Programmable access cycles for all memory banks
       可編程控制所有bank的訪問週期

  — External wait to extend the bus cycles
       外部的wait信號可以延長總線的訪問週期

  — Supporting self-refresh and power down mode in SDRAM

       外接sdram,支持自刷新和省電模式

 

 

  上面爲s3c2440存儲控制器的地址空間分佈圖,分別爲不是boot from nandflash 和boot from nand flash兩種。s3c2440對外引出了27地址線ADDR0~ADDR26的訪問範圍只有128MB,這是總共八個bank的每個bank的大小。其次cpu對外引出了八個片選信號nGCS0~nGCS7。這樣總共有1GB的訪問空間。

 

  上面提到s3c2440的bank6、7的地址空間大小是可編程控制的,上面便是不同的空間大小分配情況。當時請注意,bank6和bank7的大小分配必須要是相同的。

 

  bank0可配置爲16bit或者32bit寬度。bank0是作爲啓動rom,所以其總線寬度應該在第一次訪問之前被確定,由OM[1:0]的電平決定。

  有關於內存地址引腳連接,如SROM/SDRAM,如數據位寬爲8bit,A0對應存儲芯片的ADDR0,16bit位寬,A1對應ADDR0,32bit位寬,A2對應ADDR0。爲什麼要這樣做呢?這樣可以確保唯一的地址訪問唯一的內存區域,比如對應32bit數據位寬來說,如數據在[0:3]地址爲100,對於發地址信號0、1、2、3都是相同的,因爲他們訪問了同一個內存區域。

  對於各個bank上面連接的類存儲設備,可以根據其位寬、存儲容量和bank數目決定bank地址線的連接方式,如64MB、32 bit位寬和128MB內存的bank地址爲來自於A[25:24]。

 

  下面看下我的開發板jz2440開發板上的存儲控制器的八個bank的使用情況:

    bank0 接nor flash MX29LV800BBTC;

    bank1、bank3與bank5 爲接上外部擴展插座

    bank2 未接設備

    bank4 外接DM9000A網卡

    bank6 外接sdram 兩個32M的 K4S561632N

    bank7 未接設備

  現在看下具體的各個寄存器,存儲控制器涉及到13個寄存器,這裏bank6的sdram初始化做解釋。

    1. BUS WIDTH & WAIT CONTROL REGISTER (BWSCON) 總線寬度和等待信號控制寄存器

 

     

  

      這個寄存器主要用來決定8個bank設置方法相同,比如我的板子上面bank6接了64MB的16bit的sdram,則[27:24]對應位爲0010,STx::sdram設爲0,sram設爲1;至於等待信號通常設爲0。

      至於bank0的設置是隻讀的,開機時根據OM[1:0]確定,上面已有提到。

    2. bank控制寄存器,主要分爲兩類,一類爲bank0~5不可以支持sdram的,另一類爲bank6~7可以支持sdram的。

  

     這是用來設置bank0~bank5的訪問時序,此不支持sdram,根據具體接入設備設置各個時間參數即可,這涉及到閱讀外設的芯片的工作。

 

    首先設置外接存儲設備的類型,MT表示存儲設備類型,這裏是sdram,bit[16:15]爲11,已經確定爲sdram類型,只用考慮bit[3:0];

    Trcd設置RAS to CAS delay,查看芯片手冊,最小值爲20ns,我們這裏設置的時鐘爲100MHZ,1clock約爲10ns,這裏使用3clock即可,稍微大於臨界值比較好,設置即01;

    SCAN設置,我這裏使用的sdram的column爲9bit,所以設置爲01。

  3. 刷新控制寄存器

 

    REFEN[23]:0 = 禁止sdram刷新,1=使能sdram刷新,此處設爲1使能;

    TREFMD[22]:sdram刷新模式,0=CBR/Auto刷新,1=自刷新模式,這裏設爲0模式;

    Trp[21:20]:此sdram的trp值最小爲20ns,此處我設爲3clock,1clock10ns,稍微大於臨界值,即01;

    Tsrc[19:18]:此sdram的trc最小值爲65,此處設爲7clock,時間70ns,即11

    Refresh Counter[10:0]:設置Refresh count,此處存儲控制器的時鐘頻率爲100MHZ,從sdram芯片上面找到64ms refresh period (8K Cycle),由上述公式count=2^11+1-100*64000/8192=0x008c04F2。

  4. BANKSIZE寄存器REFRESH

  

    BURST_EN[7]:0 ARM核禁止突發傳輸,1 ARM核允許突發傳輸;

    SCKE_EN[5]:0 不使用SCKE信號令sdram進入省電模式,1=使用SCKE信號令sdram進入省電模式;

    SCLK_EN[4]:0 時刻發出SCLK信號,1 僅在訪問sdram期間發出SCLK信號(推薦,似乎可以省電);

    BK76MAP[2:0]:bank67大小可變,但是必須連續並且相等,我的bank6接sdram爲64MB,bank67應設爲64MB/64MB,雖然bank7沒有使用。

  5. 最後的MRSRBx模式設置寄存器

  

    CL[6:4]:可以修改的此值,也是和sdram的時序有關,看芯片手冊,這裏只支持2和3兩種情況,這裏設置爲2clock,即0x30;

 

  以上就是本人對於s3c2440存儲控制器的理解,如發現錯誤!請幫助糾正,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章