《ARM嵌入式系統(tǒng)基礎(chǔ)及應(yīng)用》課件第3章_第1頁
《ARM嵌入式系統(tǒng)基礎(chǔ)及應(yīng)用》課件第3章_第2頁
《ARM嵌入式系統(tǒng)基礎(chǔ)及應(yīng)用》課件第3章_第3頁
《ARM嵌入式系統(tǒng)基礎(chǔ)及應(yīng)用》課件第3章_第4頁
《ARM嵌入式系統(tǒng)基礎(chǔ)及應(yīng)用》課件第3章_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第3章ARM硬件模塊開發(fā)3.1ARM硬件平臺結(jié)構(gòu)3.2SDRAM模塊設(shè)計(jì)3.3Flash模塊設(shè)計(jì)3.4LCD模塊設(shè)計(jì)3.5USB模塊設(shè)計(jì)3.6I/O接口模塊設(shè)計(jì)3.7本章小結(jié)

ARM嵌入式系統(tǒng)是當(dāng)今嵌入式系統(tǒng)開發(fā)的主流選擇,它以ARMCPU為硬件平臺,以ADS或相關(guān)軟件為開發(fā)環(huán)境,以ARM-Linux或者ARM-WinCE為嵌入式操作系統(tǒng),以各種中間件、驅(qū)動程序?yàn)檐浖脚_。本章主要介紹ARM嵌入式常用硬件模塊的電路與驅(qū)動設(shè)計(jì),以及其工作特點(diǎn)。

ARM嵌入式系統(tǒng)硬件平臺一般由系統(tǒng)主板與系統(tǒng)擴(kuò)展板組成。系統(tǒng)主板是硬件平臺的基本組成部分,主要包括ARMCPU、Flash、SDRAM、串口、鍵盤等部分。系統(tǒng)擴(kuò)展板提供其他的硬件功能模塊。3.1ARM硬件平臺結(jié)構(gòu)3.1.1最小系統(tǒng)及常用硬件模塊

能夠使ARM嵌入式處理器正常運(yùn)行的所必需的硬件模塊和ARM嵌入式處理器構(gòu)成了ARM嵌入式最小系統(tǒng),最小系統(tǒng)主要包括:

用于調(diào)試的調(diào)試測試接口,如JTAG接口;用于存儲和運(yùn)行程序代碼的存儲器電路模塊,如Flash和SDRAM模塊。

用于提供系統(tǒng)時鐘的時鐘電路。

用于系統(tǒng)復(fù)位的復(fù)位電路。

用于為系統(tǒng)提供電源的電源電路以及用于數(shù)據(jù)計(jì)算處理的嵌入式處理器。

圖3.1ARM嵌入式最小系統(tǒng)框圖3.1.2硬件設(shè)計(jì)基本原則

ARM嵌入式應(yīng)用系統(tǒng)的硬件電路設(shè)計(jì)是嵌入式系統(tǒng)開發(fā)的一個重要方面,遵循一定的電路設(shè)計(jì)原則可以使嵌入式系統(tǒng)的開發(fā)成本降低,使開發(fā)出來的系統(tǒng)具有更強(qiáng)的工作穩(wěn)定性和可升級性。

設(shè)計(jì)ARM嵌入式應(yīng)用系統(tǒng)的硬件電路應(yīng)遵循以下原則:

(1)盡可能選擇典型電路,并符合ARM的常規(guī)用法,為硬件系統(tǒng)的標(biāo)準(zhǔn)化、模塊化打下良好的基礎(chǔ)。采用通用型平臺硬件電路設(shè)計(jì),可以根據(jù)需要增刪部件而生產(chǎn)不同型號的產(chǎn)品,這樣的設(shè)計(jì)思路可以大大地減小開發(fā)成本和開發(fā)周期,提高產(chǎn)品的市場競爭力。

(2)系統(tǒng)擴(kuò)展與外圍設(shè)備的配置水平應(yīng)充分滿足應(yīng)用系統(tǒng)的功能要求,并留有適當(dāng)余地。如果條件許可,可在硬件電路設(shè)計(jì)中將富余的端口都做成插座形式的接口電路,這樣有利于產(chǎn)品功能的擴(kuò)展和改進(jìn),在產(chǎn)品升級和系統(tǒng)維護(hù)調(diào)試方面極大地減輕了開發(fā)人員和維護(hù)人員的工作。

(3)硬件結(jié)構(gòu)與應(yīng)用軟件設(shè)計(jì)結(jié)合考慮。實(shí)行軟件設(shè)計(jì)優(yōu)先實(shí)現(xiàn)原則,以簡化硬件結(jié)構(gòu)。須注意的是,軟件方式實(shí)現(xiàn)的硬件功能,一般響應(yīng)時間比硬件實(shí)現(xiàn)長,且占用CPU時間。

(4)系統(tǒng)中選用的相關(guān)器件要盡可能做到性能匹配。系統(tǒng)中的所有芯片都應(yīng)盡可能選擇低功耗產(chǎn)品。芯片、器件的選擇,去耦濾波設(shè)計(jì),印刷電路板布線設(shè)計(jì),通道隔離等均需要考慮系統(tǒng)可靠性及抗干擾設(shè)計(jì)。

(5)根據(jù)應(yīng)用需求選擇合適的ARM處理器可極大提高系統(tǒng)的程序執(zhí)行效率,縮短系統(tǒng)的反應(yīng)時間,滿足實(shí)時性的要求。

總之,在進(jìn)行硬件設(shè)計(jì)的時候,既要充分考慮產(chǎn)品的可改進(jìn)性,又要爭取使產(chǎn)品的功能和硬件的開發(fā)成本達(dá)到完美的結(jié)合。3.1.3ARM調(diào)試系統(tǒng)

用戶選用ARM處理器開發(fā)嵌入式系統(tǒng)時,選擇合適的開發(fā)工具可以加快開發(fā)進(jìn)度,節(jié)省開發(fā)成本。因此一套含有編輯軟件、編譯軟件、匯編軟件、鏈接軟件、調(diào)試軟件、工程管理及函數(shù)庫的集成開發(fā)環(huán)境(IDE)一般來說是必不可少的,至于嵌入式實(shí)時操作系統(tǒng)、評估板、ARM開發(fā)/調(diào)試等其他開發(fā)工具則可以根據(jù)應(yīng)用軟件的規(guī)模和開發(fā)計(jì)劃選用。在集成開發(fā)環(huán)境中,包括編輯、編譯、匯編、鏈接等工作在PC機(jī)上即可全部完成,調(diào)試工作則需要配合其他的模塊或產(chǎn)品方可完成。目前常見的調(diào)試方法有以下幾種。

1.指令集模擬器

部分集成開發(fā)環(huán)境提供了指令集模擬器,可方便用戶在PC機(jī)上完成一部分簡單的調(diào)試工作。由于指令集模擬器與真實(shí)的硬件環(huán)境相差很大,因此即使用指令集模擬器調(diào)試通過的程序也有可能無法在真實(shí)的硬件環(huán)境下運(yùn)行,用戶最終還是必須在硬件平臺上完成整個應(yīng)用的開發(fā)。

2.駐留監(jiān)控軟件

駐留監(jiān)控軟件(ResidentMonitors)是一段運(yùn)行在目標(biāo)板上的程序,集成開發(fā)環(huán)境中的調(diào)試軟件通過以太網(wǎng)口、并行端口、串行端口等通信端口與駐留監(jiān)控軟件進(jìn)行交互,由調(diào)試軟件發(fā)布命令通知駐留監(jiān)控軟件控制程序的執(zhí)行、讀寫存儲器、讀寫寄存器、設(shè)置斷點(diǎn)等。駐留監(jiān)控軟件是一種比較低廉有效的調(diào)試方式,不需要任何其他的硬件調(diào)試和仿真設(shè)備。使用駐留監(jiān)控軟件調(diào)試的不便之處在于對硬件設(shè)備的要求比較高,且一般在硬件穩(wěn)定之后才能進(jìn)行應(yīng)用軟件的開發(fā),同時調(diào)試時要占用目標(biāo)板上的部分資源,也不能對程序的全速運(yùn)行進(jìn)行完全仿真,所以對一些要求嚴(yán)格的情況不是很適合。

3.?JTAG仿真器

JTAG仿真器也稱為JTAG調(diào)試器,是通過ARM芯片的JTAG邊界掃描口進(jìn)行調(diào)試的設(shè)備。JTAG仿真器比較便宜,連接方便,通過現(xiàn)有的JTAG邊界掃描口與ARMCPU核通信,屬于完全非插入式(即不使用片上資源)調(diào)試,它無需目標(biāo)存儲器,不占用目標(biāo)系統(tǒng)的任何端口,而這些是駐留監(jiān)控軟件所必需的。使用集成開發(fā)環(huán)境配合JTAG仿真器是目前采用最多的一種調(diào)試方式。關(guān)于JTAG仿真器請參閱4.6節(jié)的內(nèi)容。

ROM(ReadOnlyMemory)和RAM(RandomAccessMemory)指的都是半導(dǎo)體存儲器。ROM在系統(tǒng)停止供電的時候仍然可以保持?jǐn)?shù)據(jù),而RAM在掉電之后就丟失數(shù)據(jù)。RAM有兩大類,一種稱為靜態(tài)RAM(SRAM,StaticRAM),SRAM速度非???,但是它也比較貴,所以只在要求很苛刻的地方使用,譬如CPU的一級緩沖、二級緩沖。另一種稱為動態(tài)RAM(DRAM,DynamicRAM),DRAM保留數(shù)據(jù)的時間很短,速度也比SRAM慢,不過它還是比任何的ROM都要快,并且價格比SRAM要便宜很多。3.2SDRAM模塊設(shè)計(jì)

SDRAM是同步的DRAM,即數(shù)據(jù)的讀寫需要時鐘來同步。DRAM和SDRAM由于實(shí)現(xiàn)工藝問題,容量較SRAM大,但是讀寫速度不如SRAM。

SDRAM是一種具有同步接口的高速動態(tài)隨機(jī)存儲器,具有高速、大容量等優(yōu)點(diǎn)。它的同步接口和流水線結(jié)構(gòu)支持高速存儲,數(shù)據(jù)傳輸速度可以和ARM的時鐘頻率同步。在ARM嵌入式系統(tǒng)應(yīng)用中,SDRAM主要作為程序的運(yùn)行空間、數(shù)據(jù)和堆棧區(qū)。系統(tǒng)啟動并完成系統(tǒng)的初始化后,通常裝入到SDRAM中運(yùn)行。

SDRAM發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了四代,分別是第一代SDRSDRAM、第二代DDRSDRAM、第三代DDR2SDRAM和第四代DDR3SDRAM。第一代與第二代SDRAM均采用單端(SingleEnded)時鐘信號。第三代與第四代由于工作頻率比較快,因此采用可降低干擾的差分時鐘信號作為同步時鐘。SDRSDRAM的時鐘頻率就是數(shù)據(jù)存儲的頻率,第一代內(nèi)存用時鐘頻率命名,如pc100、pc133則表明時鐘頻率為100MHz和133MHz。之后的DDR(DoubleDataRate)內(nèi)存則采用數(shù)據(jù)讀寫速率作為命名標(biāo)準(zhǔn),并且在前面加上表示其DDR代數(shù)的符號,如PC2(DDR2)、PC3(DDR3)。PC2700(DDR333)的有效工作頻率是333MHz,物理工作頻率為166MHz,2700表示內(nèi)存帶寬為2.7GB/s。3.2.1SDRAM芯片引腳描述

SDRAM的主要生產(chǎn)廠商有Hyundai、Winbond等,現(xiàn)以K4S561632D-TC75為例簡要介紹SDRAM的結(jié)構(gòu)。

K4S561632D-TC75存儲器是4組4M×16位的動態(tài)存儲器,工作電壓為3.3V,其封裝形式為54腳的TSOP,兼容LVTTL接口,數(shù)據(jù)寬度為16位,支持自動刷新和自刷新。圖3.2所示為K4S561632D-TC75引腳圖。

圖3.2K4S561632D-TC75引腳圖

K4S561632D-TC75內(nèi)存芯片的主要信號有控制信號、地址信號和數(shù)據(jù)信號,均為工作時鐘的同步輸入、輸出信號。

控制信號主要有CS(片選信號)、CKE(時鐘使能信號)、DQM(輸入、輸出使能信號)、CASLatency(CAS延遲)、RAS(RowAddressStrobe,行地址選通脈沖)、WE(讀、寫控制命令字)。通過CAS、RAS、WE的各種邏輯組合,可產(chǎn)生各種控制命令。地址信號有BA0和BA1頁地址選擇信號,A0~A12地址信號,行、列地址選擇信號。通過分時復(fù)用決定地址是行地址還是列地址。在讀、寫操作中,在地線上依次給出頁地址、行地址、列地址,最終確定存儲單元地址。

數(shù)據(jù)信號有DQ0~DQ15,支持雙向數(shù)據(jù)傳輸,其使能由DQM提供。

SDRAM的工作模式通過LOADMODEREGISTER命令對工作模式寄存器進(jìn)行設(shè)置來選擇。設(shè)置參量有Reserved(保留狀態(tài))、WriteBurstMode(WB,寫突發(fā)模式)、OperationMode(OpMode,工作模式)、CASLatency(CAS延遲)、BurstType(BT,突發(fā)類型)、BurstLength(突發(fā)長度)。3.2.2SDRAM的模塊原理圖

在S3C2410X芯片內(nèi)具有獨(dú)立的SDRAM刷新控制邏輯電路,可以方便地與SDRAM連接。采用兩片K4S561632D-TC75存儲器芯片可以組成16M

×

32位SDRAM存儲器系統(tǒng),其片選信號接S3C2410X的Ngcs6引腳,具體連線如圖3.3所示。

圖3.3SDRAM的模塊原理圖3.2.3SDRAM的工作模式

SDRAM支持的常用操作指令有7種:空操作(NOP)、預(yù)充電(Precharge)、激活操作(Active)、突發(fā)讀(BurstRead)、突發(fā)寫(BurstWrite)、自動刷新(Autorefresh)以及模式寄存器配置(ModeRegisterSet)。所有的操作命令都是通過信號線RAS_N、CAS_N、WE_N共同控制來實(shí)現(xiàn)的。SDRAM進(jìn)行存取數(shù)據(jù)操作之前,首先要對其初始化,即設(shè)置SDRAM的普通模式寄存器和擴(kuò)展模式寄存器,確定SDRAM的工作方式。這些設(shè)置包括突發(fā)長度、突發(fā)類型、CAS潛伏期和工作模式,以及擴(kuò)展模式寄存器中對SDRAM內(nèi)部延遲鎖定回路(DLL)的使能與輸出驅(qū)動能力的設(shè)置。初始化完成之后,SDRAM便進(jìn)入正常的工作狀態(tài),此時可對存儲器進(jìn)行讀寫和刷新。3.2.4SDRAM的初始化操作

SDRAM在上電以后必須對其進(jìn)行初始化操作,具體操作如下:

(1)系統(tǒng)在上電后要等待100~200μs,之后至少執(zhí)行一條空操作或者指令禁止操作。

(2)對所有芯片執(zhí)行PRECHARGE命令,完成預(yù)充電。

(3)向每組內(nèi)存芯片發(fā)出兩條AUTOREFRESH命令,使SDRAM芯片內(nèi)部的刷新計(jì)數(shù)器可以進(jìn)入正常運(yùn)行狀態(tài)。

(4)執(zhí)行LOADMODEREGISTER命令,完成對SDRAM工作模式的設(shè)定。3.2.5SDRAM的基本讀寫操作

SDRAM的基本讀操作需要控制線和地址線配合發(fā)出一系列命令來完成。首先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大于TRCD(SDRAM的RAS到CAS的延遲指標(biāo))時間后,發(fā)出讀命令字。CL(CAS延遲值)個工作時鐘后,讀出數(shù)據(jù)才能依次出現(xiàn)在數(shù)據(jù)總線上。最后,要向SDRAM發(fā)出預(yù)充電(PRECHARGE)命令,以關(guān)閉已經(jīng)激活的頁。等待TRP時間(相隔TRP時間后才可再次訪問該行)后,可以開始下一次的讀、寫操作。SDRAM的讀操作只有突發(fā)模式(BurstMode),突發(fā)長度可選1、2、4、8。

圖3.4控制器的狀態(tài)轉(zhuǎn)換圖

SDRAM的基本寫操作也需要控制線和地址線相配合地發(fā)出一系列命令來完成。先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大于TRCD的時間后才發(fā)出寫命令字。寫命令可以立即寫入,需寫入數(shù)據(jù)依次送到DQ(數(shù)據(jù)線)上。在最后一個數(shù)據(jù)寫入后延遲TWR時間,發(fā)出預(yù)充電命令,關(guān)閉已經(jīng)激活的頁。等待TRP時間后,可以展開下一次操作。寫操作可以有突發(fā)寫和非突發(fā)寫兩種。突發(fā)長度同讀操作相同。

TRCD、TRP、TWR的具體要求詳見SDRAM廠家提供的數(shù)據(jù)手冊,所等待的工作時鐘個數(shù)由TRCD、TRP、TWR的最小值和工作時鐘周期共同決定。3.2.6SDRAM控制器的狀態(tài)轉(zhuǎn)換

SDRAM控制器的功能就是初始化SDRAM,將SDRAM復(fù)雜的讀寫時序轉(zhuǎn)化為用戶簡單的讀寫時序,以及將SDRAM接口的雙時鐘沿?cái)?shù)據(jù)轉(zhuǎn)換為用戶的單時鐘沿?cái)?shù)據(jù),使用戶像操作普通的RAM一樣控制SDRAM,同時,控制器還要產(chǎn)生周期的刷新命令來維持SDRAM內(nèi)的數(shù)據(jù)而無需用戶干預(yù)。

SDRAM提供了多種命令,整個控制狀態(tài)機(jī)非常復(fù)雜。在以SDRAM為緩存的系統(tǒng)中,并不需要用到所有的命令,為簡化設(shè)計(jì),同時兼顧盡可能多的應(yīng)用場合,在控制器的設(shè)計(jì)中主要實(shí)現(xiàn)以下幾種功能:SDRAM初始化、預(yù)充電、可變長度突發(fā)讀/寫、自動刷新以及模式寄存器的重置??刂破鞯恼麄€狀態(tài)轉(zhuǎn)換圖如圖3.4所示。

嵌入式系統(tǒng)中的數(shù)據(jù)存儲和數(shù)據(jù)管理是嵌入式系統(tǒng)開發(fā)中的一個重要部分,F(xiàn)lash存儲器因?yàn)槠涔逃械乃俣瓤?、成本低等諸多優(yōu)點(diǎn)而被越來越多地應(yīng)用到了嵌入式系統(tǒng)中。相對傳統(tǒng)的EEPROM芯片,F(xiàn)lash芯片可以用電氣的方法快速地擦寫。3.3Flash模塊設(shè)計(jì)由于快擦寫存儲器不需要存儲電容器,故其集成度更高,制造成本低于DRAM。同時Flash模塊使用方便,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后不丟失信息的特點(diǎn),所以得到了迅速發(fā)展。3.3.1Flash的特點(diǎn)和分類

Flash是非易失存儲器,可以對存儲器單元進(jìn)行擦寫和再編程,多用于存放程序代碼、常量表和一些在系統(tǒng)掉電以后需要保存的用戶數(shù)據(jù),且具有速度快、成本低等優(yōu)點(diǎn)。

目前Flash主要有兩種:Nor-Flash和Nand-Flash。通過比較Flash的讀、寫、擦除速度,接口的差別以及容量的大小等,它們的特點(diǎn)介紹如下:

Nand-Flash使用復(fù)雜的I/O口串行地存取數(shù)據(jù),8個引腳用來傳送控制、地址和數(shù)據(jù)信息,一次讀寫一個512字節(jié)的存儲塊。Nor-Flash自帶SDRAM接口,地址引腳可以滿足尋址的要求,可以存取其內(nèi)容的每一個字節(jié)。

Nor-Flash的讀取速度比Nand-Flash稍快,但是它的寫入速度遠(yuǎn)遠(yuǎn)慢于Nand-Flash,擦除速度也遠(yuǎn)低于Nand-Flash。

Nor-Flash的單元尺寸較Nand-Flash大,在相同的芯片尺寸內(nèi),Nand-Flash顯然可以提供更大的存儲容量。Nor-Flash占據(jù)了大部分容量為1~128MB的內(nèi)存市場,而Nand-Flash在64MB~1GB的產(chǎn)品中比較常見。

Nand-Flash中每個塊的最大擦寫次數(shù)是100萬次,而Nor-Flash的擦寫次數(shù)是10萬次。

Nand-Flash中的壞塊是隨機(jī)分布的,可能在出廠時就存在壞塊,也可能于使用過程中出現(xiàn)壞塊。需要對介質(zhì)進(jìn)行初始化掃描以后才可發(fā)現(xiàn)壞塊,并將壞塊標(biāo)記為不可用。

圖3.5Flash的一般結(jié)構(gòu)

Nand-Flash和Nor-Flash器件在進(jìn)行寫入和擦除操作時都需要閃存技術(shù)驅(qū)動程序(MemoryTechnologyDevices,MTD)。使用Nor-Flash時所需要的MTD要相對少一些,許多廠商都提供用于Nor-Flash器件的更高級軟件,其中包括M-System的TrueFfs驅(qū)動,該驅(qū)動被WindRiverSystem、Microsoft、QNXSoftwareSystem、Symbian和Intel等廠商所采用。3.3.2Nor-Flash及Nand-Flash芯片引腳描述

1.?Nor-Flash芯片引腳描述

Nor技術(shù)(亦稱為Linear技術(shù))閃速存儲器是最早出現(xiàn)的FlashMemory,目前仍是多數(shù)供應(yīng)商支持的技術(shù)架構(gòu)。它源于傳統(tǒng)的EPROM器件,與其他FlashMemory技術(shù)相比,具有可靠性高、隨機(jī)讀取速度快的優(yōu)勢。Nor-Flash在擦除和編程操作較少而直接執(zhí)行代碼的場合,尤其是純代碼存儲的應(yīng)用中廣泛使用,如PC的BIOS固件、移動電話、硬盤驅(qū)動器的控制存儲器等。

Nor-Flash具有以下特點(diǎn):

程序和數(shù)據(jù)可存放在同一芯片上,擁有獨(dú)立的數(shù)據(jù)和地址總線,能快速隨機(jī)讀取,允許系統(tǒng)直接從Flash中讀取代碼執(zhí)行,而無須先將代碼下載至RAM中再執(zhí)行。

可以單字節(jié)或單字編程,但不能單字節(jié)擦除,必須以塊為單位或?qū)φ瑘?zhí)行擦除操作,在對存儲器進(jìn)行重新編程之前需要對塊或整片進(jìn)行預(yù)編程和擦除操作。

由于Nor技術(shù)FlashMemory的擦除和編程速度較慢,而塊尺寸又較大,因此擦除和編程操作所花費(fèi)的時間很長,在純數(shù)據(jù)存儲和文件存儲的應(yīng)用中,Nor技術(shù)顯得力不從心。

Flash芯片的主要生產(chǎn)商有Atmel、AMD、Hyundai等,他們生產(chǎn)的同型器件一般具有相同的電器特性和封裝形式,可以通用。

現(xiàn)在以SST39LF/VF160芯片為例介紹Nor-Flash的引腳功能,SST39LF/VF160是

1M

×

16位的CMOS芯片,SST39LF160的工作電壓為3.0~3.6V,SST39VF160的工作電壓為2.7~3.6V,采用48腳的TSOP封裝或TFBGA封裝,16位數(shù)據(jù)寬度,以字模式的方式開始工作。SST39LF/VF160的編程操作僅需3.3V電壓,通過命令可以對芯片進(jìn)行編程、擦除以及其他操作。其引腳如圖3.6所示,引腳功能如表3.1所示。

圖3.6SST39LF/VF160的引腳圖

表3.1SST39LF/VF160的引腳功能表2.?Nand-Flash芯片引腳描述

Nand技術(shù)FlashMemory具有以下特點(diǎn):

以頁為單位進(jìn)行讀和編程操作,1頁為256或512B;以塊為單位進(jìn)行擦除操作,1塊為4、8或16KB;具有快編程和快擦除的功能,其塊擦除時間是2ms,而Nor技術(shù)的塊擦除時間達(dá)到幾百ms。

數(shù)據(jù)、地址采用同一總線,實(shí)現(xiàn)串行讀取。隨機(jī)讀取速度慢且不能按字節(jié)隨機(jī)編程。

芯片尺寸小、引腳少,是位成本(bitcost)最低的固態(tài)存儲器,將很快突破每兆字節(jié)1美元的價格限制。

圖3.7K9F1208UDM-YCB0的引腳圖

芯片包含有失效塊,其數(shù)目最大可達(dá)到3~35塊(取決于存儲器密度)。失效塊不會影響有效塊的性能,但設(shè)計(jì)者需要將失效塊在地址映射表中屏蔽起來。

Samsung公司在1999年底開發(fā)出世界上第一顆1GB的Nand-Flash存儲器?;贜and-Flash的存儲器可以取代硬盤或其他設(shè)備。

下面以K9F1208UDM-YCB0存儲器為例介紹Nand-Flash的引腳圖和引腳功能。K9F1208UDM-YCB0存儲器是64M

×

8位的Nand-Flash存儲器,數(shù)據(jù)總線寬度為8位,工作電壓為2.7~3.6V,采用48腳TSOP封裝,系統(tǒng)的編程和擦除電壓僅需3.3V,其引腳如圖3.7所示,引腳功能如表3.2所示。

表3.2K9F1208UDM-YCB0引腳功能表3.3.3Flash硬件設(shè)計(jì)

1.?Nor-Flash硬件設(shè)計(jì)

下面以芯片SST39VF160為例,簡述Nor-Flash硬件設(shè)計(jì)方法。圖3.8所示為SST39VF160的存儲器系統(tǒng)電路,該圖給出了芯片SST39VF160與S3C2410X微處理器的連線,構(gòu)成

1M

×

16位的存儲器系統(tǒng)。從圖中可以看出,Nor-Flash采用了A1~A22總共22條地址總線和16條數(shù)據(jù)總線與CPU連接,請注意地址是從A1開始的,這意味著它每次最小的讀寫單位是2byte。因此根據(jù)原理圖,該設(shè)計(jì)總共可以兼容支持最大8Mb的Nor-Flash,實(shí)際圖3.8中只用了A1~A20合計(jì)20條地址線,因?yàn)榕cA21、A22相連的SST39VF160的相應(yīng)引腳是懸空的。

圖3.8SST39VF160的存儲器系統(tǒng)電路圖

2.?Nand-Flash硬件設(shè)計(jì)

下面以K9F1208UDM-YCB0為例,簡述Nand-Flash硬件設(shè)計(jì)方法。圖3.9所示為K9F1208UDM-YCB0的存儲器系統(tǒng)電路,該圖給出了芯片K9F1208UDM-YCB0與S3C2410X微處理器的連線。Nand-Flash不具有地址線,它用專門的控制接口與CPU相連,數(shù)據(jù)總線為8bit,但這并不意味著Nand-Flash讀/寫數(shù)據(jù)會很慢。大部分的U盤或者SD卡等都是由Nand-Flash制成的。

圖3.9K9F1208UDM-YCB0的存儲器系統(tǒng)電路圖3.3.4Flash存儲器的操作

向Flash存儲器的特定寄存器寫入地址和數(shù)據(jù)命令,就可以對Flash存儲器進(jìn)行燒寫、擦除等操作,操作時必須按照一定的順序進(jìn)行。擦除命令可以使“0”變“1”,而編程指令則正好相反。因此,正確的操作順序?yàn)橄冗M(jìn)行擦除,再進(jìn)行編程。

系統(tǒng)啟動后,先對關(guān)鍵設(shè)備進(jìn)行初始化操作,然后啟動Boot-loader,將Nand-Flash上的Linux內(nèi)核讀入SDRAM執(zhí)行。初始化時,要對Flash內(nèi)部寄存器進(jìn)行初始化設(shè)置。

圖3.10Flash數(shù)據(jù)存儲操作流程圖

液晶顯示器(LCD,LiquidCrystalDisplay)具有顯示質(zhì)量高、功耗低、重量輕、體積小、無電磁輻射等優(yōu)點(diǎn),被越來越多地應(yīng)用到ARM嵌入式系統(tǒng)開發(fā)中。LCD是用來完成人機(jī)交互的一個重要通道。3.4LCD?模?塊?設(shè)?計(jì)3.4.1LCD工作原理

1.顯示模式

LCD在顯示子程序中讀取對應(yīng)的字模數(shù)據(jù),然后送給LCD,由LCD將接收到的對應(yīng)的字模在相應(yīng)的位置顯示出來。

從色彩上分類,LCD顯示屏分為單色、灰度和彩色三種。從背光方式分類,有透射式、反射式、半反半透式LCD三類。LCD可以分為段位式LCD、字符式LCD和點(diǎn)陣式LCD。段位式LCD和字符式LCD只能用于字符和數(shù)字的簡單顯示,不能滿足圖形、曲線和漢字顯示的需求;而點(diǎn)陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線以及漢字,還可以實(shí)現(xiàn)屏幕滾動、動畫、分區(qū)開窗口、閃爍、反轉(zhuǎn)等功能。

LCD點(diǎn)陣格式采用倒序,縱向取模,以半角為單位。以半角為單位是為了中文點(diǎn)陣和西文字符字模的統(tǒng)一。在文本顯示方式下,液晶屏顯示信息的管理單位是8

×

8點(diǎn)陣,稱為一個文本顯示單位,每個文本顯示單位對應(yīng)文本顯示緩沖區(qū)中的8個連續(xù)存儲單元,在此方式下,寫入文本顯示緩沖區(qū)的是字符代碼。在圖形顯示方式下,LCD可以通過對位操作來控制液晶屏上任意一點(diǎn)的顯示情況。文本方式實(shí)際上是圖形顯示方式下的圖形塊顯示。在圖形顯示方式下,液晶屏顯示單元是8

×

1點(diǎn)陣,稱為一個圖形顯示單元。

2.?LCD顯示地址

不同功能和大小的LCD,它們驅(qū)動控制的復(fù)雜程度也不相同。這里以S3C9228為例,S3C9228Page1的RAM地址空間用作LCD數(shù)據(jù)存儲空間。當(dāng)SEG位的值為“1”時,LCD顯示開;當(dāng)SEG位的值為“0”時,LCD顯示關(guān)。

采用直接存儲器訪問模式(DMA)訪問和顯示RAM中的數(shù)據(jù),同時,數(shù)據(jù)在fLCD信號的同步作用下,經(jīng)過SEG0~SEG19引腳輸出。Page1中的地址空間不用作LCD顯示,可以用作通用存儲器,如圖3.11所示。

圖3.11LCD顯示RAM的地址結(jié)構(gòu)圖液晶顯示驅(qū)動模塊是在液晶像素的兩電極之間建立交變電場。在點(diǎn)陣式液晶顯示器中,像素的兩電極是以矩陣方式排列的,由驅(qū)動電路循環(huán)地給每行電極施加電壓,同時通過列電極給該行像素施加選擇脈沖電壓,以實(shí)現(xiàn)對像素的驅(qū)動。這種行掃描是按逐行順序進(jìn)行的,循環(huán)一周為一幀。3.4.2LCD硬件電路設(shè)計(jì)

下面以HY12864為例介紹LCD的接口電路。HY12864是一個128

×

64點(diǎn)陣的LCD,采用兩片HD61202芯片作為列驅(qū)動器,同時使用一片HD61203作為行驅(qū)動器的液晶模塊,HY12864與微控制器的數(shù)據(jù)傳輸采用8位并行傳輸方式。

LCD接口電路如圖3.12所示,設(shè)計(jì)中由LJ12的I/O口控制LCD的片選與讀、寫,并通過LJ12的同步串行通信接口SPI來傳輸LCD的顯示數(shù)據(jù)。在LCD的DB0~DB7和串行口MOSI之間加了一個74HC164芯片,從而使A、B引腳上的信號做與運(yùn)算,作為串行輸入的數(shù)據(jù)信號,并移位輸出到Q0~Q7引腳上。MR信號用于清除Q0~Q7的信號。

圖3.12LCD接口電路圖3.4.3LCD驅(qū)動程序設(shè)計(jì)

1.?LCD引腳介紹

S3C2410LCD控制器用于傳輸視頻數(shù)據(jù)和產(chǎn)生必要的控制信號,如VFRAME、VLINE、VCLK、VM,等等。除了控制信號外,還包括輸出視頻數(shù)據(jù)的端口VD[23:0]。

2.寄存器介紹

S3C2410支持STN-LCD和TFT-LCD,這里只介紹其對TFT-LCD的控制。S3C2410的LCD控制寄存器主要有LCDCON1寄存器、LCDCON2寄存器、LCDCON3寄存器、LCDCON4寄存器和LCDCON5寄存器等,詳情請見相應(yīng)產(chǎn)品的電子手冊。

REGBANK是LCD控制器的寄存器組,用來對LCD控制器的各項(xiàng)參數(shù)進(jìn)行設(shè)置。而LCDCDMA則是LCD控制器專用的DMA信道,負(fù)責(zé)將視頻資料從系統(tǒng)總線(SystemBus)上取來,通過VIDPRCS從VD[23:0]發(fā)送給LCD屏。同時TIMEGEN和LPC3600負(fù)責(zé)產(chǎn)生LCD屏所需要的控制時序,例如VSYNC、HSYNC、VCLK、VDEN,然后從VIDEOMUX送給LCD屏。

圖3.13S3C2410內(nèi)部的LCD控制器的邏輯示意圖

3.?LCD模塊控制流程

LCD控制器由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600組成。

REGBANK有17個可編程寄存器組和256

×

16位的調(diào)色板存儲器,用來設(shè)定LCD控制器。LCDCDMA是一個專用DMA,負(fù)責(zé)自動從幀存儲器傳輸視頻數(shù)據(jù)到LCD控制器,用這個特殊的DMA,視頻數(shù)據(jù)可不經(jīng)過CPU干涉就顯示在屏幕上。

VIDPRCS接受從LCDCDMA傳來的視頻數(shù)據(jù)并在將其改變到合適數(shù)據(jù)格式后經(jīng)VD[23:0]送到LCD驅(qū)動器,如4/8單掃描或4雙掃描顯示模式。

TIMEGEN由可編程邏輯器件組成,以支持不同LCD驅(qū)動器的接口時序和速率的不同要求。TIMEGEN產(chǎn)生VFRAME、VLINE、VCLK、VM信號等。

數(shù)據(jù)流可描述如下:FIFO存儲器位于LCDCDMA。當(dāng)FIFO空或部分空時,LCDCDMA要求從基于突發(fā)傳輸模式的幀存儲器中取來數(shù)據(jù),存入要顯示的圖像數(shù)據(jù),而這個幀存儲器是LCD控制器在RAM中開辟的一片緩沖區(qū)。當(dāng)這個傳輸請求被存儲控制器中的總線仲裁器接收到后,從系統(tǒng)存儲器到內(nèi)部FIFO就會成功傳輸4個字。FIFO的總大小是28個字,其中低位FIFOL是12個字,高位FIFOH是16個字。S3C2410有兩個FIFO來支持雙掃描顯示模式。在單掃描模式下,只使用一個FIFO(FIFOH)。

4.?LCD控制器初始化

下面給出LCD控制器的初始化代碼:

s2410IOP->GPCUP =0xFFFFFFFF;

s2410IOP->GPCCON =0xAAAAAAAA;

s2410IOP->GPDUP =0xFFFFFFFF;

s2410IOP->GPDCON=0xAAAAAAAA;

s2410LCD->LCDCON1 =(6<<8)|(LCD_MVAL<<7)|(3<<5)|(BppMode<<1)|(0<<0);

s2410LCD->LCDCON2 =(LCD_VBPD<<24)|((YSize-1)<<14)|(LCD_VFPD<<6)|(LCD_VSPW<<0);

s2410LCD->LCDCON3 =(LCD_HBPD<<19)|((XSize-1)<<8)|(LCD_HFPD<<0);

s2410LCD->LCDCON4 =(LCD_MVAL<<8)|(LCD_HSPW<<0);

s2410LCD->LCDCON5 =(0<<12)|(1<<11)|(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1<<0);

s2410LCD->LCDSADDR1 =((IMAGE_FRAMEBUFFER_DMA_BASE>>22)<<21)|((M5D(IMAGE_FRAMEBUFFER_DMA_BASE>>1))<<0);

s2410LCD->LCDSADDR2 =M5D((IMAGE_FRAMEBUFFER_DMA_BASE+(XSize*YSize*2))>>1);

s2410LCD->LCDSADDR3 =(((XSize-XSize)/1)<<11)|(XSize/1);

s2410LCD->LPCSEL|=0x3;

s2410LCD->TPAL=0x0;

s2410LCD->LCDCON1|=1;

早期的計(jì)算機(jī)系統(tǒng)中常用串口或并口連接外圍設(shè)備。每個接口都需要占用計(jì)算機(jī)的系統(tǒng)資源(如中斷、I/O地址、DMA通道等)。無論是串口還是并口都是點(diǎn)對點(diǎn)的連接,一個接口僅支持一個設(shè)備。因此每添加一個新的設(shè)備,就需要添加一個ISA/EISA或PCI卡來支持,同時系統(tǒng)需要重新啟動才能驅(qū)動新的設(shè)備。3.5USB模塊設(shè)計(jì)

USB總線是Intel、DEC、Microsoft、IBM等公司聯(lián)合提出的一種新的串行總線標(biāo)準(zhǔn),主要用于PC機(jī)與外圍設(shè)備的互聯(lián)。USB總線具有成本低、使用簡單、支持即插即用、易于擴(kuò)展等特點(diǎn),已被廣泛地應(yīng)用在嵌入式系統(tǒng)中。3.5.1USB發(fā)展簡介

從1994年11月11日發(fā)表了USBV0.7版本以后,USB版本經(jīng)歷了多年的發(fā)展,到現(xiàn)在已經(jīng)發(fā)展為3.0版本。

第一代:USB1.0/1.1的最大傳輸速率為12Mb/s,于1996年推出。

第二代:USB2.0的最大傳輸速率高達(dá)480Mb/s。USB1.0/1.1與USB2.0的接口是相互兼容的。2003年發(fā)布了統(tǒng)一的USB2.0標(biāo)準(zhǔn),但是在閃存盤和MP3市場的USB2.0傳輸速率問題一直沒有解決好。第三代:USB3.0理論上的傳輸速率可達(dá)5Gb/s并向下兼容USB1.0/1.1/2.0。該標(biāo)準(zhǔn)于2008年發(fā)布,目前逐漸開始有產(chǎn)品上市。

英特爾公司(Intel)和業(yè)界領(lǐng)先的公司一起攜手組建了USB3.0推廣組,旨在開發(fā)速度超過當(dāng)今10倍的超高速USB互聯(lián)技術(shù)。該技術(shù)是由Intel、HP、NEC、NXP半導(dǎo)體以及TexasInstruments等公司共同開發(fā)的,應(yīng)用領(lǐng)域包括個人計(jì)算機(jī)、消費(fèi)及移動類產(chǎn)品的快速同步即時傳輸。隨著數(shù)字媒體的日益普及以及傳輸文件的不斷增大,傳輸速率甚至超過25Gb/s,快速同步即時傳輸已經(jīng)成為必備的性能需求。

USB3.0具有向下兼容的特性,并兼具傳統(tǒng)USB技術(shù)的易用性和即插即用功能。該技術(shù)采用與有線USB相同的架構(gòu),除對USB3.0規(guī)格進(jìn)行優(yōu)化以實(shí)現(xiàn)更低的能耗和更高的協(xié)議效率之外,USB3.0的端口和線纜還支持未來的光纖傳輸。3.5.2USB工作原理及特點(diǎn)

1.?USB總線的特點(diǎn)

(1)使用簡單。所有USB系統(tǒng)的接口一致,連線簡單,系統(tǒng)可對設(shè)備進(jìn)行自動檢測和配置,支持熱插拔。

(2)應(yīng)用范圍廣。USB系統(tǒng)數(shù)據(jù)報文附加信息少,帶寬利用率高,可同時支持同步傳輸和異步傳輸兩種方式。一個USB系統(tǒng)最多可支持127個物理設(shè)備。USB設(shè)備的帶寬可從幾Kb/s到幾Mb/s(在USB2.0版本,最高可達(dá)幾百M(fèi)b/s)。一個USB系統(tǒng)可同時支持不同速率的設(shè)備,如低速的鍵盤、鼠標(biāo),全速的ISDN、語音,高速的磁盤、圖像等。

(3)較強(qiáng)的糾錯能力。USB系統(tǒng)可實(shí)時地管理設(shè)備插拔。在USB協(xié)議中包含了傳輸錯誤管理、錯誤恢復(fù)等功能,同時根據(jù)不同的傳輸類型來處理傳輸錯誤。

(4)總線供電。USB總線可為連接在其上的設(shè)備提供5V電壓、100mA電流的供電,最大可提供500mA的電流。USB設(shè)備也可采用自供電方式。

(5)低成本。USB接口電路簡單,易于實(shí)現(xiàn),特別是低速設(shè)備。USB系統(tǒng)接口/電纜也比較簡單,成本比串口/并口低。

2.?USB系統(tǒng)的拓?fù)浣Y(jié)構(gòu)

一個USB系統(tǒng)包含三類硬件設(shè)備:USB主機(jī)(USBHost)、USB設(shè)備(USBDevice)和USB集線器(USBHub),如圖3.14所示。

圖3.14USB系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖

1)

USBHost

在一個USB系統(tǒng)中,當(dāng)且僅當(dāng)有一個USBHost時,USBHost具有以下功能:

管理USB系統(tǒng);

每毫秒產(chǎn)生一幀數(shù)據(jù);

發(fā)送配置請求對USB設(shè)備進(jìn)行配置操作;

對總線上的錯誤進(jìn)行管理和恢復(fù)。

2)

USBDevice

在一個USB系統(tǒng)中,USBDevice和USBHub的總數(shù)不能超過127個。USBDevice接收USB總線上的所有數(shù)據(jù)包,通過數(shù)據(jù)包的地址域判斷目標(biāo)USB設(shè)備。若地址不符,則簡單地丟棄該數(shù)據(jù)包;若地址相符,則通過響應(yīng)USBHost的數(shù)據(jù)包與USBHost進(jìn)行數(shù)據(jù)傳輸。

3)

USBHub

USBHub用于設(shè)備擴(kuò)展連接,所有USBDevice都連接在USBHub的端口上。一個USBHost總與一個根HUB(USBRootHub)相連。USBHub為其每個端口提供100mA電流供設(shè)備使用。同時,USBHub可以通過端口的電氣變化診斷出設(shè)備的插拔操作,并通過響應(yīng)USBHost的數(shù)據(jù)包把端口狀態(tài)匯報給USBHost。一般來說,USB設(shè)備與USBHub間的連線長度不超過5m,USB系統(tǒng)的級聯(lián)不能超過5級(包括RootHub)。

3.?USB總線數(shù)據(jù)傳輸

從物理結(jié)構(gòu)上來看,USB系統(tǒng)是一個星型結(jié)構(gòu),但在邏輯結(jié)構(gòu)上,每個USB邏輯設(shè)備都是直接與USBHost相連進(jìn)行數(shù)據(jù)傳輸?shù)?。在USB總線上,每毫秒傳輸1幀數(shù)據(jù)。每幀數(shù)據(jù)可由多個數(shù)據(jù)包的傳輸過程組成。USB設(shè)備可根據(jù)數(shù)據(jù)包中的地址信息來判斷是否響應(yīng)該數(shù)據(jù)傳輸。在USB規(guī)范中,規(guī)定了4種傳輸方式以適應(yīng)不同的傳輸需求。

圖3.15USB總線上數(shù)據(jù)傳輸?shù)慕Y(jié)構(gòu)圖

1)控制傳輸(ControlTransfer)

控制傳輸發(fā)送設(shè)備請求信息,主要用于讀取設(shè)備配置信息及設(shè)備狀態(tài)、設(shè)置設(shè)備地址、設(shè)置設(shè)備屬性、發(fā)送控制命令等功能。全速設(shè)備每次控制傳輸?shù)淖畲笥行ж?fù)荷可為64個字節(jié),而低速設(shè)備每次控制傳輸?shù)淖畲笥行ж?fù)荷僅為8個字節(jié)。

2)同步傳輸(IsochronousTransfer)

同步傳輸僅適用于全速/高速設(shè)備。同步傳輸每毫秒進(jìn)行一次,有較大的帶寬,常用于語音設(shè)備。同步傳輸每次傳輸?shù)淖畲笥行ж?fù)荷可為1023個字節(jié)。

3)中斷傳輸(InterruptTransfer)

中斷傳輸用于支持?jǐn)?shù)據(jù)量少的周期性傳輸需求。全速設(shè)備的中斷傳輸周期可為1~255ms,而低速設(shè)備的中斷傳輸周期為10~255ms。全速設(shè)備每次中斷傳輸?shù)淖畲笥行ж?fù)荷可為

64個字節(jié),而低速設(shè)備每次中斷傳輸?shù)淖畲笥行ж?fù)荷僅為8個字節(jié)。

4)塊數(shù)據(jù)傳輸(BulkTransfer)

塊數(shù)據(jù)傳輸是非周期性的數(shù)據(jù)傳輸,僅全速/高速設(shè)備支持塊數(shù)據(jù)傳輸,同時,當(dāng)且僅當(dāng)總線帶寬有效時才進(jìn)行塊數(shù)據(jù)傳輸。塊數(shù)據(jù)傳輸每次數(shù)據(jù)傳輸?shù)淖畲笥行ж?fù)荷可為64個字節(jié)。3.5.3USB硬件電路設(shè)計(jì)

1.?USB的硬件結(jié)構(gòu)

USB采用四線電纜,其中兩根用來傳送數(shù)據(jù)的串行通道,另兩根為下行設(shè)備提供電源。USB是基于令牌的總線。類似于令牌環(huán)網(wǎng)絡(luò)或FDDI基于令牌的總線,USB主控制器廣播令牌其總線上設(shè)備檢測令牌中的地址是否與自身相符,是通過接收或發(fā)送數(shù)據(jù)給主機(jī)來響應(yīng)的。USB通過支持懸掛(suspend)/恢復(fù)(resume)操作來管理USB總線電源。USB系統(tǒng)采用級聯(lián)星型拓?fù)?,該拓?fù)溆扇齻€基本部分組成:主機(jī)(Host)、集線器(Hub)和功能設(shè)備。

圖3.16USB接口引腳分布圖主機(jī),也稱為根、根結(jié)或根Hub。如果ARM處理器包含USB控制器,則主機(jī)集成在ARM處理器中,否則需要在嵌入式系統(tǒng)中添加一塊控制器芯片作為主機(jī)。主機(jī)包含主控制器和根集線器(Root

Hub),控制著USB總線上的數(shù)據(jù)和信息的流動,每個USB系統(tǒng)只能有一個根集線器,它連接在主控制器上。

集線器是USB結(jié)構(gòu)中的特定成分,它提供端口(Port),可將設(shè)備連接到USB總線上,同時檢測連接在總線上的設(shè)備,并為這些設(shè)備提供電源管理,負(fù)責(zé)總線的故障檢測和恢復(fù)。集線器可為總線提供能源,也可為自身提供能源。功能設(shè)備通過端口與總線連接,USB同時可做Hub使用。圖3.16所示為USB接口引腳分布圖。

USB接口具有速度快、兼容性好、不占中斷、可以串接、支持熱插拔等特點(diǎn)。USB接口定義如下:

(1)第1腳為電源正極

+5V。

(2)第2腳為DATA-

數(shù)據(jù)線。

(3)第3腳為DATA+

數(shù)據(jù)線。

(4)第4腳為GND,電源地。

2.?USB的硬件原理圖

ARM通過發(fā)送命令和完成初始化來與USB建立連接。以下將以PDIUSBD12為例介紹USB與ARM的連接電路圖。

ARMnCS作為PDIUSBD12的片選信號,使用的是ARM的ExternalI/OBANK2的地址范圍;PDIUSBD12的A0腳與ARM的A0口相連,用以控制PDIUSBD12的命令和數(shù)據(jù)狀態(tài);PDIUSBD12的ALE腳接地,表示PDIUSBD12這時是一個獨(dú)立的地址和數(shù)據(jù)總線配置;PDIUSBD12的中斷腳INT_N連接到ARM外部中斷2腳,使用外部中斷2。圖3.17所示為USB與ARM的連接電路圖。

圖3.17USB與ARM的連接電路圖3.5.4USB驅(qū)動程序設(shè)計(jì)

本節(jié)我們以PHILIPS公司的USB接口芯片PDIUSBD12為例說明USB驅(qū)動程序的設(shè)計(jì)方法。PDIUSBD12是一個性能優(yōu)化的USB器件,通常用于基于微控制器的系統(tǒng),并通過高速通用并行接口與微控制器進(jìn)行通信,而且支持本地DMA傳輸。該器件采用模塊化的方法實(shí)現(xiàn)一個USB接口,允許在眾多可用的微控制器中選擇最合適的作為系統(tǒng)微控制器,允許使用現(xiàn)有的體系結(jié)構(gòu)使固件投資減到最少。這種靈活性減少了開發(fā)時間、風(fēng)險和成本。PDIUSBD12非常適合于很多外圍設(shè)備,如打印機(jī)、掃描儀、外部大容量存儲器(U盤)和數(shù)碼相機(jī)等。

1.?USB固件程序的設(shè)計(jì)

固件程序不僅要協(xié)助USB控制芯片PDIUSBD12完成USB通信的任務(wù),而且還要控制采集模塊和標(biāo)準(zhǔn)信號源的工作,具體包括:

(1)應(yīng)答主機(jī)列舉設(shè)備的所有請求,完成設(shè)備的列舉和重列舉過程。其中包括用軟件來模擬USB設(shè)備的斷開與重新連接,對接收到的設(shè)備包進(jìn)行分析和判斷,對主機(jī)的設(shè)備請求做出適當(dāng)?shù)捻憫?yīng)工作,直到主機(jī)對設(shè)備的配制完成。

(2)初始化工作。對采集模塊和信號源模塊的硬件和USB芯片進(jìn)行初始化,設(shè)置一些特殊功能寄存器的初值,例如開啟或關(guān)閉中斷、配制I/O端口等。

(3)當(dāng)主機(jī)發(fā)送數(shù)據(jù)時,接收數(shù)據(jù)包并解析數(shù)據(jù)包的含義,根據(jù)事先約定的協(xié)議進(jìn)行相應(yīng)的操作。

(4)當(dāng)主機(jī)要求回傳采集到的數(shù)據(jù)時,根據(jù)設(shè)備狀態(tài)回傳數(shù)據(jù),或者回答數(shù)據(jù)未準(zhǔn)備好。當(dāng)數(shù)據(jù)回傳準(zhǔn)備好時,進(jìn)行回傳數(shù)據(jù),每次回傳結(jié)束后,自動按照原先保存的設(shè)置初始化采集參數(shù)并啟動下一次采集,從而使采集繼續(xù)下去。

(5)響應(yīng)硬件產(chǎn)生的中斷,并做出相應(yīng)的處理。

ARM與PDIUSBD12的通信主要是靠ARM給PDIUSBD12發(fā)命令和數(shù)據(jù)來實(shí)現(xiàn)的。PDIUSBD12的命令字分為三種:初始化命令字、數(shù)據(jù)流命令字和通用命令字。PDIUSBD12數(shù)據(jù)手冊給出了各種命令的代碼和地址。ARM先給PDIUSBD12的命令地址發(fā)命令,再根據(jù)不同命令的要求發(fā)送或讀出不同的數(shù)據(jù)。因此,可以將每種命令做成函數(shù),用函數(shù)實(shí)現(xiàn)各個命令,直接調(diào)用函數(shù)即可。固件程序流程圖如圖3.18所示。

圖3.18固件程序流程圖圖3.18中的各函數(shù)作用如下:

TD_Init():此函數(shù)用于初始化全局狀態(tài)變量。

TD_Poll():此函數(shù)在操作外設(shè)時反復(fù)調(diào)用,用于外設(shè)功能程序代碼的執(zhí)行。

TDSuspend():此函數(shù)使外設(shè)進(jìn)入低功耗掛起狀態(tài)。

TD_Resume():此函數(shù)用于對外部恢復(fù)事件做出反應(yīng),并恢復(fù)處理器正常工作狀態(tài)。

2.?USB驅(qū)動程序的設(shè)計(jì)

目前用于驅(qū)動程序開發(fā)的工具主要有Windiver、微軟的DDK和Compuware公司的DriverStudio等。這里使用DriverStudio驅(qū)動開發(fā)工具進(jìn)行開發(fā),對于面向?qū)ο缶幊痰能浖_發(fā),DriverStudio是一個良好的驅(qū)動開發(fā)工具,并且開發(fā)時間比較短。DriverStudio工具包中的DriverWorks提供了三個類:KDriver、KPnpDevice和KPnpLowerDevice,這三個類用于實(shí)現(xiàn)WDM驅(qū)動程序的框架結(jié)構(gòu)。圖3.19所示是這些子程序的示意圖。

圖3.19USB驅(qū)動程序的示意圖在這些子程序中,DriverEntry、AdddDevice和一些Dispatch程序是驅(qū)動設(shè)備必需的部分。若驅(qū)動程序要對IRP進(jìn)行排隊(duì),則它必須包括StartIO程序;若需要中斷的驅(qū)動程序,則必須具有OnInterrupt和DpcForLst程序;若驅(qū)動程序要進(jìn)行DMA傳輸,則它要有AdapterControl程序。每個驅(qū)動程序的子程序選擇都是建立在自己需要的功能基礎(chǔ)之上的。

其中,KDriver類提供設(shè)備驅(qū)動程序的基本框架。它負(fù)責(zé)驅(qū)動程序的初始化,并負(fù)責(zé)將IRP分發(fā)到目標(biāo)設(shè)備對象。由于KDriver是抽象類,因此必須創(chuàng)建一個KDriver的派生類,并重載DriverEntry例程,在DriverEntry例程中做一些初始化的工作。每當(dāng)Pnp子系統(tǒng)檢測到驅(qū)動程序所負(fù)責(zé)的設(shè)備時,就調(diào)用AddDevice例程,UnLoad例程負(fù)責(zé)最后的清除工作。

KPnpDevice類是KDevice類的派生類,在驅(qū)動程序中只作為基類使用。它支持即插即用和電源管理,主要處理IRP_MJ_PNP和IRP_MJ_POWER請求包。

KPnpLowerDevice類提供了一個物理設(shè)備對象的模型,當(dāng)驅(qū)動程序創(chuàng)建或初始化一個KPnpLowerDevice類實(shí)例的時候,它就將一個設(shè)備對象連向一個物理設(shè)備的對象。除了用到以上類外,開發(fā)USB驅(qū)動程序還要用到DriverWorks提供的3個用于實(shí)現(xiàn)USB設(shè)備操作的類:KUSBLowerDevice、KUSBInterface和KUSBPipe。其中,KUSBLowerDevice類允許USB驅(qū)動程序通過默認(rèn)控制管道控制USB設(shè)備,如配置USB設(shè)備、傳輸各種控制和狀態(tài)請求;KUSBInterface類的作用更多的是結(jié)構(gòu)上的而非功能上的,其成員函數(shù)幾乎不與實(shí)際物理設(shè)備發(fā)生交互作用,驅(qū)動程序用這個類獲取接口和管道信息;KUSBPipe類對應(yīng)于管道,管道使主機(jī)和一個端點(diǎn)的信息連接,這個類用于初始化管道信息和管道操作控制。

3.6.1GPIO

在嵌入式系統(tǒng)應(yīng)用中,常有許多結(jié)構(gòu)較簡單的外部設(shè)備/電路需要CPU提供控制手段,有的則被CPU用作輸入信號。而且,許多這樣的設(shè)備/電路只要有開/關(guān)兩種狀態(tài)就夠了。對這些設(shè)備/電路的控制,使用傳統(tǒng)的串行口或并行口都不合適。3.6I/O接口模塊設(shè)計(jì)所以在微控制器芯片上一般都會提供一個“通用可編程I/O接口”,即通用輸入/輸出(GPIO,General-PurposeIOports)接口。GPIO通常用于需要開關(guān)量驅(qū)動的設(shè)備控制,如LED彩燈的控制、步進(jìn)電機(jī)的控制、繼電器的控制等。GPIO使用工業(yè)標(biāo)準(zhǔn)I2C、SMBus或SPI接口簡化了I/O口的擴(kuò)展。當(dāng)微控制器或芯片組沒有足夠的I/O端口,或當(dāng)系統(tǒng)需要采用遠(yuǎn)端串行通信或控制時,GPIO產(chǎn)品能夠提供額外的控制和監(jiān)視功能。GPIO接口可以用來模擬SPI、I2C等接口,為項(xiàng)目開發(fā)提供靈活的選擇。每個GPIO端口可通過軟件配置成輸入或輸出。

GPIO具有以下一些優(yōu)點(diǎn):

低功耗:GPIO具有更低的功率損耗(大約1μA,μC的工作電流則為100μA)。

集成I2C人機(jī)接口:GPIO內(nèi)置I2C人機(jī)接口,即使在待機(jī)模式下也能夠全速工作。

可預(yù)先確定響應(yīng)時間:縮短或確定外部事件與中斷之間的響應(yīng)時間。

支持中斷和查詢低速數(shù)據(jù)傳輸方式、DMA高速數(shù)據(jù)傳輸方式和多種I/O端口類型。

GPIO接口至少有兩個寄存器,即通用I/O控制寄存器與通用I/O數(shù)據(jù)寄存器。數(shù)據(jù)寄存器的各位都直接引到芯片外部,而對這種寄存器中每一位的作用,即每一位的信號流通方向,則可以通過控制寄存器中的對應(yīng)位獨(dú)立地加以設(shè)置。這樣,有無GPIO接口也就成為微控制器區(qū)別于微處理器的一個特征。

在實(shí)際的MCU中,GPIO是有多種形式的。比如,有的數(shù)據(jù)寄存器可以按位尋址,有些不能按位尋址,需要在編程時加以區(qū)分。GPIO接口除了兩個標(biāo)準(zhǔn)寄存器外,還提供上拉寄存器,可以設(shè)置IO的輸出模式是高阻,還是帶上拉的電平輸出,或是不帶上拉的電平輸出。

GPIO屬于字符型設(shè)備,其驅(qū)動程序的編寫有兩種方式,即靜態(tài)編譯進(jìn)內(nèi)核和動態(tài)加載編譯模塊,并且設(shè)備驅(qū)動程序必須向Linux核心或者它所在的子系統(tǒng)提供一個標(biāo)準(zhǔn)的接口。如果使用的芯片帶有MMU內(nèi)存管理,在寫驅(qū)動模塊的時候必須利用IOREMAP命令進(jìn)行重新映射。3.6.2UART

UART為通用異步串行接口,主要由三部分組成:接收器、發(fā)送器和控制器。接收器用來將接收到的串行碼轉(zhuǎn)換成并行碼,并對其進(jìn)行錯誤檢測。發(fā)送器用來將并行碼轉(zhuǎn)換為一定數(shù)據(jù)格式的串行碼??刂破饔靡越邮誄PU的控制信號,執(zhí)行CPU所要求的操作,并輸出狀態(tài)信息和控制信息。

異步通信的通信線路上沒有數(shù)據(jù)的時候處于邏輯1狀態(tài),在開始發(fā)送數(shù)據(jù)的時候,發(fā)送設(shè)備首先發(fā)送一個邏輯0,緊接著就發(fā)送數(shù)據(jù)位。當(dāng)接收設(shè)備接收到0起始位時,表示開始接收數(shù)據(jù),在字符數(shù)據(jù)的傳送過程中,數(shù)據(jù)位從低位開始傳輸。數(shù)據(jù)發(fā)送完畢之后,要發(fā)送奇偶校驗(yàn)位,用于有限差錯檢測。奇偶校驗(yàn)位之后,便是停止位,異步串行通信數(shù)據(jù)格式如圖3.20所示。

ARM的UART單元提供獨(dú)立的異步串行I/O端口,每個端口都可以在中斷和DMA兩種模式下工作,支持的最高波特率為115.2kb/s,每個UART通道包含兩個16位FIFO,分別用于接收和發(fā)送數(shù)據(jù)。

圖3.20異步串行通信的數(shù)據(jù)格式

圖3.21串口UART模塊示意圖3.6.3SPI接口

SPI接口(SerialPeripheralInterface)意為串行外圍接口,是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在EEPROM、Flash、實(shí)時時鐘、AD轉(zhuǎn)換器、數(shù)字信號處理器和數(shù)字信號解

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論