這幾天在研究st2410開發板上的儲存器控制部分,現結合自己在實驗中碰到的問題和查詢的相關資料,談談幾個注意點。
1)s3c2410與sdram的連線問題
1、首先cpu向sdram傳送乙個讀位址,a0-a14對應的位址訊號是001000000000000b,此時sdram上的a0-a12上的位址訊號是0010000000000b,然後sdram返回該位址對應的儲存單元的資料(32位資料),最後儲存器控制器將該資料的低8位資料返回給cpu;
2、cpu向sdram傳送下乙個讀位址,a0-a14對應的位址訊號是001000000000001b,此時sdram上的a0-a12上的位址訊號是0010000000000b,然後sdram返回該位址對應的儲存單元的資料,最後儲存器控制器將該資料的次低8位資料返回給cpu;
3、cpu向sdram傳送下乙個讀位址,a0-a14對應的位址訊號是001000000000010b,此時sdram上的a0-a12上的位址訊號是0010000000000b,然後sdram返回該位址對應的儲存單元的資料,最後儲存器控制器將該資料的次高8位資料返回給cpu;
4、cpu向sdram傳送下乙個讀位址,a0-a14對應的位址訊號是001000000000011b,此時sdram上的a0-a12上的位址訊號是0010000000000b,然後sdram返回該位址對應的儲存單元的資料,最後儲存器控制器將該資料的高8位資料返回給cpu;
這樣,就完成了乙個32位資料的完整讀取過程,從中可以發現,cpu的a0和a1位址線被自動遮蔽,並不參與解碼,也就是說cpu傳送的位址訊號必須是4的倍數,這樣讀寫的資料才是變化的。
總結:一般地,外設與cpu的連線方式取決於外設的資料位數:
如果外設的資料位數是8位,則cpu的a0連線外設的a0;
如果外設的資料位數是16位,則cpu的a1連線外設的a0;
如果外設的資料位數是32位,則cpu的a2連線外設的a0;
2)nand flash啟動方式
st2410開發板支援從nand flash啟動系統。
我們知道,應用程式通常需要被裝載到記憶體中才可以執行,而nand flash並沒有連線到系統匯流排上,只是通過幾個io口與s3c2410連線,那麼系統是怎樣從nand flash上啟動的呢?首先看一下2410啟動後的儲存器對映圖:
圖的右邊是從nand flash啟動後的對映圖,可以看到在最下面有4kb大小的sram被對映到bank0處,其實現原理是這樣的:s3c2410內部提供乙個叫做「stepping stone」的sram緩衝器,系統啟動時nand flash的前4kb**(通常是bootloader的stage 1)被自動複製到stepping stone中,又因為程式的執行是從0位址開始的,所以stepping stone被對映到bank0處,然後cpu開始執行這段**,當引導**執行完之後就自動跳轉到sdram中執行,開始啟動作業系統。
3)nor flash
由於nor flash通過系統匯流排與s3c2410相連,所以應用程式可以直接在flash裡面執行,無需再裝載到記憶體中,所以bootloader一般放在nor flash中。
SDRAM和NAND Flash的幾個注意點
這幾天在研究st2410開發板上的儲存器控制部分,現結合自己在實驗中碰到的問題和查詢的相關資料,談談幾個注意點。1 s3c2410與sdram的連線問題 1 首先cpu向sdram傳送乙個讀位址,a0 a14對應的位址訊號是001000000000000b,此時sdram上的a0 a12上的位址訊號...
SDRAM和重定位
sdram和重定位 段 段通常是指用來存放程式執行 的一塊記憶體區域,這部分區域的大小在程式執行前就已經確定,並且記憶體區域通常屬於唯讀。也有可能包含一些唯讀的常數變數,例如字串常量等。資料段 用來存放程式中已初始化的全域性變數的一塊記憶體區域,屬於靜態記憶體分配。bss段 用來存放程式中未初始化的...
nand flash啟動和nor flash啟動
1 nor flash啟動 cpu看到的0位址是在nor flash上 1 把bootloader燒寫在nor flash的0位址 2 上電時,從nor flash的0位址開始執行。3 比較大時需重定位,重定位時,把 從nor flash 複製到sdram上的鏈結位址 程式執行時應該位於的地方 2 ...