宋寶華談 ARM 的嵌入式 Linux 移植體驗之基本概念
1. 引言
ARM 是 Advanced RISC Machines(進階精簡指令系統處理器)的縮寫,是 ARM 公司提供的一種微處理器智慧財產權(IP)核。
ARM 的應用已遍及工業控制、消費類電子產品、通訊系統、網路系統、無線系統等各類產品市場。基於 ARM 技術的微處理器應用約佔據了 32 位 RISC 微處理器 75% 以上的市場份額。揭開你的手機、MP3、 PDA,嘿嘿,裡面多半藏著一個基於 ARM 的微處理器!
ARM 核心的數個系列(ARM7、ARM9、ARM9E、ARM10E、SecurCore、Xscale、StrongARM),各自滿足不同應用領域的需求,無孔不入的滲入嵌入式系統各個角落的應用。這是一個 ARM 的時代!
下面的圖片顯示了 ARM 的隨處可見:
有人的地方就有江湖(《武林外傳》),有嵌入式系統的地方就有 ARM。
構建一個複雜的嵌入式系統,僅有硬體是不夠的,我們還需要進行作業系統的移植。我們通常在 ARM 平台上構建 Windows CE、Linux、Palm OS 等作業系統,其中 Linux 具有開放原始碼的優點。
顯示了基於 ARM 嵌入式系統中軟體與硬體的關係:
日前,筆者作為某嵌入式 ARM(硬體)/Linux(軟體)系統的項目負責人,帶領項目群組成員進行了下述工作:
(1)基於 ARM920T 核心 S3C2410A CPU 的電路板設計;
(2)ARM 處理下底層軟體平台搭建:
a.Bootloader 的移植;
b.嵌入式 Linux 作業系統核心的移植;
c.嵌入式 Linux 作業系統根檔案系統的建立;
d.電路板上外設 Linux 驅動程式的編寫。
本文將真實地再現本項目開發過程中作者的心得,以便與廣大讀者共勉。第一章將簡單地介紹本 ARM 開發板的硬體設計,第二章分析 Bootloader 的移植方法,第三章敘述嵌入式 mizi Linux 的移植及檔案系統的構建方法,第四章講解外設的驅動程式設計,第五章給出一個已構建好的軟硬體平台上應用開發的執行個體。
如果您有嵌入式系統的開發基礎,您將非常容易領會本文講解地內容。即便是您從來沒有嵌入式系統的開發經曆,本文讀起來也不會生澀。您可以通過如下 email 與作者聯絡:21cnbao@21cn.com。
2.ARM 體繫結構
作為一種 RISC 體繫結構的微處理器,ARM 微處理器具有 RISC 體繫結構的典型特徵。還具有如下增強特點:
(l)在每條資料處理指令當中,都控制算數邏輯單位(ALU)和移位器,以使 ALU 和移位器獲得最大的利用率;
(2)自動遞增和自動遞減的定址模式,以最佳化程式中的迴圈;
(3)同時 Load 和 Store 多條指令,以增加資料輸送量;
(4)所有指令都條件執行,以增大執行輸送量。
ARM 體繫結構的字長為 32 位,它們都支援 Byte(8 位)、Halfword(16 位)和 Word(32位)3 種資料類型。
ARM 處理器支援 7 種處理器模式,如下表:
大部分應用程式都在 User 模式下運行。當處理器處於 User 模式下時,執行的程式無法訪問一些被保護的系統資源,也不能改變模式,否則就會導致一次異常。對系統資源的使用由作業系統來控制。
User 模式之外的其它幾種模式也稱為特權模式,它們可以完全訪問系統資源,可以自由地改變模式。其中的 FIQ、IRQ、supervisor、Abort 和 undefined 5 種模式也被稱為異常模式。在處理特定的異常時,系統進入這幾種模式。這5種異常模式都有各自的額外的寄存器,用於避免在發生異常的時候與使用者模式下的程式發生衝突。
還有一種模式是 system 模式,任何異常都不會導致進入這一模式,而且它使用的寄存器和 User 模式下基本相同。它是一種特權模式,用於有訪問系統資源請求而又需要避免使用額外的寄存器的作業系統任務。
程式員可見的ARM 寄存器共有 37 個:31 個通用寄存器以及 6 個針對 ARM 處理器的不同工作模式所設立的專用狀態寄存器,如:
ARM9 採用 5 級流水線操作:指令預取、解碼、執行、資料緩衝、寫回。ARM9 設定了 16 個字的資料緩衝和 4 個字的地址緩衝。這 5 級流水已被很多的 RISC 處理器所採用,被看作 RISC 結構的"經典"。
3.硬體設計
3.1 S3C2410A 微控制器
電路板上的 ARM 微控制器 S3C2410A 採用了ARM920T 核,它由 ARM9TDMI、儲存嵌入式管理單元 MMU 和快取三部分組成。其中,MMU 可以管理虛擬記憶體,快取由獨立的 16KB 地址和 16KB 資料高速 Cache 組成。ARM920T 有兩個內部副處理器:CP14 和 CP15。CP14 用於調試控制,CP15 用於儲存系統控制以及測試控制。
S3C2410A 整合了大量的內部電路和外圍介面:
·LCD 控制器(支援 STN 和 TFT 帶有觸控螢幕的液晶顯示屏)
·SDRAM 控制器
·3 個通道的 UART
·4 個通道的 DMA
·4 個具有 PWM 功能的計時器和一個內部時鐘
·8 通道的 10 位 ADC
·觸控螢幕介面
·I2C 匯流排介面
·12S 匯流排介面
·兩個 USB 主機介面
·一個 USB 裝置介面
·兩個 SPI 介面
·SD 介面
·MMC 卡介面
S3C2410A 整合了一個具有日曆功能的 RTC 和具有 PLL(MPLL 和 UPLL)的晶片時鐘發生器。MPLL 產生主時鐘,能夠使處理器工作頻率最高達到 203MHz。這個工作頻率能夠使處理器輕鬆運行WinCE、Linux 等作業系統以及進行較為複雜的資訊處理。UPLL 則產生實現 USB 模組的時鐘。
顯示了 S3C2410A 的整合資源和外圍介面:
我們需要對中的 AHB 匯流排和 APB 匯流排的概念進行一番解釋。ARM 核開發的目的,是使其作為複雜片上系統的一個處理單元來應用的,所以還必須提供一個 ARM 與其它片上宏單元通訊的介面。為了減少不必要的設計資源的浪費,ARM 公司定義了 AMBA(Advanced Microcontroller Bus Architecture)匯流排規範,它是一組針對基於 ARM 核的、片上系統之間通訊而設計的、標準的、開放協議。
在 AMBA 匯流排規範中,定義了 3 種匯流排:
(l)AHB-Advanced High Performace Bus,用於高效能系統模組的串連,支援高載模式資料轉送和事務分割;
(2)ASB-Advanced System Bus,也用於高效能系統模組的串連,支援高載模式資料轉送,這是較老的系統匯流排格式,後來由 AHB 匯流排替代;
(3)APB-Advanced PeriPheral Bus,用於較低效能外設的簡單串連,一般是接在 AHB 或 ASB 系統匯流排上的第二級匯流排。
典型的 AMBA 匯流排系統如:
S3C2410A 將系統的儲存空間分成 8 個 bank,每個 bank 的大小是 128M 位元組,共 1G 位元組。Bank0 到 bank5 的開始地址是固定的,用於 ROM 或 SRAM。bank6 和 bank7 可用於 ROM、SRAM 或 SDRAM。所有記憶體塊的訪問周期都可程式化,外部 Wait 也能擴充訪問周期。給出了 S3C2410A 的記憶體組織:
給出了 S3C2410A 的資料匯流排、地址匯流排和片選電路:
SDRAM 控制訊號、整合 USB 介面電路:
核心與儲存單元供電電路(S3C2410A 對於片內的各個組件採用了獨立的電源供給,核心採用 1.8V 供電,儲存單元採用 3.3V 獨立供電):
JTAG 標準通過邊界掃描技術提供了對電路板上每一元件的功能、互聯及相互間影響進行測試的方法,極大地方便了系統電路的調試。
測試接入連接埠 TAP 的管腳定義如下:
·TCK:專用的邏輯測試時鐘,時鐘上升沿按串列方式對測試指令、資料及控制訊號進行移位操作,下降沿用於對輸出訊號移位操作;
·TMS:測試模式選擇,在 TCK 上升沿有效邏輯測試控制訊號;
·TDI:測試資料輸入,用於接收測試資料與測試指令;
·TDO:測試資料輸出,用於測試資料的輸出。
S3C2410A 調試用 JTAG 介面電路:
3.2 SDRAM 儲存空間
SDRAM 被用來存放作業系統(從 FLASH 解壓縮拷入)以及存放各類動態資料,採用 SAMSUNG 公司的 K4S561632,它是 4Mxl6bitx4bank 的同步 DRAM,容量為 32MB。用 2 片 K4S561632 實現位擴充,使資料匯流排寬度達到 32bit,總容量達到 64MB,將其地址空間映射在 S3C2410A 的 bank6。
SDRAM 所有的輸入和輸出都與系統時鐘 CL K 上升沿同步,由輸入訊號 RA S、CA S、WE 組合產生 SDRAM 控制命令,其基本的控制命令如下:
SDRAM 在具體操作之前首先必須通過 MRS 命令設定模式寄存器,以便確定 SDRAM 的列地址延遲、突發類型、突髮長度等工作模式;再通過 ACT 命令啟用對應地址的組,同時輸入行地址;然後通過 RD 或 WR 命令輸入列地址,將相應資料讀出或寫入對應的地址;操作完成後用 PCH 命令或 BT 命令中止讀或寫操作。在沒有操作的時候,每隔一段時間必須用 ARF 命令重新整理資料,防止資料丟失。
給出了 SDRAM 的串連電路:
3.3 FLASH 儲存空間
NOR 和 NAND 是現在市場上兩種主要的非易失快閃記憶體技術。
NOR 的特點是晶片內執行(XIP,Execute In Place),即應用程式可直接在 Flash 快閃記憶體內運行,不必把代碼讀到系統 RAM 中。NOR 的傳輸效率很高,在 1~4MB 的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的效能。
NAND 結構能提供極高的單元密度,可以達到高儲存密度,並且寫入和擦除的速度也很快。應用 NAND 的困難在於 Flash 的管理和需要特殊的系統介面,S3C2410A 內嵌了 NAND FLASH 控制器。
S3C2410A 支援從 GCS0 上的 NOR FLASH 啟動(16 位或 32 位)或從 NAND FLASH 啟動,需要通過 OM0 和 OM1 上電時的上下拉來設定:
在系統中分別採用了一片 NOR FLASH(28F640) 和 NAND FLASH(K9S1208),電路如:
3.4串口
S3C2410 內部整合了 UART 控制器,實現了並串轉換。外部還需提供 CMOS/TTL 電平與 RS232 之間的轉換:
3.5乙太網路
乙太網路控制晶片採用 CIRRUS LOGI一般股份有限公司生產的 CS8900A,其突出特點是使用靈活,其物理層介面、資料轉送模式和工作模式等都能根據需要而動態調整,通過內部寄存器的設定來適應不同的應用環境。它符合 IEEE803.3 乙太網路標準,帶有傳送、接收低通濾波的 10Base-T 串連連接埠,支援 10Base2,10Base5 和 10Base-F 的 AUI 介面,並能自動產生前序,自動進行 CRC 檢驗,在衝突後自動重發。
CS8900A 支援的傳輸模式有 I/O 和 Memory 模式。當 CS8900A 有硬體複位或軟體複位時,它將預設成為 8 位工作模式。因此,要使 CS8900A 工作於 16 位元模式,系統必須在訪問之前提供給匯流排高位使能管腳(/SBHE)一個由高到低、再由低到高變化的電平。
3.6 USB 介面
USB 系統由 USB 主機(USB Host)、USB 集線器(USB Hub)和 USB 裝置(USB Device)組成。USB 和主機系統的介面稱作主機控制器(Host Controller),它是由硬體和軟體結合實現的。根集線器是綜合於主機系統內部的,用以提供 USB 的連接點。USB 的裝置包括集線器(Hub)和功能器件(Function)。
S3C2410A 整合了 USB host 和 USB device,外部串連電路如:
3.7電源
LDO(Low Dropout)屬於 DC/DC 變換器中的降壓變換器,它具有低成本、低雜訊、低功耗等突出優點,另外它所需要的外圍器件也很少,通常只有 1~2 個旁路電容。
在電路板上我們分別用兩個 LDO 來實現 5V 向 3.3V(儲存介面電平)和 1.8V(ARM 核心電平)的轉換。
up 監控電路採用 MAX708 晶片,提供上電、掉電以及降壓情況下的複位輸出及低電平有效人工複位輸出:
3.8其它
SN74LVTH62245A 提供匯流排驅動和緩衝能力:
S3C2410A 整合 LCD 液晶顯示器控制電路,外部引出介面:
觸控螢幕有電阻式、電容式等,其本質是一種將手指在螢幕上的觸點位置轉化為電訊號的感應器。手指觸到螢幕,引起觸點位置電阻或電容的變化,再通過檢測這一電性變化,從而獲得手指的座標位置。通過 S3C2410A 整合的 AD 功能,完成電訊號向螢幕座標的轉化,觸控螢幕介面如下:
鍵盤則直接利用 CPU 的可程式化I/O口,若串連 mxn 鍵盤,則需要 m+n 個可程式化 I/O 口,由軟體實現鍵盤掃描,識別按鍵:
3.9整體架構
呈現了 ARM 處理器及外圍電路的整體設計架構:
4.小結
本章講解了基於 S3C2410A ARM 處理器電路板硬體設計的基本組成,為後續各章提供了總體性的準備工作。
原文連結:http://dev.yesky.com/6/2527006.shtml。