S3C6410设备时钟源选择、启动方式选择和内存映射
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.7.23
類別:WINCE bootloader開發
********************************LoongEmbedded********************************
?
S3C6410根據啟動設備(boot device)的類型分為支持6種操作模式,啟動設備可以是SROM、NOR、OneNAND、MODEM和IROM(internal ROM)任何的一種,見下圖
圖1
從上圖可知S36410的操作模式是系統啟動的時候根據XSELAND、OM[4:0]和GPN[15:13]的值來決定是哪種操作模式(比如是IROM)以及操作模式下的具體啟動設備(比如是SD或是NAND)。當然了這些引腳的值是根據我們所需要的啟動方式來決定的,比如開發板中就支持SD卡和NAND啟動的方式,下面嘗試從硬件設計的角度來學習是如何確定一些關鍵設計的。
?
1.????? 開發板的時鐘源選擇
?
圖2
上圖是6410CPU對時鐘發生器結構圖的部分,這里只是截了一部分圖,可知S3C6410的輸入時鐘源為外部晶振(XXTIpll)和外部時鐘(XEXTCLK),其中時鐘發生器由三個PLLs(Phase Locked Loop,鎖相環)組成,最高可以產生1.6GHz頻率的時鐘,這里開發板的設計是選擇12MHZ的外部晶振作為時鐘源,見下圖:
圖3
因為選擇外部晶振作為始終源,所以由XOM0=0,見下圖:
圖4
?
2.????? 開發板采用的啟動方式
由圖2和3中的內容可知XOM0=0,因為采用SD卡和NAND的啟動方式,結合圖1可知,OM[4:0]=11111,而且可知XSELNAND=1,那么就確定了這些引腳的設計,如下圖:
圖5
下圖是XSELNAND引腳設計部分:
圖6
?
?
2.1?? SD卡啟動方式
SD卡啟動方式,而我們選擇的是SD/MMC(CH1),根據圖1可知GPN[15:13]=111,所以可以通過圖5的SW1開關的2打到“OFF”,也即高電平的狀態,就可以實現是SD卡啟動的方式了。
2.2?? NAND啟動方式
開發板采用的是NAND是1GBytes的K9G8G08U0M,其一頁大小為2048Bytes,需要5個時鐘周期,見下圖
圖7
結合圖1和圖7可以得到NAND啟動方式的的GPN[15:13]=101,這時就需要
通過圖5的SW1開關的2打到“ON”,也即低電平的狀態,就可以實現是NAND卡啟動的方式了。
?
?
3.????? S3C6410的存儲器映射
S3C6410支持32位的物理地址空間,被分為memory和pheriperal部分。
?
3.1?? memory空間
memory地址范圍為0x0~0x6FFFFFFF(1792MBytes),通過SPINE總線memory空間。Memory又稱為主內存,又被分為啟動鏡像區(boot image area)、內部存儲區(internal memory area)、靜態存儲區(static memory area)和動態存儲區(dynamic memory area)。
?
1)????? 啟動鏡像區
啟動鏡像區的物理地址范圍是0x00000000~0x07FFFFFF(128MB),這個區域是用于啟動系統的,但是這個區域內并沒有實際的存儲介質與之對應。這個區域反映一個鏡像,這個鏡像指向內部存儲區或是靜態存儲區的一部分。啟動鏡像區的開始地址固定式0x00000000。在本設計中,通過上面描述的OM[4:0]選擇據頂的啟動介質后再把相應的介質的物理地址映射到這個啟動鏡像區,比如說選擇了IROM啟動方式(見圖1)后,就把IROM所占用的地址空間映射為0x00000000開始的空間。在本設計中,比如我們選擇NAND作為啟動介質,而又是Xm0CSn2選擇NAND的片選,那么就把0x20000000~0x27FFFFFF(為什么是這個范圍呢?見下圖)這128MB的物理地址映射到啟動鏡像區。
圖8
?
2)????? 內部存儲區
內部存儲區用于啟動代碼(boot loader)訪問內部ROM和內部SRAM,內部的SRAM也成為steppingstone。每塊內存存儲器的起始地址都是固定的,其中內部ROM的范圍是0x08000000~0x0BFFFFFF(見圖8),當然內部的ROM并沒有64MB這么多,而實際只有32KB用于存儲,該區域是只讀的,并且當內部ROM(IROM)啟動被選擇時,該區域能映射到啟動鏡像區,此種情況下,該區域存放放的是IROM方式下的啟動代碼,選擇IROM啟動的時候首先運行的就是這部分的代碼,稱為BL0,這部分代碼由廠家固化。內存SRAM的范圍是0x0c000000~0x0fffffff,實際可用的SRAM按照三星的手冊是4KB,其實這就是用于nand flash啟動的Steppingstone(但是這個Steppingstone是8KB,這2者似乎有矛盾,我覺得應該是寫這部分的作者的筆誤)。該區域能被讀寫,當NAND啟動被選擇時能映射到啟動鏡像區。
??
3)????? 靜態存儲區
靜態存儲區域的地址范圍是0x10000000~0x3FFFFFFF(6*128MB),通過該地址可以訪問SROM、SRAM(比如DM9000A)、NOR Flash、同步NOR接口設備和steppingstone。每一塊區域代碼一個片選(見圖8),比如如果用Xm0CSn[1]來作為DM9000A的片選信號,0x18000000~0x1FFFFFFF就代表Xm0CSn[1],我們就可以通過0x18000000~0x1FFFFFFF來訪問DM9000A自帶的SRAM。每個芯片選擇的開始地址都是固定的。
?
雖然Xm0CSn[5:2]可以映射到NAND Flash和CF/ATA等非線性存儲器,但我們不能通過靜態存儲區來訪問NAND Flash和CF/ATA的地址空間,相反,當映射到這些存儲器的時候這些bank的地址也不能再使用了,而只能通過pheriperal空間的AHB總線來訪問這些非線性存儲器。有一個例外是如果Xm0CSn[2]被映射到NAND Flash的時候,Steppingstone映射到0x020000000~0x27FFFFFF這塊區域,具體一點說是steppingstone這4KB的SRAM被映射到bank2開始的4KB,而在以NAND Flash方式啟動的時候bank2被映射到0x00000000開始的地方,那么實際上就是把steppingstone映射到0x00000000,,這樣,系統啟動的時候,會把NAND Flash的第一個4KB最開始的啟動代碼讀取到steppingstone中 來執行,這個讀取的動作是由NAND控制器自動完成的。
?
?
4)????? 動態存儲區
動態存儲區的范圍是0x40000000~0x6FFFFFFF(3*256MB),其中第一個256MB為保留區,實際使用的動態內存區位0x50000000~0x6FFFFFF,這個范圍又分為2個區間,每個區間占256MB,可以通過DMC(動態內存控制器)的Xm1CSn[1:0]來選擇對應的區間,這個內存主要是擴展DRAM,最大可以擴展512MB的DRAM,見圖8。下圖是開發板用
Xm1CSn[作為DRAM的片選信號的電路圖:
圖9
結合圖8,可以得出g_oalAddressTable表的DRAM區域范圍如下:
DCD???? 0x80000000, 0x50000000,? 256??? ; 256 MB DRAM
?
?
3.2?? pheriperal空間
外設區域通過PERI總線訪問,其地址范圍是 0x70000000~0x7FFFFFFF(256MBytes),這個地址范圍的所有的SFR都能被訪問,而且如果數據需要從NFCON或CFCON傳輸,這些數據需要通過PERI總線傳輸。
?
?
總結
以上是生活随笔為你收集整理的S3C6410设备时钟源选择、启动方式选择和内存映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: S3C6410的Bootloader的两
- 下一篇: S3C6410的IROM启动模式