S3C2416裸機(jī)開發(fā)系列一_裸機(jī)開發(fā)環(huán)境以及啟動模式
1. S3C2416概述
S3C2416是低功耗、高性能、低成本的SAMSUNG ARM9(ARM926EJ)處理器,目前三星已停止生產(chǎn)S3C2440, S3C2416具有更高的性能,以及更低的價格,是S3C2440、S3C2410等處理器的完美替代者。相比S3C2440,S3C2416采用了雙總線架構(gòu),主頻也可穩(wěn)定達(dá)到533M,內(nèi)存接口也支持DDR/DDR2等,具有2D圖形加速器,支持MLC nand flash,支持SD卡啟動。尤其是支持SD卡啟動,使之代碼調(diào)試,燒錄變得極其簡單,無需任何的代碼燒錄設(shè)備,只要把代碼燒寫進(jìn)SD卡,設(shè)置從SD卡啟動即可對代碼進(jìn)行更新。S3C2416的特性有以下幾點:
1.3V 內(nèi)核供電,主頻400M, 1.8V/2.5V/3.0V/3.3V ROM/SRAM儲存器供電, 1.8V/2.5V mSDR/mDDR/DDR2 動態(tài)存儲器供電,1.8V/2.5V/3.3V 外部I/O 供電,具備16KB 的指令緩存和16KB 的數(shù)據(jù)緩存和MMU
外部存儲控制器(mSDR/mDDR/DDR2控制和片選邏輯)
LCD 控制器(最大支持256K色)提供1 通道LCD 專用DMA
6通道DMA 并有外部請求引腳
4通道UART(IrDA1.0,64字節(jié)發(fā)送FIFO和64字節(jié)接收FIFO)
1通道高速SPI
1通道IIC總線接口(支持多主機(jī))
1通道IIS總線音頻編解碼器接口(24位,端口0支持5.1聲道)
AC97/PCM編解碼器接口(和IIS復(fù)用)
2通道高速MMC/SD接口(SD主接口協(xié)議2.0版,MMC協(xié)議兼容4.2版)
2通道USB主機(jī)(兼容1.1版)/1通道USB設(shè)備(兼容2.0版)
4通道PWM 定時器和1通道內(nèi)部定時器/看門狗定時器
10通道12位ADC 和觸摸屏接口
具有日歷功能的RTC
138個通用I/O口和16通道外部中斷源
電源管理具有工作,空閑,待機(jī),深度待機(jī)和休眠模式
具有PLL片上時鐘發(fā)生器
2. S3C2416編程環(huán)境概述2.1. 代碼編譯工具S3C2416是ARM926EJ內(nèi)核,使用armv5指令集,相比armv4指令集,指令只是增加了軟件斷點BKPT,雙字加載,存儲指令LDRD/STRD等。因此,只要能編譯armv4指令集(常見arm7/arm9芯片采用的指令版本)的編譯器都可以用來開發(fā)S3C2416。目前流行的常用arm編譯器有IAR,Keil MDK,arm-linux-gcc等。尤其是對于嵌入式linux方面的開發(fā),幾乎無疑選用arm-linux-gcc,但此處筆者暫時是用來作裸機(jī)方面的開發(fā),因此選用一款windows下集成開發(fā)環(huán)境更適合。Keil用于開發(fā)arm的集成環(huán)境有很多稱呼uVersion、MDK、Keil for arm等。而Keil公司已經(jīng)被ARM公司收購,因此編譯器方面選擇MDK是不錯的選擇。
圖2.1-1 MDK集成開發(fā)環(huán)境
2.2. 三星專用工具對于三星系列的cpu,三星公司開發(fā)了兩個專用工具來開發(fā)其門下的芯片。dnw.exe用來串口調(diào)試以及通過usb進(jìn)行下載,而IROM_Fusing_Tool.exe是用來燒寫代碼到sd卡特定位置的,通過設(shè)置sd卡啟動,即可運行sd卡里面的代碼。在沒有任何燒錄設(shè)備時,這是唯一簡單,省成本的代碼燒錄方式。從sd卡啟動后可把bootloader燒寫進(jìn)nand flash等固化存儲器,以后通過nand啟動等方式運行bootloader即可。
圖2.2-1 串口調(diào)試及usb下載工具dnw
圖2.2-2 sd卡啟動代碼燒錄工具
3. S3C2416啟動模式S3C2416支持多種啟動模式,通過外部引腳OM[4:0]來決定從哪個存儲設(shè)備上啟動,引腳配置對應(yīng)的啟動模式見下圖。目前市面上的各類S3C2416開發(fā)板都是參照三星smdk2416開發(fā)板進(jìn)行開發(fā)的。由于有了IROM啟動以及NAND啟動,Nor flash已基本沒有用處,因為代碼一般是不會在Norflash執(zhí)行,都是要搬到RAM里執(zhí)行,不然性能無法忍受。因此,市面上的開發(fā)板基本都是不再配置Nor flash,只配置了NAND flash。筆者此處只講解市面上S3C2416開發(fā)板支持的兩種啟動模式,IROM啟動和NAND啟動。
圖3-1 S3C2416啟動模式配置
圖3-2 啟動模式對應(yīng)的存儲器映射
3.1. IROM啟動通過設(shè)置[OM4, OM3, OM2, OM1, OM0] = [0,1,0,0,x],上電復(fù)位即可從IROM啟動,IROM啟動即先執(zhí)行芯片固化代碼(在0x0位置處),固化代碼先進(jìn)行初始化芯片,如設(shè)置系統(tǒng)時鐘,初始化堆棧等,隨后會再根據(jù)相關(guān)引腳的配置([GPC7:GPC5]),確定啟動設(shè)備是SD/MMC還是NAND,對于IROM NAND啟動,固化代碼從[GPC7:GPC5]的引腳配置狀態(tài)得出NANDFLASH的信息,如頁大小,地址周期多少。之后固化代碼再從NANDFLASH的0x0地址偏移出讀出8k的代碼到內(nèi)部RAM地址0x40000000處,這塊8k的IRAM就被叫做Steppingstone。因為這8k的IRAM代碼往往需要進(jìn)一步引導(dǎo)用戶的其它代碼到RAM運行。對于IROM SD/MMC啟動,固化代碼會直接從SD/MMC卡的一個特殊位置讀出8k的代碼到0x40000000處的Steppingstone。復(fù)制完代碼到Steppingstone后,固化代碼跳轉(zhuǎn)到0x40000000處開始執(zhí)行用戶的代碼。IROM啟動的更多細(xì)節(jié),筆者已在文章的最后給出相關(guān)的參考文檔S3C2450_51_16_IROM_ApplicationNote.pdf。
圖3.1-1 IROM啟動存儲設(shè)備配置
3.2. NAND啟動首先要先確定板載NAND FLASH的信息,如地址周期,頁大小等,然后再根據(jù)NAND FLASH的信息配置相應(yīng)的[OM4:OM0],上電復(fù)位即可從NAND啟動。NAND啟動模式下,NAND控制器會自動從NAND FLASH 0x0地址偏移處拷貝8k的代碼到內(nèi)部RAM地址0x0處,用戶代碼從0x0處開始執(zhí)行。從Samsung給出的S3C2416數(shù)據(jù)手冊來看,較新的數(shù)據(jù)手冊都已經(jīng)把NAND啟動[OM4:OM0]引腳配置以及內(nèi)存映射信息都刪除了,因此Samsung是推薦用戶從IROM NAND啟動的,因為這樣用戶代碼可以統(tǒng)一處理IROM SD/MMC或IROM/NAND,而不用考慮過多的啟動模式。
附注:以下資料筆者認(rèn)為是與本文相關(guān)的,可供學(xué)習(xí)與參考,點擊下面鏈接即可下載。
a. S3C2416X_UM_Rev0.01_20080412.pdf,S3C2416數(shù)據(jù)手冊,開發(fā)必備
b. S3C2450_51_16_IROM_ApplicationNote.pdf,S3C2416及其同類芯片的IROM啟動流程詳述
c. dnw.exe,三星cpu串口調(diào)試及usb下載工具
d. IROM_Fusing_Tool.exe,三星cpu從sd卡代碼燒寫工具,用于從sd卡啟動
http://pan.baidu.com/s/1kTzAVD9