s3c2440的内存管理机制
1.???? Nand Flash、Nor Flash、SDRAM地址區別
Nand Flash:ROM,容量大,適用于數據存儲,ARM不能從Nand中直接啟動,需要把程序從Nand的前4k空間中拷貝到SDRAM,然后再從SDRAM中啟動。
Nor Flash:ROM,容量小,適用于程序存儲,ARM可以從Nor Flash中直接啟動。
SDRAM: RAM,容量大,操作系統等大型軟件都運行在SDRAM中。
?
2.???? S3c2440尋址空間:
S3C2440有27根地址線ADDR[26:0],8根片選信號ngcs0-ngcs7,對應bank0-bank7,當訪問bankx的地址空間,ngcsx引腳為低電平,選中外設。
2^27=2^7 * 2^10 * 2^10 = 128Mbyte
8*128Mbyte = 1Gbyte
所以S3C2440總的尋址空間是1Gbyte。(也就是最高地址0x40000000)
尋址空間如下圖:
?
3.???? SDRAM的尋址原理:
SDRAM內部是一個存儲陣列。可以把它想象成一個表格。和表格的檢索原理一樣,先指定行,再指定列,就可以準確找到所需要的存儲單元。這個表格稱為邏輯BANK。目前的SDRAM基本都是4個BANK。尋址的流程就是先指定BANK地址,再指定行地址,最后指定列地址。這就是SDRAM的尋址原理。
4.???? 內存片(HY57V561620F)的連接方式:
HY57V561620F的容量是16M尋址*16位寬=256Mbit。
TQ2440中使用了兩片內存,總容量為2*32M=64Mbyte。
A0-A12是地址線:行地址、列地址復用,行地址使用A0-A12(13條),列地址使用A0-A8(9條)。
BA0-BA1是bank選擇引腳。(bank選擇與行地址(row address)同時下發,在列地址下發時,有其他用途)。
?
這個SDRAM有
13根行地址線?? RA0-RA12
9根列地址線??? CA0-CA8
2根BANK選擇線 BA0-BA1
SDRAM的地址引腳是復用的,在讀寫SDRAM存儲單元時,操作過程是將讀寫的地址分兩次輸入到芯片中,每一次都由同一組地址線輸入。兩次送到芯片上去的地址分別稱為行地址和列地址。它們被鎖存到芯片內部的行地址鎖存器和列地址鎖存器。/RAS是行地址鎖存信號,該信號將行地址鎖存在芯片內部的行地址鎖存器中;/CAS是列地址鎖存信號,該信號將列地址鎖存在芯片內部的列地址鎖存器中。
SDRAM的A0接S3C2440的ADDR2,很多初學者都對這里又疑問。A0為什么不接ADDR0?
要理解這種接法,首先要清楚在CPU的尋址空間中,字節(8位)是表示存儲容量的唯一單位。
用2片HY57V561620F擴展成32位SDRAM,可以認為每個存儲單元是4個字節。因此當它的地址線A1:A0=01時,處理器上對應的地址線應為ADDR3:ADDR2=01(32位SDRAM每4字節一個地址,對應于CPU)(因為CPU的尋址空間是以Byte為單位的)。所以SDRAM的A0引腳接到了S3C2440的ADDR2地址線上。
(可以看成,ARM的尋址地址=CPU的地址*4,因為對CPU來講相當于沒讀一次都相隔4byte)。
?
同理,如果用1片HY57V561620F,數據線是16位,因為一個存儲單元是2個字節,這時SDRAM的A0要接到S3C2440的ADDR1上。
?也就是說SDRAM的A0接S3C2440的哪一根地址線是根據整個SDRAM的數據位寬來決定的。
上面的接線圖上,BA0,BA1接ADDR24,ADDR25,為什么用這兩根地址線呢?
BA0~BA1代表了SDRAM的最高地址位。因為CPU的尋址空間是以字節(Byte)為單位的,本系統SDRAM容量為64MByte,那就需要A25~A0(64M=2^26)地址線來尋址,所以BA1~BA0地址線應該接到2440的ADDR25~ADDR24引腳上。
13根行地址線+9根列地址線 = 22根。另外HY57V561620F一個存儲單元是2個字節,相當于有了23根地址線。BA0,BA1是最高地址位,所以應該接在ADDR24,ADDR25上。
?
5.???? 啟動過程中尋址方式
系統啟動取決于S3c2440 CPU的OM0、OM1兩個引腳的取值:
因此在TQ2440中,直接將OM1接地(永遠為0),OM0作為撥碼開關,來選擇是從nand啟動(接地,0)還是從nor 32-bit啟動(懸空,1)。
6.???? Nor Flash引腳圖(EN29LV160AB-70TCP)
地址線A0-A19,共20條;
數據線D0-D15,共16條(D15為數據、地址復用);
當47腳BYTE#配置為字節byte模式時(0),D15用于A-1地址線,所以尋址空間為20+1=21條,也就是2M byte。
當47腳BYTE#配置為雙字word模式時(1),D0-D15都用于數據線,尋址空間為20條,1M,數據線D0-D15有效,數據量為1M*2=2Mbyte。(TQ2440采用此模式)
7.???? 重要信息地址
| ? | 標示 | 地址 | 含義 |
| 寄存器 | 寄存器范圍 | 0x48000000~0x5fffffff | ? |
| ? | S3C24X0_GPIO_BASE | 0x56000000 | Gpio各寄存器基地址 |
| ? | S3C2410_SDI_BASE | 0x5A000000 | SDI |
| ? | S3C24X0_USB_DEVICE_BASE | 0x52000140 | 用戶設備 |
| ? | S3C2410_NAND_BASE | 0x4E000000 | Nand |
| ? | S3C24X0_LCD_BASE | 0x4D000000 | LCD |
| ? | S3C24X0_INTERRUPT_BASE | 0x4A000000 | 中斷 |
| ? | ? | ? | ? |
| 運行數據 | _bss_start | 0x33db6990 | ? |
| ? | _armboot_start | 0x33d80000 | ? |
| ? | CFG_ENV_SIZE | 0x20000 | ? |
| ? | FREE_RAM_SIZE | 0x3d1df7c | ? |
| ? | ? | ? | ? |
| ? | ? | ? | ? |
| ? | ? | ? | ? |
| ? | ? | ? | ? |
| ? | ? | ? | ? |
?
| 宏觀內存范圍 | Nor Flash(nor 啟動方式) | 0x00000000~0x001fffff | Nor flash位于bank0。 2Mbyte容量。 |
| ? | CPU內部SRAM(Nand Flash啟動方式) | 0x00000000~ | Nand flash啟動時拷貝到SRAM中運行 |
| ? | 外部SDRAM | 0x30000000~0x34000000 | 64Mbyte容量 |
| ? | Nand Flash | NULL | Nand Flash不直連總線,通過控制器訪問。 |
?
?
內存分配
| SDRAM地址end | @0x34000000 |
| Bss_start | 此上,為bss數據區 |
| Armboot_start | 此上,為uboot映像,大概200k |
| CFG_MALLOC_LEN | 256k |
| GLB_DATA_SIZE | 128byte+4byte |
| IRQ_stack | 4k |
| FIQ_stack | 4k |
| 用戶棧區 | 128k |
| 空閑地址空間 | 大概61Mbyte(SDRAM內存總共64M). |
| SDRAM地址start | @0x30000000 |
| Nor /nand flash….. | ? |
| ? | ? |
?
8.???? 名詞解釋
| ? | ? | ? |
| nGCS0 | 芯片選擇(片選)寄存器 | nGCS0-nGCS7 |
| ? | ? | ? |
| ? | ? | ? |
總結
以上是生活随笔為你收集整理的s3c2440的内存管理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘汰LTPO!天马发布全新低频OLED屏
- 下一篇: 鼎桥版“P50”现身:用上骁龙888 5