- Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解(第2版)
- 華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心 宋寶華編著
- 152字
- 2018-12-27 10:06:05
第2章 驅(qū)動(dòng)設(shè)計(jì)的硬件基礎(chǔ)
本章導(dǎo)讀
2.3節(jié)分析了常見(jiàn)的外設(shè)接口與總線的工作方式,包括串口、I2C、USB、以太網(wǎng)接口、ISA、PCI和cPCI等。
本章講述一個(gè)底層驅(qū)動(dòng)工程師必備的硬件基礎(chǔ),給出了嵌入式系統(tǒng)硬件原理及分析方法的一個(gè)完整而簡(jiǎn)潔的全景視圖。
2.1節(jié)描述了微控制器、微處理器、數(shù)字信號(hào)處理器以及應(yīng)用于特定領(lǐng)域的處理器各自的特點(diǎn),分析了處理器的體系架構(gòu)和指令集。
2.2節(jié)對(duì)嵌入式系統(tǒng)中所使用的各類存儲(chǔ)器與CPU的接口、應(yīng)用領(lǐng)域及特點(diǎn)進(jìn)行了歸納整理。
嵌入式系統(tǒng)硬件電路中經(jīng)常會(huì)使用CPLD和FPGA,作為驅(qū)動(dòng)工程師,我們不需要掌握CPLD和FPGA的開(kāi)發(fā)方法,但是需要知道它們?cè)陔娐分心芡瓿墒裁垂ぷ鳎?.4節(jié)講解了這項(xiàng)內(nèi)容。
2.5~2.7節(jié)給出了在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中硬件分析的方法,包括如何進(jìn)行原理圖分析、時(shí)序分析及如何快速地從芯片手冊(cè)獲取有效信息。
2.8節(jié)講解了調(diào)試過(guò)程中常用儀器儀表的使用方法,涉及萬(wàn)用表、示波器和邏輯分析儀。
2.1 處理器
2.1.1 通用處理器
通用處理器(GPP)并不針對(duì)特定的應(yīng)用領(lǐng)域進(jìn)行體系結(jié)構(gòu)和指令集的優(yōu)化,它們具有一般化的通用體系結(jié)構(gòu)和指令集,以求支持復(fù)雜的運(yùn)算并易于添加新開(kāi)發(fā)的功能。一般而言,在嵌入式微控制器(MCU)和微處理器(MPU)中會(huì)包含一個(gè)通用處理器核。
MPU通常代表一個(gè)CPU(中央處理器),而MCU則強(qiáng)調(diào)把中央處理器、存儲(chǔ)器和外圍電路集成在一個(gè)芯片中。早期,微控制器被稱為單片機(jī),指把計(jì)算機(jī)集成在一個(gè)芯片內(nèi)。嵌入式微控制器也常被稱作片上系統(tǒng)(SoC),含義是在一個(gè)芯片上設(shè)計(jì)了整個(gè)系統(tǒng)。芯片廠商在推出 MCU時(shí),往往會(huì)有明確的市場(chǎng)定位,如定位于PDA、MP3、ADSL等。定位不同的產(chǎn)品可能包含共同的CPU核,但是集成的擴(kuò)展電路則不一樣。圖2.1所示給出了一個(gè)典型的集成了外圍電路的MCU的結(jié)構(gòu)。

圖2.1 典型的MCU內(nèi)部結(jié)構(gòu)
舉個(gè)例子,Intel的80386屬于微處理器,而內(nèi)部集成了80386處理器、片選單元、中斷控制、定時(shí)器、看門狗定時(shí)器、串行I/O、DMA和總線仲裁、DRAM控制器等的386EX則是80386微處理器的微控制器版本。但是,要說(shuō)明的是,GPP、MCU和MPU等概念其實(shí)非常含糊,許多地方并不加以區(qū)分,而明確區(qū)分這些概念在技術(shù)上本身也沒(méi)有太大的意義。
嵌入式微控制器一般由一個(gè)CPU核和多個(gè)外圍電路集成,目前主流的嵌入式CPU核有如下幾種。
● Advanced RISC Machines公司的ARM。
ARM內(nèi)核的設(shè)計(jì)技術(shù)被授權(quán)給數(shù)百家半導(dǎo)體廠商,做成不同的SoC芯片。ARM的功耗很低,在當(dāng)今最活躍的無(wú)線局域網(wǎng)、3G、手機(jī)終端、手持設(shè)備、有線網(wǎng)絡(luò)通信設(shè)備等中應(yīng)用非常廣泛。本書(shū)所基于的LDD6410開(kāi)發(fā)板上采用的就是S3C6410這個(gè)ARM SoC芯片。
● MIPS技術(shù)公司的MIPS。
兩個(gè)最重要的MIPS芯片廠商為PMC和IDT,PMC-Sierra公司的MIPS處理器被CISCO公司大量采用在高端路由器上。IDT公司在MIPS核上集成PCI接口,廣泛用于以太網(wǎng)交換,另外也嘗試增加了HDLC、Ethernet、串口、SDRAM控制器、片選、DMA控制器等外設(shè)接口,以用于低端通信產(chǎn)品。
● IBM和Motorola的PowerPC。
PowerPC處理器是通信和工控領(lǐng)域應(yīng)用最廣泛的處理器,國(guó)內(nèi)包括華為、中興在內(nèi)的通信公司都大量使用PowerPC,MPC860和MPC8260是其最經(jīng)典的兩款。
● Motorola公司獨(dú)有的內(nèi)核68K/COLDFIRE。
68K內(nèi)核是最早在嵌入式領(lǐng)域廣泛應(yīng)用的內(nèi)核,其最著名的代表芯片是68360。Coldfire則繼承了68K的特點(diǎn)并對(duì)其保持了兼容。Coldfire內(nèi)核被用于DSP模塊、CAN總線模塊以及一般嵌入式處理器所集成的外設(shè)模塊,在工業(yè)控制、機(jī)器人研究、家電控制等領(lǐng)域被廣泛采用。
Motorola的半導(dǎo)體部已經(jīng)獨(dú)立為飛思卡爾半導(dǎo)體公司(Freescale Semiconductor Inc.),因?yàn)闅v史原因,上文仍然使用Motorola。
中央處理器的體系架構(gòu)可以分為兩類,一類為馮·諾伊曼結(jié)構(gòu),一類為哈佛結(jié)構(gòu)。
馮·諾伊曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的存儲(chǔ)器結(jié)構(gòu)。程序指令存儲(chǔ)地址和數(shù)據(jù)存儲(chǔ)地址指向同一個(gè)存儲(chǔ)器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同。而哈佛結(jié)構(gòu)將程序指令和數(shù)據(jù)分開(kāi)存儲(chǔ),指令和數(shù)據(jù)可以有不同的數(shù)據(jù)寬度。此外,哈佛結(jié)構(gòu)還采用了獨(dú)立的程序總線和數(shù)據(jù)總線,分別作為CPU與每個(gè)存儲(chǔ)器之間的專用通信路徑,具有較高的執(zhí)行效率。圖2.2描述了馮·諾伊曼結(jié)構(gòu)和哈佛結(jié)構(gòu)的區(qū)別。

圖2.2 馮·諾伊曼結(jié)構(gòu)與哈佛結(jié)構(gòu)
從指令集的角度來(lái)講,中央處理器也可以分為兩類,即RISC(精簡(jiǎn)指令集計(jì)算機(jī))和CISC (復(fù)雜指令集計(jì)算機(jī))。CSIC強(qiáng)調(diào)增強(qiáng)指令的能力、減少目標(biāo)代碼的數(shù)量,但是指令復(fù)雜,指令周期長(zhǎng);而RISC強(qiáng)調(diào)盡可能減少指令集、指令單周期執(zhí)行,但是目標(biāo)代碼會(huì)更大。ARM、MIPS、PowerPC等CPU內(nèi)核都采用了RISC指令集。目前,RISC和CSIC二者的融合非常明顯。
2.1.2 數(shù)字信號(hào)處理器
數(shù)字信號(hào)處理器(DSP)針對(duì)通信、圖像、語(yǔ)音和視頻處理等領(lǐng)域的算法而設(shè)計(jì)。它包含獨(dú)立的硬件乘法器。DSP 的乘法指令一般在單周期內(nèi)完成,且優(yōu)化了卷積、數(shù)字濾波、FFT(快速傅立葉變換)、相關(guān)、矩陣運(yùn)算等算法中的大量重復(fù)乘法。
DSP一般采用如圖2.3所示的改進(jìn)的哈佛架構(gòu),它具有獨(dú)立的地址總線和數(shù)據(jù)總線,兩條總線由程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分時(shí)共用。

圖2.3 改進(jìn)的哈佛結(jié)構(gòu)
DSP分為兩類,一類是定點(diǎn)DSP,一類是浮點(diǎn)DSP。浮點(diǎn)DSP的浮點(diǎn)運(yùn)算用硬件來(lái)實(shí)現(xiàn),可以在單周期內(nèi)完成,因而其浮點(diǎn)運(yùn)算處理速度高于定點(diǎn) DSP。而定點(diǎn) DSP 只能用定點(diǎn)運(yùn)算模擬浮點(diǎn)運(yùn)算。
德州儀器(TI)、美國(guó)模擬器件公司(ADI)是全球DSP的兩大主要廠商。
TI的TMS320?DSP平臺(tái)包含了功能不同的多個(gè)系列如2000系列、3000系列、4000系列、5000系列、6000系列,工程師也習(xí)慣稱其為2X、3X、4X、5X、6X。2010年5月,TI已經(jīng)宣布為其 C64x 系列數(shù)字信號(hào)處理器與多核片上系統(tǒng)提供 Linux 內(nèi)核支持,以充分滿足通信與關(guān)鍵任務(wù)基礎(chǔ)設(shè)施、醫(yī)療診斷以及高性能測(cè)量測(cè)試等應(yīng)用需求。TI 對(duì) C64x Linux 內(nèi)核的產(chǎn)品支持TMS320C6474、TMS320C6455和TMS320C6457,將于2010年第3季度開(kāi)始提供。
ADI主要有16位定點(diǎn)的21xx系列、32位浮點(diǎn)的SHARC系列、從SHARC系列發(fā)展而來(lái)的TigerSHARC系列及高性能16位DSP信號(hào)處理能力與通用微控制器方便性相結(jié)合的blackfin系列等。ADI的blackfin不含MMU,完整支持Linux,是MMU-less情況下Linux的典型案例,其官方網(wǎng)站為http://blackfin.uclinux.org/gf/,目前blackfin的Linux開(kāi)發(fā)保持了Linux mainline的同步。
通用處理器和數(shù)字信號(hào)處理器也有相互融合以取長(zhǎng)補(bǔ)短的趨勢(shì),如數(shù)字信號(hào)控制器(DSC)即為MCU+DSP,ADI的blackfin系列就屬于DSC。目前,芯片廠商也推出了許多ARM+DSP的雙核以及多核的處理器,如TI公司的OMAP4平臺(tái)就包括4個(gè)主要處理引擎:ARM Cortex-A9 MPCore、PowerVR SGX 540 GPU(Graphic Processing Unit)、C64x DSP 和ISP(Image Signal Processor)。
除了上面講述的通用微控制器和數(shù)字信號(hào)處理器外,還有一些針對(duì)特定領(lǐng)域而設(shè)計(jì)的專用處理器(ASP),它們都是針對(duì)一些特定應(yīng)用而設(shè)計(jì)的,如用于HDTV、ADSL、Cable Modem等的專用處理器。
網(wǎng)絡(luò)處理器是一種可編程器件,它應(yīng)用于電信領(lǐng)域的各種任務(wù),如包處理、協(xié)議分析、路由查找、聲音/數(shù)據(jù)的匯聚、防火墻、QoS等。網(wǎng)絡(luò)處理器器件內(nèi)部通常由若干個(gè)微碼處理器和若干硬件協(xié)處理器組成,多個(gè)微碼處理器在網(wǎng)絡(luò)處理器內(nèi)部并行處理,通過(guò)預(yù)先編制的微碼來(lái)控制處理流程。而對(duì)于一些復(fù)雜的標(biāo)準(zhǔn)操作(如內(nèi)存操作、路由表查找算法、QoS的擁塞控制算法、流量調(diào)度算法等)則采用硬件協(xié)處理器來(lái)進(jìn)一步提高處理性能,從而實(shí)現(xiàn)了業(yè)務(wù)靈活性和高性能的有機(jī)結(jié)合。
對(duì)于某些應(yīng)用場(chǎng)合,使用ASIC(專用集成電路)往往是低成本且高性能的方案。ASIC專門針對(duì)特定應(yīng)用而設(shè)計(jì),不具備也不需要靈活的編程能力。使用 ASIC 完成同樣的功能往往比直接使用CPU資源或CPLD(復(fù)雜可編程邏輯器件)/FPGA(現(xiàn)場(chǎng)可編程門陣列)來(lái)得更廉價(jià)且高效。
在實(shí)際項(xiàng)目的硬件方案中,往往會(huì)根據(jù)應(yīng)用的需求選擇通用處理器、數(shù)字信號(hào)處理器、特定領(lǐng)域處理器、CPLD/FPGA或ASIC之一的解決方案,在復(fù)雜的系統(tǒng)中,這些芯片可能會(huì)同時(shí)存在,協(xié)同合作,各自發(fā)揮自己的長(zhǎng)處。如在一款智能手機(jī)中,可使用 MCU 處理圖形用戶界面和用戶的按鍵輸入并運(yùn)行多任務(wù)操作系統(tǒng),使用DSP進(jìn)行音視頻編解碼,而在射頻方面則采用ASIC。
綜合2.1節(jié)的內(nèi)容,我們可得出如圖2.4所示的處理器分類。

圖2.4 處理器分類
2.2 存儲(chǔ)器
存儲(chǔ)器主要可分類為只讀儲(chǔ)存器(ROM)、閃存(Flash)、隨機(jī)存取存儲(chǔ)器(RAM)、光、磁介質(zhì)儲(chǔ)存器。
ROM還可再細(xì)分為不可編程ROM、可編程ROM(PROM)、可擦除可編程ROM(EPROM)和電可擦除可編程ROM(EEPROM),EEPROM完全可以用軟件來(lái)擦寫(xiě),已經(jīng)非常方便了。
目前ROM有被Flash替代的趨勢(shì),NOR(或非)和NAND(與非)是市場(chǎng)上兩種主要的Flash閃存技術(shù)。Intel于1988年首先開(kāi)發(fā)出NOR Flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了NAND Flash結(jié)構(gòu),每比特的成本被大大降低。
NOR Flash和CPU的接口屬于典型的類SRAM接口(如圖2.5所示),不需要增加額外的控制電路。NOR Flash的特點(diǎn)是可芯片內(nèi)執(zhí)行(XIP,eXecute In Place),程序可以直接在NOR內(nèi)運(yùn)行。而NAND Flash和CPU的接口必須由相應(yīng)的控制電路進(jìn)行轉(zhuǎn)換,當(dāng)然也可以通過(guò)地址線或GPIO產(chǎn)生NAND Flash接口的信號(hào)。NAND FLASH以塊方式進(jìn)行訪問(wèn),不支持芯片內(nèi)執(zhí)行。

圖2.5 典型的類SRAM接口
公共閃存接口(Common Flash Interface,簡(jiǎn)稱CFI)是一個(gè)公開(kāi)的、標(biāo)準(zhǔn)的從NOR Flash器件中讀取數(shù)據(jù)的接口。它可以使系統(tǒng)軟件查詢已安裝的Flash 器件的各種參數(shù),包括器件陣列結(jié)構(gòu)參數(shù)、電氣和時(shí)間參數(shù)以及器件支持的功能等。利用 CFI,在不修改系統(tǒng)軟件的情況下,就可以用新型的和改進(jìn)的產(chǎn)品代替舊版本的產(chǎn)品。
一個(gè)NAND Flash的接口主要包含如下信號(hào)。
● I/O總線:地址、指令和數(shù)據(jù)通過(guò)這組總線傳輸,一般為8位或16位。
● 芯片啟動(dòng)(Chip Enable,CE#):如果沒(méi)有檢測(cè)到CE信號(hào),那么,NAND器件就保持待機(jī)模式,不對(duì)任何控制信號(hào)做出響應(yīng)。
● 寫(xiě)使能(Write Enable,WE#):WE#負(fù)責(zé)將數(shù)據(jù)、地址或指令寫(xiě)入NAND之中。
● 讀使能(Read Enable,RE#):RE#允許數(shù)據(jù)輸出。
● 指令鎖存使能(Command Latch Enable,CLE):當(dāng)CLE為高時(shí),在WE#信號(hào)的上升沿,指令將被鎖存到NAND指令寄存器中。
● 地址鎖存使能(Address Latch Enable,ALE):當(dāng)ALE為高時(shí),在WE#信號(hào)的上升沿,地址將被鎖存到NAND地址寄存器中。
● 就緒/忙(Ready/Busy,R/B#):如果NAND器件忙,R/B#信號(hào)將變低。該信號(hào)是漏極開(kāi)路,需要采用上拉電阻。
NAND Flash較NOR Flash容量大,價(jià)格低;NAND Flash中每個(gè)塊的最大擦寫(xiě)次數(shù)是一百萬(wàn)次,而NOR的擦寫(xiě)次數(shù)是十萬(wàn)次;NAND Flash的擦除、編程速度遠(yuǎn)超過(guò)NOR Flash。
由于Flash固有的電器特性,在讀寫(xiě)數(shù)據(jù)過(guò)程中,偶然會(huì)產(chǎn)生1位或幾位數(shù)據(jù)錯(cuò)誤,即位反轉(zhuǎn),NAND Flash發(fā)生位反轉(zhuǎn)的幾率要遠(yuǎn)大于NOR Flash。位反轉(zhuǎn)無(wú)法避免,因此,使用NAND Flash的同時(shí),應(yīng)采用錯(cuò)誤探測(cè)/錯(cuò)誤更正(EDC/ECC)算法。
Flash的編程原理都是只能將1寫(xiě)為0,而不能將0寫(xiě)為1。所以在Flash編程之前,必須將對(duì)應(yīng)的塊擦除,而擦除的過(guò)程就是把所有位都寫(xiě)為1的過(guò)程,塊內(nèi)的所有字節(jié)變?yōu)?xFF。
許多嵌入式系統(tǒng)都提供了IDE(Integrated Drive Electronics)接口,以供連接硬盤控制器或光驅(qū),IDE 接口的信號(hào)與 SRAM 類似。人們通常也把 IDE 接口稱為 ATA(Advanced Technology Attachment)接口,技術(shù)角度而言并不準(zhǔn)確。其實(shí),ATA接口發(fā)展至今,已經(jīng)經(jīng)歷了ATA-1(IDE)、ATA-2(EIDE Enhanced IDE/Fast ATA)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100及Serial ATA的發(fā)展過(guò)程。
以上所述的各種ROM、Flash和磁介質(zhì)存儲(chǔ)器都屬于非易失性存儲(chǔ)器(NVM)的范疇,掉電信息不會(huì)丟失,而RAM則與此相反。
RAM也可再分為靜態(tài)RAM(SRAM)和動(dòng)態(tài)RAM(DRAM)。DRAM以電荷形式進(jìn)行存儲(chǔ),數(shù)據(jù)存儲(chǔ)在電容器中。由于電容器會(huì)由于漏電而導(dǎo)致電荷丟失,因而DRAM器件需要定期被刷新。SRAM是靜態(tài)的,只要供電它就會(huì)保持一個(gè)值,SRAM沒(méi)有刷新周期。每個(gè)SRAM存儲(chǔ)單元由6個(gè)晶體管組成,而DRAM存儲(chǔ)單元由1個(gè)晶體管和1個(gè)電容器組成。
通常所說(shuō)的SDRAM、DDR SDRAM皆屬于DRAM的范疇,它們采用與CPU外存控制器同步的時(shí)鐘工作(注意不是與CPU的工作頻率一致)。與SDRAM相比,DDR SDRAM同時(shí)利用了時(shí)鐘脈沖的上升沿和下降沿傳輸數(shù)據(jù),因此在時(shí)鐘頻率不變的情況下,數(shù)據(jù)傳輸頻率被加倍。此外,還存在使用RSL(Rambus發(fā)信電平)技術(shù)的RDRAM(Rambus DRAM)和Direct RDRAM。
針對(duì)許多特定場(chǎng)合的應(yīng)用,嵌入式系統(tǒng)中往往還使用了一些特定類型的RAM。
1.NVRAM:非易失性RAM
既然是RAM,就是易失性的,為什么會(huì)有一類非易失性的RAM呢?
實(shí)際上,NVRAM借助帶有備用電源的SRAM或借助NVM(如EEPROM)存儲(chǔ)SRAM的信息并恢復(fù)來(lái)實(shí)現(xiàn)。NVRAM的特點(diǎn)是完全像 SRAM一樣讀寫(xiě),而且寫(xiě)入的信息掉電不丟失,不需要 EEPROM和Flash 的特定擦除和編程操作。NVRAM 多用于存放系統(tǒng)中的參數(shù)信息。
2.DPRAM:雙端口RAM
DPRAM的特點(diǎn)是可以通過(guò)2個(gè)端口同時(shí)訪問(wèn),具有2套完全獨(dú)立的數(shù)據(jù)總線、地址總線線和讀寫(xiě)控制線,通常用于2個(gè)處理器之間交互數(shù)據(jù),如圖2.6所示。當(dāng)一端被寫(xiě)入數(shù)據(jù)后,另一端可以通過(guò)輪詢或中斷獲知,并讀取其寫(xiě)入的數(shù)據(jù)。由于雙CPU同時(shí)訪問(wèn)DPRAM時(shí)的仲裁邏輯電路集成在DPRAM內(nèi)部,因而硬件工程師設(shè)計(jì)電路的原理比較簡(jiǎn)單。

圖2.6 雙端口RAM
DPRAM的優(yōu)點(diǎn)是通信速度快、實(shí)時(shí)性強(qiáng)、接口簡(jiǎn)單,而且兩邊CPU都可主動(dòng)進(jìn)行數(shù)據(jù)傳輸。除了雙端口RAM以外,目前IDT等芯片廠商還推出了多端口RAM,可以供3個(gè)以上的CPU互通數(shù)據(jù)。
3.CAM:內(nèi)容尋址RAM
CAM是以內(nèi)容進(jìn)行尋址的存儲(chǔ)器,是一種特殊的存儲(chǔ)陣列RAM,它的主要工作機(jī)制就是將一個(gè)輸入數(shù)據(jù)項(xiàng)與存儲(chǔ)在CAM中的所有數(shù)據(jù)項(xiàng)自動(dòng)同時(shí)進(jìn)行比較,判別該輸入數(shù)據(jù)項(xiàng)與CAM中存儲(chǔ)的數(shù)據(jù)項(xiàng)是否相匹配,并輸出該數(shù)據(jù)項(xiàng)對(duì)應(yīng)的匹配信息。
如圖2.7所示,在 CAM 中,輸入的是所要查詢的數(shù)據(jù),輸出的是數(shù)據(jù)地址和匹配標(biāo)志。若匹配(即搜尋到數(shù)據(jù)),則輸出數(shù)據(jù)地址。CAM用于數(shù)據(jù)檢索的優(yōu)勢(shì)是軟件無(wú)法比擬的,可以極大地提高系統(tǒng)性能。

圖2.7 CAM的輸入與輸出
● FIFO:先進(jìn)先出隊(duì)列
FIFO存儲(chǔ)器的特點(diǎn)是先進(jìn)先出,進(jìn)出有序,F(xiàn)IFO多用于數(shù)據(jù)緩沖。FIFO和DPRAM類似,具有兩個(gè)訪問(wèn)端口,但是 FIFO 兩邊的端口并不對(duì)等,某一時(shí)刻只能被設(shè)置為一邊作為輸入,一邊作為輸出。
如果FIFO的區(qū)域共為n個(gè)字節(jié),我們只能通過(guò)循環(huán)n次讀取同一個(gè)地址才能將該片區(qū)域讀出,不能指定偏移地址。對(duì)于有n個(gè)數(shù)據(jù)的FIFO,當(dāng)循環(huán)讀取m次,下一次讀會(huì)自動(dòng)讀取到第m +1個(gè)數(shù)據(jù),這是由FIFO本身的特性決定的。
總結(jié)2.2節(jié)的內(nèi)容,我們可得出如圖2.8所示的存儲(chǔ)器分類。

圖2.8 存儲(chǔ)器分類
2.3 接口與總線
2.3.1 串口
RS-232、RS-422與 RS-485 都是串行數(shù)據(jù)接口標(biāo)準(zhǔn),最初都是由電子工業(yè)協(xié)會(huì)(EIA)制訂并發(fā)布的。
RS-232在1962年發(fā)布,命名為EIA-232-E。之后發(fā)布的RS-422定義了一種平衡通信接口,它是一種單機(jī)發(fā)送、多機(jī)接收的單向、平衡傳輸規(guī)范,被命名為TIA/EIA-422-A標(biāo)準(zhǔn)。RS-422改進(jìn)了RS-232通信距離短、速率低的缺點(diǎn)。為進(jìn)一步擴(kuò)展應(yīng)用范圍,EIA 又于1983 年在 RS-422的基礎(chǔ)上制定了RS-485標(biāo)準(zhǔn),增加了多點(diǎn)、雙向通信能力,即允許多個(gè)發(fā)送器連接到同一條總線上,同時(shí)增加了發(fā)送器的驅(qū)動(dòng)能力和沖突保護(hù)特性,并擴(kuò)展了總線共模范圍,被命名為TIA/EIA-485-A標(biāo)準(zhǔn)。
1969年發(fā)布的RS-232修改版RS-232C是嵌入式系統(tǒng)應(yīng)用最廣泛的串行接口,它為連接DTE (數(shù)據(jù)終端設(shè)備)與DCE(數(shù)據(jù)通信設(shè)備)而制定。RS-232C規(guī)標(biāo)準(zhǔn)接口有25條線(4條數(shù)據(jù)線、11條控制線、3條定時(shí)線、7條備用和未定義線),常用的只有9根,它們是RTS/CTS(請(qǐng)求發(fā)送/清除發(fā)送流控制)、RxD/TxD(數(shù)據(jù)收發(fā))、DSR/DTR(數(shù)據(jù)終端就緒/數(shù)據(jù)設(shè)置就緒流控制)、DCD (數(shù)據(jù)載波檢測(cè),也稱RLSD,即接收線信號(hào)檢出)、Ringing-RI(振鈴指示)、SG(信號(hào)地)信號(hào)。RTS/CTS、TxD/RxD、DRS/DTR等信號(hào)的定義如下。
● RTS:用來(lái)表示DTE請(qǐng)求DCE發(fā)送數(shù)據(jù),當(dāng)終端要發(fā)送數(shù)據(jù)時(shí),使該信號(hào)有效。
● CTS:用來(lái)表示DCE準(zhǔn)備好接收DTE發(fā)來(lái)的數(shù)據(jù),是對(duì)RTS的響應(yīng)信號(hào)。
● TxD:DTE通過(guò)TxD將串行數(shù)據(jù)發(fā)送到DCE。
● RxD:DTE通過(guò)RxD接收從DCE發(fā)來(lái)的串行數(shù)據(jù)。
● DSR:有效(ON狀態(tài))表明DCE可以使用。
● DTR:有效(ON狀態(tài))表明DTE可以使用。
● DCD:當(dāng)本地DCE設(shè)備收到對(duì)方DCE設(shè)備送來(lái)的載波信號(hào)時(shí),使DCD有效,通知DTE準(zhǔn)備接收,并且由DCE將接收到的載波信號(hào)解調(diào)為數(shù)字信號(hào),經(jīng)RXD線送給DTE。
● Ringing-RI:當(dāng)MODEM收到交換臺(tái)送來(lái)的振鈴呼叫信號(hào)時(shí),使該信號(hào)有效(ON狀態(tài)),通知終端,已被呼叫。
在嵌入式系統(tǒng)中,并不太注重DTE和DCE的概念,而RS-232C也很少用來(lái)連接modem,多使用RS-232C進(jìn)行對(duì)等通信,如Windows超級(jí)終端、Linux minicom用來(lái)連接電路板控制臺(tái)等。最簡(jiǎn)單的RS-232C串口只需要連接RxD、TxD、SG這3個(gè)信號(hào),使用XON/XOFF軟件流控。
組成一個(gè)RS-232C串口的硬件原理如圖2.9所示,從CPU到連接器依次為:CPU、UART(通用異步接收器發(fā)送器,作用是完成并/串轉(zhuǎn)換)、CMOS/TTL電平與RS-232C電平轉(zhuǎn)換、DB9/DB25或自定義連接器。

圖2.9 RS-232C串口電路原理
2.3.2 I2C
I2C(內(nèi)置集成電路)總線是由Philips公司開(kāi)發(fā)的兩線式串行總線,產(chǎn)生于20世紀(jì)80年代,用于連接微控制器及其外圍設(shè)備。I2C總線簡(jiǎn)單而有效,占用很少的PCB(印刷電路板)空間,芯片管腳數(shù)量少,設(shè)計(jì)成本低。I2C總線支持多主控(multi-mastering)模式,任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主設(shè)備。主控能夠控制數(shù)據(jù)的傳輸和時(shí)鐘頻率,在任意時(shí)刻只能有一個(gè)主控。
組成I2C總線的兩個(gè)信號(hào)為數(shù)據(jù)線SDA和時(shí)鐘SCL。為了避免總線信號(hào)的混亂,要求各設(shè)備連接到總線的輸出端必須是開(kāi)漏輸出或集電極開(kāi)路輸出的結(jié)構(gòu)。總線空閑時(shí),上拉電阻使 SDA和SCL線都保持高電平。根據(jù)開(kāi)漏輸出或集電極開(kāi)路輸出信號(hào)的“線與”邏輯,I2C總線上任意器件輸出低電平都會(huì)使相應(yīng)總線上的信號(hào)線變低。
“線與”邏輯指的是兩個(gè)或兩個(gè)以上的輸出直接互連就可以實(shí)現(xiàn)“AND”的邏輯功能,只有輸出端是開(kāi)漏(對(duì)于CMOS器件)輸出或集電極開(kāi)路(對(duì)于TTL器件)輸出時(shí)才滿足此條件。工程師一般以“OC門”簡(jiǎn)稱開(kāi)漏或集電極開(kāi)路。
I2C設(shè)備上的串行數(shù)據(jù)線SDA接口電路是雙向的,輸出電路用于向總線上發(fā)送數(shù)據(jù),輸入電路用于接收總線上的數(shù)據(jù)。同樣地,串行時(shí)鐘線SCL也是雙向的,作為控制總線數(shù)據(jù)傳送的主機(jī)要通過(guò)SCL輸出電路發(fā)送時(shí)鐘信號(hào),并檢測(cè)總線上SCL上的電平以決定什么時(shí)候發(fā)下一個(gè)時(shí)鐘脈沖電平;作為接收主機(jī)命令的從設(shè)備需按總線上SCL的信號(hào)發(fā)送或接收SDA上的信號(hào),它也可以向SCL線發(fā)出低電平信號(hào)以延長(zhǎng)總線時(shí)鐘信號(hào)周期。
當(dāng) SCL 穩(wěn)定在高電平時(shí),SDA 由高到低的變化將產(chǎn)生一個(gè)開(kāi)始位,而由低到高的變化則產(chǎn)生一個(gè)停止位,如圖2.10所示。

圖2.10 I2C總線開(kāi)始位和停止位
開(kāi)始位和停止位都由I2C主設(shè)備產(chǎn)生。在選擇從設(shè)備時(shí),如果從設(shè)備采用7位地址,則主設(shè)備在發(fā)起傳輸過(guò)程前,需先發(fā)送1字節(jié)的地址信息,前7位為設(shè)備地址,最后1位為讀寫(xiě)標(biāo)志。之后,每次傳輸?shù)臄?shù)據(jù)也是1個(gè)字節(jié),從MSB位開(kāi)始傳輸。每個(gè)字節(jié)傳完后,在SCL的第9個(gè)上升沿到來(lái)之前,接收方應(yīng)該發(fā)出1個(gè)ACK位。SCL上的時(shí)鐘脈沖由I2C主控方發(fā)出,在第8個(gè)時(shí)鐘周期之后,主控方應(yīng)該釋放SDA,I2C總線的時(shí)序如圖2.11所示。

圖2.11 I2C總線時(shí)序
2.3.3 USB
USB(通用串行總線)是Intel、Microsoft等廠商為解決計(jì)算機(jī)外設(shè)種類的日益增加與有限的主板插槽和端口之間的矛盾而于1995年提出的,它具有數(shù)據(jù)傳輸率高、易擴(kuò)展、支持即插即用和熱插拔的優(yōu)點(diǎn),目前已得到廣泛應(yīng)用?
USB1.1包含全速和低速兩種模式,低速方式的速率為1.5Mbit/s,支持一些不需要很大數(shù)據(jù)吞吐量和很高實(shí)時(shí)性的設(shè)備,如鼠標(biāo)等。全速模式為12Mbit/s,可以外接速率更高的外設(shè)?在USB2.0中,增加了一種高速方式,數(shù)據(jù)傳輸率達(dá)到480Mbit/s,可以滿足更高速外設(shè)的需要?
USB的物理拓?fù)浣Y(jié)構(gòu)如圖2.12所示,在USB2.0中,高速方式下Hub使全速和低速方式的信令環(huán)境獨(dú)立出來(lái),圖2.13所示高速方式下Hub的作用?

圖2.12 USB的物理拓?fù)?/p>

圖2.13 USB 2.0連接高速、全/低速設(shè)備
在嵌入式系統(tǒng)中,電路板若需要掛接USB設(shè)備(device),則需提供USB主機(jī)(host)控制器和連接器;若電路板需要作為USB設(shè)備,則需提供USB設(shè)備適配器和連接器。有的MCU集成了USB主機(jī)控制器和設(shè)備適配器。
USB 總線的機(jī)械連接非常簡(jiǎn)單,采用4 芯的屏蔽線,一對(duì)差分線(D+,D-)傳送信號(hào),另一對(duì)(VBUS,電源地)傳送+5V的直流電。一個(gè)USB主控制器端口最多可連接127個(gè)器件,各器件之間的距離不超過(guò)5米?
USB提供了4種傳輸方式以適應(yīng)各種設(shè)備的需要,說(shuō)明如下。
(1)控制(Control)傳輸方式。
控制傳輸是雙向傳輸,數(shù)據(jù)量通常較小,主要用來(lái)進(jìn)行查詢、配置和給USB設(shè)備發(fā)送通用的命令?
(2)同步(Synchronization)傳輸方式。
同步傳輸提供了確定的帶寬和間隔時(shí)間,它被用于時(shí)間嚴(yán)格并具有較強(qiáng)容錯(cuò)性的流數(shù)據(jù)傳輸,或者用于要求恒定的數(shù)據(jù)傳送率的即時(shí)應(yīng)用。例如進(jìn)行語(yǔ)音業(yè)務(wù)傳輸時(shí),使用同步傳輸方式是很好的選擇?
(3)中斷(Interrupt)傳輸方式。
中斷方式傳送是單向的,對(duì)于USB主機(jī)而言,只有輸入。中斷傳輸方式主要用于定時(shí)查詢?cè)O(shè)備是否有中斷數(shù)據(jù)要傳送,該傳輸方式應(yīng)用在少量的、分散的、不可預(yù)測(cè)的數(shù)據(jù)傳輸場(chǎng)合,鍵盤、游戲桿和鼠標(biāo)屬于這一類型?
(4)批量(Bulk)傳輸方式。
批量傳輸主要應(yīng)用在沒(méi)有帶寬和間隔時(shí)間要求的批量數(shù)據(jù)的傳送和接收,它要求保證傳輸?打印機(jī)和掃描儀屬于這種類型?
2.3.4 以太網(wǎng)接口
以太網(wǎng)接口由MAC(以太網(wǎng)媒體接入控制器)和PHY(物理接口收發(fā)器)組成。以太網(wǎng)MAC由IEEE-802.3以太網(wǎng)標(biāo)準(zhǔn)定義,實(shí)現(xiàn)了數(shù)據(jù)鏈路層。常用的MAC支持10Mbit/s或100Mbit/s兩種速率。PHY則實(shí)現(xiàn)物理層功能,IEEE-802.3標(biāo)準(zhǔn)定義了以太網(wǎng)PHY,它符合IEEE-802.3k中用于10BaseT(第14條)和100BaseTX(第24條和第25條)的規(guī)范。10BaseT和100BaseTX PHY兩種實(shí)現(xiàn)的幀格式是一樣的,但信令機(jī)制不同,而且10BaseT采用曼徹斯特編碼,100BaseTX采用4B/5B編碼。
MAC和PHY之間采用MII(媒體獨(dú)立接口)連接,它是IEEE-802.3定義的以太網(wǎng)行業(yè)標(biāo)準(zhǔn),包括1個(gè)數(shù)據(jù)接口和1個(gè)MAC和PHY之間的管理接口。數(shù)據(jù)接口包括分別用于發(fā)送和接收的兩條獨(dú)立信道,每條信道都有自己的數(shù)據(jù)、時(shí)鐘和控制信號(hào),MII數(shù)據(jù)接口總共需要16個(gè)信號(hào)。MII管理接口包含兩個(gè)信號(hào),一個(gè)是時(shí)鐘信號(hào),另一個(gè)是數(shù)據(jù)信號(hào)。通過(guò)管理接口,上層能監(jiān)視和控制PHY。
組成一個(gè)以太網(wǎng)接口的硬件原理如圖2.14所示,從CPU到最終接口依次為:CPU、MAC、PHY、以太網(wǎng)隔離變壓器、RJ45插座。以太網(wǎng)隔離變壓器是以太網(wǎng)收發(fā)芯片與連接器之間的磁性組件,在其兩者之間起著信號(hào)傳輸、阻抗匹配、波形修復(fù)、信號(hào)雜波抑制和高電壓隔離作用。

圖2.14 以太網(wǎng)接口電路原理
許多處理器內(nèi)部集成了MAC或同時(shí)集成了MAC和PHY,另有許多以太網(wǎng)控制芯片也集成了MAC和PHY。
2.3.5 ISA
ISA(工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)總線)總線起源于1981年IBM生產(chǎn)的以Intel 8088為CPU的IBM-PC微計(jì)算機(jī),開(kāi)始時(shí)總線寬度為8位。1984年推出的IBM-PC/AT系統(tǒng)將ISA總線擴(kuò)充為16位數(shù)據(jù)總線寬度,同時(shí)地址總線寬度也由20 位擴(kuò)充到了24位。其后推出的EISA(擴(kuò)展的ISA)采用32位地址線,數(shù)據(jù)總線也擴(kuò)展為32位,但仍保持了與ISA的兼容。
圖2.15所示為ISA總線的信號(hào),這些信號(hào)可分為3組。
● 總線基本信號(hào):ISA總線工作所需要的最基本信號(hào),含復(fù)位、時(shí)鐘、電源、地等。
● 總線訪問(wèn)信號(hào):用于訪問(wèn)ISA總線設(shè)備的地址線、數(shù)據(jù)線以及相應(yīng)的應(yīng)答信號(hào)。
● 總線控制信號(hào):中斷和DMA請(qǐng)求。

圖2.15 ISA總線信號(hào)
圖2.15中各信號(hào)的詳細(xì)定義如下。
● RESET、BCLK:復(fù)位及總線基本時(shí)鐘,BLCK為8MHz。
● SA19~SA0:存儲(chǔ)器及I/O空間20位地址,帶鎖存。
● LA23~LA17:存儲(chǔ)器及I/O空間20位地址,不帶鎖存。
● BALE:總線地址鎖存,外部鎖存器的選通。
● AEN:地址允許,表明CPU讓出總線,DMA開(kāi)始。
● SMEMR#、SMEMW#:8位ISA存儲(chǔ)器讀寫(xiě)控制。
● MEMR#、MEMW#:16位ISA存儲(chǔ)器讀寫(xiě)控制。
● SD15~SD0:數(shù)據(jù)總線,訪問(wèn)8位ISA卡時(shí)高8位自動(dòng)傳送到SD7~SD0。
● SBHE#:高字節(jié)允許,打開(kāi)SD15~SD8數(shù)據(jù)通路。
● MEMCS16#、IOCS16#:ISA卡發(fā)出此信號(hào)確認(rèn)可以進(jìn)行16位傳送。
● I/OCHRDY:ISA卡準(zhǔn)備信號(hào),可控制插入等待周期。
● NOWS#:有效則暗示不用插入等待周期。
● I/OCHCK#:ISA卡奇偶校驗(yàn)錯(cuò)。
● IRQ15、IRQ14、IRQ12~I(xiàn)RQ9、IRQ7~I(xiàn)RQ3:中斷請(qǐng)求。
● DRQ7~DRQ5、DRQ3~DRQ0:ISA卡DMA請(qǐng)求。
● DACK7#~DACK5#、DACK3#~DACK0#:DMA請(qǐng)求響應(yīng)。
● MASTER#:ISA主模塊確立信號(hào),ISA發(fā)出此信號(hào),與主機(jī)內(nèi)DMAC(DMA控制器)配合使ISA卡成為主模塊。
2.3.6 PCI和cPCI
PCI(外圍部件互連)是由Intel于1991年推出的一種局部總線,作為一種通用的總線接口標(biāo)準(zhǔn),它在目前的計(jì)算機(jī)系統(tǒng)中得到了非常廣泛的應(yīng)用。PCI 提供了一組完整的總線接口規(guī)范,其目的是描述如何將計(jì)算機(jī)系統(tǒng)中的外圍設(shè)備以一種結(jié)構(gòu)化和可控化的方式連接在一起,給出了外圍設(shè)備在連接時(shí)的電氣特性和行為規(guī)約,并且詳細(xì)定義了計(jì)算機(jī)系統(tǒng)中的各個(gè)不同部件之間應(yīng)該如何正確地進(jìn)行交互。PCI總線具有如下特點(diǎn)。
● 數(shù)據(jù)總線32位,可擴(kuò)充到64位。
● 可進(jìn)行突發(fā)(burst)模式傳輸。
突發(fā)方式傳輸是指取得總線控制權(quán)后連續(xù)進(jìn)行多個(gè)數(shù)據(jù)的傳輸。突發(fā)傳輸時(shí),只需要給出目的地的首地址,訪問(wèn)第1個(gè)數(shù)據(jù)后,第2~n個(gè)數(shù)據(jù)會(huì)在首地址基礎(chǔ)上按一定規(guī)則自動(dòng)被尋址和傳輸。與突發(fā)方式對(duì)應(yīng)的是單周期方式,它在1個(gè)總線周期只傳送1個(gè)數(shù)據(jù)。
● 總線操作與處理器-存儲(chǔ)器子系統(tǒng)操作并行。
● 總線時(shí)鐘頻率為33MHz或66MHz,最高傳輸率可達(dá)528MB/s。
● 采用中央集中式總線仲裁。
● 支持全自動(dòng)配置、資源分配,PCI 卡內(nèi)有設(shè)備信息寄存器組為系統(tǒng)提供卡的信息,可實(shí)現(xiàn)即插即用。
● PCI總線規(guī)范獨(dú)立于微處理器,通用性好。
● PCI設(shè)備可以完全作為主控設(shè)備控制總線。
圖2.16給出了一個(gè)典型的基于PCI總線的計(jì)算機(jī)系統(tǒng)邏輯示意圖,系統(tǒng)的各個(gè)部分通過(guò)PCI總線和PCI-PCI橋連接在一起。CPU和RAM通過(guò)PCI橋連接到PCI總線0(即主PCI總線),而具有PCI接口的顯卡則可以直接連接到主PCI總線上。PCI-PCI橋是一個(gè)特殊的PCI設(shè)備,它負(fù)責(zé)將PCI總線0和PCI總線1(即從PCI主線)連接在一起,通常PCI總線1稱為PCI-PCI橋的下游(downstream),而PCI總線0則稱為PCI-PCI橋的上游(upstream)。為了兼容舊的ISA總線標(biāo)準(zhǔn),PCI總線還可以通過(guò)PCI-ISA橋來(lái)連接ISA總線,從而支持以前的ISA設(shè)備。

圖2.16 基于PCI總線的計(jì)算機(jī)系統(tǒng)
當(dāng)PCI卡剛加電時(shí),卡上只有配置空間是可被訪問(wèn)的,因而PCI卡開(kāi)始不能由驅(qū)動(dòng)或用戶程序訪問(wèn),這與ISA卡有本質(zhì)的區(qū)別(CPU可直接讀取ISA卡在存儲(chǔ)空間或I/O空間映射的地址)。PCI 配置空間保存著該卡工作所需的所有信息,如廠家、卡功能、資源要求、處理能力、功能模塊數(shù)量、主控卡能力等。通過(guò)對(duì)這個(gè)空間信息的讀取與編程,可完成對(duì) PCI 卡的配置。如圖2.17所示,PCI配置空間共為256字節(jié),主要包括如下信息。
● 制造商標(biāo)識(shí)(Vendor ID):由PCI組織分配給廠家。
● 設(shè)備標(biāo)識(shí)(Device ID):按產(chǎn)品分類給本卡的編號(hào)。
● 分類碼(Class Code):本卡功能的分類碼,如圖卡、顯示卡、解壓卡等。
● 申請(qǐng)存儲(chǔ)器空間:PCI 卡內(nèi)有存儲(chǔ)器或以存儲(chǔ)器編址的寄存器和 I/O 空間,為使驅(qū)動(dòng)程序和應(yīng)用程序能訪問(wèn)它們,需申請(qǐng)CPU的一段存儲(chǔ)區(qū)域以進(jìn)行定位。配置空間的基地址寄存器用于此目的。
● 申請(qǐng)I/O空間:配置空間的基地址寄存器也用來(lái)進(jìn)行系統(tǒng)I/O空間的申請(qǐng)。
● 中斷資源申請(qǐng):配置空間中的中斷引腳和中斷線用來(lái)向系統(tǒng)申請(qǐng)中斷資源。中斷資源的申請(qǐng)通過(guò)中斷引腳(interrupt pin)和中斷線(interrupt line)來(lái)完成的。偏移3Dh處為中斷引腳寄存器,其值表明 PCI 設(shè)備使用了哪一個(gè)中斷引腳,對(duì)應(yīng)關(guān)系為:1-INTA#、2-INTB#、3-INTC#、4-INTD#。
PCI總線上的信號(hào)大體可分為如下幾組。
● 系統(tǒng)接口信號(hào)。
● 地址與數(shù)據(jù)接口信號(hào)。
● 接口控制信號(hào)。
● 仲裁信號(hào)。
● 錯(cuò)誤報(bào)告信號(hào)。
● 中斷接口信號(hào)。
● 其他接口信號(hào)。

圖2.17 PCI配置空間
如圖2.18所示,這些信號(hào)的詳細(xì)定義如下。
● CLK:系統(tǒng)時(shí)鐘。
● AD31~AD0:地址和數(shù)據(jù)復(fù)用信號(hào)線信號(hào)。
● C/BE3~C/BE:總線命令和地址使能信號(hào)。
● PAR:奇偶校驗(yàn)信號(hào)。
● FRAM E#:幀周期信號(hào),指示總線操作起始和終止。
● IRDY#:主設(shè)備準(zhǔn)備好信號(hào)。
● TRDY#:目標(biāo)設(shè)備準(zhǔn)備好信號(hào)。
● STOP#:目標(biāo)設(shè)備要求終止當(dāng)前數(shù)據(jù)傳輸信號(hào)。
● DEVSEL #:目標(biāo)設(shè)備選中信號(hào)。
● IDSEL:配置空間讀寫(xiě)時(shí)的片選信號(hào)。
● LOCK#:總線鎖定信號(hào)。
● RST#:復(fù)位信號(hào)。
● INTA#、INTB#、INTC#和INTD#:中斷請(qǐng)求。
● REQ#、GNT#:PCI總線請(qǐng)求與仲裁后的授權(quán)。
● AD63-AD32、C/BE7-4等:作用于64位擴(kuò)展的PCI總線。

圖2.18 PCI總線信號(hào)
cPCI(Compact PCI,緊湊型 PCI)是以 PCI 電氣規(guī)范為標(biāo)準(zhǔn)的高性能工業(yè)用總線,結(jié)合了VME(Visa Module Eurocard,維薩信用卡模塊歐洲卡)的高性能、可擴(kuò)展性和可靠性與PCI標(biāo)準(zhǔn)的經(jīng)濟(jì)有效和靈活性。cPCI的CPU及外設(shè)與標(biāo)準(zhǔn)PCI是相同的,使用與傳統(tǒng)PCI相同的芯片和軟件,操作系統(tǒng)、驅(qū)動(dòng)和應(yīng)用程序都感覺(jué)不到兩者的區(qū)別。圖2.19展示了與cPCI總線相關(guān)的板卡、背板和機(jī)箱,基本上都是“大塊頭”,應(yīng)用于工業(yè)控制和大型通信設(shè)備。

圖2.19 cPCI板卡、背板與機(jī)箱
2.4 CPLD和FPGA
CPLD(復(fù)雜可編程邏輯器件)由完全可編程的與或門陣列以及宏單元構(gòu)成。
CPLD中基本邏輯單元是宏單元,宏單元由一些“與或”陣列加上觸發(fā)器構(gòu)成,其中“與或”陣列完成組合邏輯功能,觸發(fā)器完成時(shí)序邏輯。宏單元中與陣列的輸出稱為乘積項(xiàng),其數(shù)量標(biāo)志了CPLD的容量。乘積項(xiàng)陣列實(shí)際上就是一個(gè)“與或”陣列,每一個(gè)交叉點(diǎn)都是一個(gè)可編程熔絲,如果導(dǎo)通就是實(shí)現(xiàn)“與”邏輯。在“與”陣列后一般還有一個(gè)“或”陣列,用以完成最小邏輯表達(dá)式中的“或”關(guān)系。圖2.20所示為非常典型的CPLD的單個(gè)宏單元的結(jié)構(gòu)。

圖2.20 典型的CPLD宏單元
圖2.21給出了一個(gè)典型CPLD的整體結(jié)構(gòu)。這個(gè)CPLD由LAB(邏輯陣列模塊,由多個(gè)宏單元組成)通過(guò) PIA(可編程互連陣列)互連組成,而CPLD與外部的接口則由I/O控制模塊提供。

圖2.21 典型CPLD的結(jié)構(gòu)
圖中宏單元的輸出會(huì)經(jīng) I/O 控制塊送至I/O引腳,I/O控制塊控制每一個(gè)I/O引腳的工作模式,決定其為輸入、輸出還是雙向引腳,并決定其三態(tài)輸出的使能端控制。
與 CPLD 不同,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)基于LUT(查找表)工藝。查找表本質(zhì)上是一片RAM,當(dāng)用戶通過(guò)原理圖或HDL(硬件描述語(yǔ)言)語(yǔ)言描述了一個(gè)邏輯電路以后, FPGA 開(kāi)發(fā)軟件會(huì)自動(dòng)計(jì)算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫(xiě)入 RAM。這樣,輸入一組信號(hào)進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表輸出對(duì)應(yīng)地址的內(nèi)容。
圖2.22所示為一個(gè)典型的FPGA的內(nèi)部結(jié)構(gòu)。這個(gè)FPGA由IOC(輸入/輸出控制模塊)、EAB (嵌入式陣列塊)、LAB和FAST TRACK(快速通道互連)構(gòu)成。

圖2.22 典型FPGA的結(jié)構(gòu)
IOC是內(nèi)部信號(hào)到I/O引腳的接口,它位于FAST TRACK的行和列的末端,每個(gè)IOC包含一個(gè)雙向I/O緩沖器和一個(gè)既可做輸入寄存器也可做輸出寄存器的觸發(fā)器。
EAB(嵌入式存儲(chǔ)塊)是一種輸入輸出端帶有寄存器的非常靈活的RAM。EAB 不僅可以用作存儲(chǔ)器,也可以事先被寫(xiě)入查表值來(lái)以用來(lái)構(gòu)成如乘法器、糾錯(cuò)邏輯等電路。當(dāng)用于RAM時(shí), EAB可配制成8位、4位、2位和1位長(zhǎng)度的數(shù)據(jù)格式。
LAB主要用于邏輯電路設(shè)計(jì),一個(gè)LAB包括多個(gè)LE(邏輯單元),每個(gè)LE包括組合邏輯及一個(gè)可編程觸發(fā)器。一系列LAB構(gòu)成的邏輯陣列用來(lái)實(shí)現(xiàn)普通邏輯功能,如計(jì)數(shù)器、加法器、狀態(tài)機(jī)等。
器件內(nèi)部信號(hào)的互連和器件引出端之間的信號(hào)互連由FAST TRACK連線提供,F(xiàn)AST TRACK遍布于整個(gè)FPGA器件,是一系列水平和垂直走向的連續(xù)式布線通道。
表2.1所示為一個(gè)4輸入LUT的實(shí)際邏輯電路與LUT實(shí)現(xiàn)方式的對(duì)應(yīng)關(guān)系。
表2.1 實(shí)際邏輯電路與查找表的實(shí)現(xiàn)
續(xù)表

CPLD和FPGA的主要廠商有Altera、Xilinx和Lattice等,采用專門的開(kāi)發(fā)流程,在設(shè)計(jì)階段使用HDL語(yǔ)言(如VHDL、Verilog HDL)編程。它們可以實(shí)現(xiàn)許多復(fù)雜的功能,如實(shí)現(xiàn)UART、I2C等I/O控制芯片、通信算法、音視頻編解碼算法等,甚至還可以直接集成ARM等CPU核和外圍電路。
對(duì)于驅(qū)動(dòng)工程師而言,我們只需要這樣看待 CPLD和FPGA:如果它完成的是特定的接口和控制功能,我們就直接把它當(dāng)成由很多邏輯門(與、非、或、D觸發(fā)器)組成的完成一系列時(shí)序邏輯和組合邏輯的ASIC;如果它完成的是CPU的功能,我們就直接把它當(dāng)成CPU。驅(qū)動(dòng)工程師眼里的硬件比IC設(shè)計(jì)師要宏觀。
2.5 原理圖分析
2.5.1 原理圖分析的內(nèi)容
原理圖分析的含義是指通過(guò)閱讀電路板的原理圖獲得各種存儲(chǔ)器、外設(shè)所使用的硬件資源,主要包括存儲(chǔ)器和外設(shè)控制芯片所使用的片選、中斷和DMA資源。通過(guò)分析片選得出芯片的內(nèi)存、I/O基地址,通過(guò)分析中斷、DMA信號(hào)獲得芯片使用的中斷號(hào)和DMA 通道,并歸納出如表2.2所示的表格。
表2.2 存儲(chǔ)器、外設(shè)控制器資源占用表

上述表格對(duì)驅(qū)動(dòng)開(kāi)發(fā)的意義很重大,實(shí)際上,在大多數(shù)情況下,硬件工程師已經(jīng)給驅(qū)動(dòng)工程師提供了這個(gè)表格。
2.5.2 原理圖的分析方法
原理圖的分析方法是以CPU為中心向存儲(chǔ)器和外設(shè)輻射,步驟如下。
(1)閱讀CPU部分,獲知CPU的哪些片選、中斷和集成的外設(shè)控制器被使用,列出這些元素a、b、c…。
CPU引腳比較多的時(shí)候,芯片可能會(huì)被分成幾個(gè)模塊單獨(dú)被畫(huà)在原理圖的不同頁(yè)上,這時(shí)候應(yīng)該把相應(yīng)的部分都分析到位。
(2)對(duì)第一步中列出的元素從原理圖中對(duì)應(yīng)的外設(shè)和存儲(chǔ)器電路中分析出實(shí)際的使用情況。
硬件原理圖中包含如下元素。
● 符號(hào)(symbol)。
symbol描述芯片的外圍引腳以及引腳的信號(hào),對(duì)于復(fù)雜的芯片,可能被分割為幾個(gè)symbol。在symbol中,一般把屬于同一個(gè)信號(hào)群的引腳排列在一起。圖2.23所示為NOR Flash AM29LV160DB和NAND Flash K9F2G08的symbol。

圖2.23 原理圖中的symbol
● 網(wǎng)絡(luò)(net)。
描述芯片、接插件和分離元器件引腳之間的互連關(guān)系,每個(gè)網(wǎng)絡(luò)需要根據(jù)信號(hào)的定義賦予一個(gè)合適的名字,如果沒(méi)有給網(wǎng)絡(luò)取名字,EDA 軟件會(huì)自動(dòng)添加一個(gè)默認(rèn)的網(wǎng)絡(luò)名。添加網(wǎng)絡(luò)后的AM29LV160DB如圖2.24所示。

圖2.24 原理圖中的net
● 描述
原理圖中會(huì)添加一些文字來(lái)輔助描述原理圖(類似源代碼中的注釋),如每頁(yè)頁(yè)腳會(huì)有該頁(yè)的功能描述,對(duì)重要的信號(hào),在原理圖的相應(yīng)symbol和net也會(huì)附帶文字說(shuō)明。圖2.25中給出了原理圖中描述的例子。
LDD6410 Evaluation Board Schematics

圖2.25 原理圖中的描述
2.6 硬件時(shí)序分析
2.6.1 時(shí)序分析的概念
驅(qū)動(dòng)工程師一般不需要分析硬件的時(shí)序,但是鑒于許多企業(yè)內(nèi)驅(qū)動(dòng)工程師還需要承擔(dān)電路板調(diào)試的任務(wù),因此,掌握時(shí)序分析的方法也就比較必要了。
對(duì)驅(qū)動(dòng)工程師或硬件工程師而言,時(shí)序分析的意思是讓芯片之間的訪問(wèn)滿足芯片手冊(cè)中時(shí)序圖信號(hào)有效的先后順序、采樣建立時(shí)間(setup time)和保持時(shí)間(hold time)的要求,在電路板工作不正常的時(shí)候,準(zhǔn)確地定位時(shí)序方面的問(wèn)題。
建立時(shí)間是指在觸發(fā)器的時(shí)鐘信號(hào)邊沿到來(lái)以前,數(shù)據(jù)已經(jīng)保持穩(wěn)定不變的時(shí)間,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘邊沿被打入觸發(fā)器;保持時(shí)間是指在觸發(fā)器的時(shí)鐘信號(hào)邊沿到來(lái)以后,數(shù)據(jù)還需穩(wěn)定不變的時(shí)間,如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。如圖2.26所示,數(shù)據(jù)穩(wěn)定傳輸必須滿足建立和保持時(shí)間的要求,當(dāng)然在一些情況下,建立時(shí)間和保持時(shí)間的值可以為零。

圖2.26 建立時(shí)間和保持時(shí)間
在工具方面,SynaptiCAD公司的Timing Diagrammer Pro是一種非常好的數(shù)字/模擬時(shí)序圖編輯器及分析引擎。
2.6.2 典型硬件時(shí)序
最典型的硬件時(shí)序是SRAM的讀寫(xiě)時(shí)序,在讀/寫(xiě)過(guò)程中涉及的信號(hào)包括地址、數(shù)據(jù)、片選、讀/寫(xiě)、字節(jié)使能和就緒/忙。對(duì)于一個(gè)16位、32位(甚至64位)的SRAM,字節(jié)使能表明哪些字節(jié)被讀寫(xiě)。
圖2.27給出了 SRAM的一個(gè)讀時(shí)序,寫(xiě)時(shí)序與此相似。首先是地址總線上輸出要讀寫(xiě)的地址,然后SRAM片選被發(fā)出,接著讀/寫(xiě)信號(hào)被輸出,之后讀寫(xiě)信號(hào)要經(jīng)歷數(shù)個(gè)等待周期。當(dāng)SRAM讀寫(xiě)速度比較慢時(shí),等待周期可以由MCU的相應(yīng)寄存器設(shè)置,也可以通過(guò)設(shè)備就緒/忙(如圖2.27中的nWait)向CPU報(bào)告,這樣,讀寫(xiě)過(guò)程中會(huì)自動(dòng)添加等待周期。

圖2.27 SRAM讀時(shí)序圖
NOR Flash和許多外設(shè)控制芯片都使用了類似SRAM的訪問(wèn)時(shí)序,因此,牢固掌握這個(gè)時(shí)序意義重大。一般,在芯片數(shù)據(jù)手冊(cè)給出的時(shí)序圖中,會(huì)給出圖中各段時(shí)間的含義和要求,真實(shí)的電路板必須滿足芯片手冊(cè)上描述的建立時(shí)間和保持時(shí)間的最小要求。
2.7 芯片手冊(cè)閱讀方法
芯片手冊(cè)往往長(zhǎng)達(dá)數(shù)百頁(yè)甚至上千頁(yè),而且全部是英文,從頭到尾不加區(qū)分地閱讀需要花費(fèi)非常長(zhǎng)的時(shí)間,而且不一定能獲取對(duì)設(shè)計(jì)設(shè)備驅(qū)動(dòng)有幫助的信息。芯片手冊(cè)的正確閱讀方法是快速而準(zhǔn)確地定位有用信息,重點(diǎn)閱讀這些信息,忽略無(wú)關(guān)內(nèi)容。下面以 S3C6410A的datasheet為例來(lái)分析閱讀方法,為了直觀地反映閱讀過(guò)程,本節(jié)的圖都直接從手冊(cè)中抓屏而得。
打開(kāi)S3C6410 A的datasheet,發(fā)現(xiàn)頁(yè)數(shù)為1378頁(yè),閱讀這樣的數(shù)據(jù)手冊(cè)所花費(fèi)的時(shí)間足夠完成整個(gè)驅(qū)動(dòng)的設(shè)計(jì)工作了。
S3C6410A datasheet的第1章“PRODUCT OVERVIEW”即“產(chǎn)品綜述”是必讀的,通過(guò)閱讀這一部分可以獲知整個(gè)芯片的組成。這一章往往會(huì)給出一個(gè)芯片的整體結(jié)構(gòu)圖,并對(duì)芯片內(nèi)的主要模塊進(jìn)行一個(gè)簡(jiǎn)潔的描述。如圖2.28所示,S3C6410A的整體結(jié)構(gòu)圖在第61頁(yè)出現(xiàn)。

圖2.28 S3C6410A datasheet中芯片結(jié)構(gòu)圖
第2~43章每一章都對(duì)應(yīng)S3C6410A整體結(jié)構(gòu)圖中的一個(gè)模塊,圖2.29為從Adobe Acrobat中直接抓出的S3C6410A datasheet目錄結(jié)構(gòu)圖。

圖2.29 S3C6410A datasheet目錄結(jié)構(gòu)
第2章“MemoryMap”即“內(nèi)存映射”比較關(guān)鍵,對(duì)于定位存儲(chǔ)器和外設(shè)所對(duì)應(yīng)的基地址有直接指導(dǎo)意義,這一部分應(yīng)該細(xì)看。
第3~34章對(duì)應(yīng)于CPU內(nèi)部集成的外設(shè)或總線控制器,當(dāng)具體編寫(xiě)某一接口的驅(qū)動(dòng)時(shí),應(yīng)該詳細(xì)閱讀,主要是要分析數(shù)據(jù)、控制、地址寄存器(datasheet 中一般會(huì)以表格列出)的訪問(wèn)控制和具體設(shè)備的操作流程(datasheet 中會(huì)給出步驟,有的還會(huì)給出流程圖)。譬如為了編寫(xiě)S3C6410A的I2C控制器驅(qū)動(dòng),我們需要詳細(xì)閱讀類似圖2.30的寄存器定義表格和圖2.31的操作流程圖。

圖2.30 芯片手冊(cè)中以表格形式列出寄存器定義
第44章“ELECTRICAL DATA”即“電氣數(shù)據(jù)”,描述芯片的電氣特性,如電壓、電流和各種工作模式下的時(shí)序及建立時(shí)間和保持時(shí)間的要求。所有的datasheet都會(huì)包含類似章節(jié),這一章對(duì)于硬件工程師比較關(guān)鍵,但是,一般來(lái)說(shuō),驅(qū)動(dòng)工程師并不需閱讀。
第45章“MECHANICAL DATA”即“機(jī)械數(shù)據(jù)”,描述芯片的物理特性、尺寸和封裝,硬件工程師會(huì)依據(jù)這一章繪制芯片的封裝(footprint),但是,驅(qū)動(dòng)工程師無(wú)需閱讀。

圖2.31 芯片手冊(cè)中給出外設(shè)控制器的操作流程
2.8 儀器儀表使用
2.8.1 萬(wàn)用表
在電路板調(diào)試過(guò)程中我們主要使用萬(wàn)用表的兩個(gè)功能。
● 測(cè)量電平。
● 使用二極管 測(cè)量電路板上網(wǎng)絡(luò)的連通性,當(dāng)示波器被設(shè)置在二極管 ,測(cè)量連通的網(wǎng)絡(luò)會(huì)發(fā)出“ ”的叫,否則,沒(méi)有連通。
2.8.2 示波器
示波器是利用電子示波管的特性,將人眼無(wú)法直接觀測(cè)的交變電信號(hào)轉(zhuǎn)換成圖像,顯示在
光屏上以便測(cè)量的電子儀器。它是觀察數(shù)字電路實(shí)驗(yàn)現(xiàn)象、分析實(shí)驗(yàn)中的問(wèn)題、測(cè)量實(shí)驗(yàn)結(jié)果必不可少的重要儀器。
使用示波器主要應(yīng)注意調(diào)節(jié)垂直偏轉(zhuǎn)因數(shù)選擇(VOLTS/DIV)和微調(diào)、時(shí)基選擇(TIME/DIV)和微調(diào)以及觸發(fā)方式。
如果VOLTS/DIV設(shè)置不合理,則可能造成電壓幅度超出整個(gè)屏幕或在屏幕上變動(dòng)太過(guò)微小無(wú)法觀測(cè)的現(xiàn)象。圖2.32所示為同一個(gè)波形在 VOLTS/DIV 設(shè)置由大到小變化過(guò)程中的示意圖。
如果TIME/DIV設(shè)置不合適,則可能造成波形混迭。混迭意味著屏幕上顯示的波形頻率低于信號(hào)的實(shí)際頻率。這時(shí)候,可以通過(guò)慢慢改變掃速TIME/DIV到較快的時(shí)基 ,如果波形的頻率參數(shù)急 改變或者 動(dòng)的波形在某個(gè)較快的時(shí)基 穩(wěn)定下來(lái),說(shuō)明之前發(fā)生了波形混迭。根據(jù)
斯特定理,采樣速率至少高于信號(hào)高頻成分的2倍才不會(huì)發(fā)生混迭,如一個(gè)500MHz的信號(hào),至少需要1GS/s的采樣速率。圖2.33所示為同一個(gè)波形在TIME/DIV設(shè)置由小到大變化過(guò)程中的示意圖。

圖2.32 示波器的VOLTS/DIV設(shè)置與波形
奈奎斯特定理即為采樣定理,指當(dāng)采樣頻率fsmax大于信號(hào)中最高頻率fmax的2倍時(shí),即fsmax≥2fmax時(shí),采樣之后的數(shù)字信號(hào)可完整地保留了原始信息。這條定理在信號(hào)處理領(lǐng)域的地位相當(dāng)之高,大致相當(dāng)于物理學(xué)領(lǐng)域的牛頓定律。
示波器的觸發(fā)能使信號(hào)在正確的位置點(diǎn)同步水平掃描,使信號(hào)特性清晰。觸發(fā)控制按鈕可以穩(wěn)定重復(fù)的波形并捕獲單次波形。大多數(shù)用示波器的用戶只采用邊沿觸發(fā)方式,如果擁有其他觸發(fā)能力在某些應(yīng)用上是非常有用的,特別是對(duì)新設(shè)計(jì)產(chǎn)品的故障查詢,先進(jìn)的觸發(fā)方式可將所關(guān)心的事件分離出來(lái),找出用戶關(guān)心的非正常問(wèn)題,從而最有效地利用采樣速率和存儲(chǔ)深度。觸發(fā)能力的提高可以較大提高測(cè)試過(guò)程的靈活性。

圖2.33 示波器的TIME/DIV設(shè)置與波形
2.8.3 邏輯分析儀
邏輯分析儀是利用時(shí)鐘從測(cè)試設(shè)備上采集數(shù)字信號(hào)并進(jìn)行顯示的儀器,其最主要的作用是用于時(shí)序的判定。與示波器不同,邏輯分析儀并不具備許多電壓等級(jí),通常只顯示兩個(gè)電壓(邏輯1和0)。在設(shè)定了參考電壓之后,邏輯分析儀對(duì)待測(cè)試信號(hào)通過(guò)比較器來(lái)進(jìn)行判定,高于參考電壓者為High,低于參考電壓者為L(zhǎng)ow。
例如,如果以n MHz采樣率測(cè)量一個(gè)信號(hào),邏輯分析儀會(huì)以1000/n ns為周期采樣信號(hào),當(dāng)參考電壓設(shè)定為1.5V時(shí),超過(guò)1.5V則判定為1,低于1.5V則為0,將邏輯1和0連接成連續(xù)的波形,工程師依據(jù)此連續(xù)波形可尋找時(shí)序問(wèn)題。
高端的邏輯分析儀會(huì)安裝有Windows XP操作系統(tǒng)并提供非常友善的邏輯分析應(yīng)用軟件,在其中可方便地編輯探針、信號(hào)并察看波形,如圖2.34所示。
邏輯分析儀的波形可以顯示地址、數(shù)據(jù)、控制信號(hào)及任意外部探 信號(hào)的變化軌 ,在使用之前應(yīng)先編輯每個(gè)探鉤的信號(hào)名。

圖2.34 邏輯分析儀及配套軟件
邏輯分析儀具有超強(qiáng)的邏輯跟蹤分析功能,它可以捕獲并記錄嵌入式處理器的總線周期,也可以捕獲如實(shí)時(shí)跟蹤用的ETM 接口的程序執(zhí)行信息,并對(duì)這些記錄進(jìn)行分析、譯碼并還原出應(yīng)用程序的執(zhí)行過(guò)程。因此,可使用邏輯分析儀通過(guò)觸發(fā)接口與ICD(在線調(diào)試器)協(xié)調(diào)工作以補(bǔ)充ICD在跟蹤功能方面的不足。邏輯分析儀與ICD協(xié)作可為工程師提供斷點(diǎn)、觸發(fā)和跟蹤調(diào)試手段,如圖2.35所示。
ICD是一個(gè)容易與ICE(在線仿真器)混淆的概念,ICE本身需要完全仿真CPU的行為,可以從物理上完全替代CPU,而ICD則只是與芯片內(nèi)部提供的嵌入式ICE單元通過(guò)JTAG等接口互通。因此,對(duì)ICD的硬件性能要求遠(yuǎn)低于ICE。目前市面上出現(xiàn)的很多號(hào)稱為ICE的產(chǎn)品實(shí)際上是ICD,如ARM公司的Multi-ICE、WindRiver公司的visionICE和visionProbe等。

圖2.35 邏輯分析儀與ICD協(xié)作
2.9 總結(jié)
本章簡(jiǎn)單地講解了驅(qū)動(dòng)軟件工程師必備的硬件基礎(chǔ)知識(shí),描述了處理器、存儲(chǔ)器的分類以及各種處理器、存儲(chǔ)器的原理與用途,并分析了常見(jiàn)的外圍設(shè)備接口與總線的工作方式。
此外,本章還講述了對(duì)驅(qū)動(dòng)工程師進(jìn)行實(shí)際項(xiàng)目開(kāi)發(fā)有幫助作用的原理圖、硬件時(shí)序分析方法,數(shù)據(jù)手冊(cè)閱讀方法以及萬(wàn)用表、示波器和邏輯分析儀的使用方法。
- Arch Linux Environment Setup How-to
- Windows Server 2012 Hyper-V Cookbook
- Mastering KVM Virtualization
- Moodle 3.x Teaching Techniques(Third Edition)
- Ceph分布式存儲(chǔ)實(shí)戰(zhàn)
- 計(jì)算機(jī)系統(tǒng):基于x86+Linux平臺(tái)
- 跟老男孩學(xué)Linux運(yùn)維:Shell編程實(shí)戰(zhàn)
- 分布式系統(tǒng)設(shè)計(jì)實(shí)踐
- Linux內(nèi)核分析及應(yīng)用
- Implementing Domain-Specific Languages with Xtext and Xtend(Second Edition)
- 辦公自動(dòng)化教程(Windows7+Office2010)
- Hadoop Operations and Cluster Management Cookbook
- Responsive Web Design with AngularJS
- 電腦辦公(Windows 7 + Office 2013)入門與提高
- 深入理解Android:卷III