驅動設計的硬件基礎

本篇內容講述底層驅動工程師必備的硬件基礎,給出了嵌入式系統硬件原理及分析方法的一個完整而簡潔的全景視圖。

第一節描述了微控制器、微處理器、數字信號處理器以及應用於特定領域的處理器各自的特點,分析了處理器的體系結構和指令集。

第二節對嵌入系統中使用的各類存儲器與CPU的接口、應用領域及特點進行了歸納整理。

第三節分析了常見的外設接口與總線的工作方式,包括串口、I2C、SPI、USB、以太網接口、PCI和PCI-E、SD和SDIO等。

嵌入式系統硬件電路中經常會使用CPLD和FPGA,作爲驅動工程師,我們不需要掌握CPLD和FPGA的開發方法,但是需要知道他們在電路中能夠完成什麼工作,第四節講述了這項內容。

第五-七節給出了在實際項目開發過程中硬件分析的方法,包括如何進行原理圖分析、實現分析、及如何快速地從芯片數據手冊中獲取有效的信息。

第八節講解了調試過程中常用儀器儀表的使用方法,涉及萬用表、示波器和邏輯分析儀(LA)。

2 處理器

2.1 通用處理器

目前主流的通用處理器(GPP)多采用SoC(片上系統)的芯片涉及方法,集成了各種功能模塊,每一種功能都是由硬件描述語言設計程序,然後再SoC內有電路實現。在SoC中,每一個模塊不是一個已經設計成熟的SoC器件,而是利用芯片的一部分資源去實現某種傳統的功能,講各種組件採用類似搭積木的方式組合在一起。

ARM內核的設計技術被授權給數百家半導體廠商,做成不同的SoC芯片。 ARM的功耗很低,在當今最活躍的無限局域網、3G、手機終端、手持設備、優先網絡通訊設備等應用非常廣泛。 目前市面上大部分智能手機、平板電腦都適用ARM SoC作爲主控芯片。很多ARM主控芯片的集成度非常高,除了集成多核ARM以外,還可能集成圖像處理器、視屏編解碼器、浮點協處理器、GPS、WiFi、藍牙、基帶、Camera等一系列功能。比如,高通的Snapdragon810就集成各種模塊

主流的ARM移動處理芯片供應商包括 高通(Qualcomm)、三星(Samsung)、英偉達(Nvidia)、美滿(Marvell)、聯發科(MTK)、海思(Hisilicon)、展訊(Spreadtrum)等。 德州儀器(TI)、博通(Broadcom)則已經退出手機芯片業務。

中央處理器的體系結構可以分爲兩類,一類爲馮-諾依曼結構, 另一類是哈佛結構。 Intel公司的中央處理器、ARM的ARM7、MIPS公司的MIPS處理器採用了馮-諾依曼結構;而AVR、ARM9、ARM10、ARM11以及CortexA系列等則採用了哈佛結構。

馮-諾依曼結構也稱普林斯頓結構,是一種講程序指令存儲器和數據存儲器合併在一起的存儲器結構。程序指令存儲結構和數據存儲地址指向同一個存儲器的不同物理位置, 因此程序指令和數據的寬度相同。 而哈佛結構將程序指令和數據分開存儲,指令和數據可以有不同的數據寬度。 此外,哈佛結構還採用了獨立的程序總線和數據總線,分別作爲CPU與每個存儲器之間的專用通信路徑,具有較高的執行效率。下圖描述了馮-諾依曼結構和哈佛結構的區別。

許多芯片採用的是如下圖的改進的哈佛架構, 它具有獨立的地址總線和數據總線,兩條總線由程序存儲器和數據存儲器分時共用。因此,改進的哈佛結構針對程序和數據,其實沒有獨立的總線,而是使用公用的數據總線來完成程序存儲模塊或者數據存儲模塊與CPU之間的數據傳輸,公用的地址總線來尋找程序和數據。

從指令集的角度來講,中央處理器也可以分爲兩類,即RISC(精簡指令集計算機)和CISC(複製指令集計算機)。CSIC強調增強指令的能力、減少目標代碼的數量,但是指令複雜,指令週期長;而RISC強調儘量減少指令集、指令單週期執行,但是目標代碼會更大。ARM、MIPS、PowerPC等CPU內核都採用了RISC指令集。目前,RISC和CSIC兩者的融合非常明顯。

1.2 數字信號處理器

數字信號處理器(DSP)針對通信、圖像、語音和視頻處理等領域的算法而設計。它包含獨立的硬件乘法器。DSP的乘法指令一般在單週期內完成,且優化了卷積、數字濾波、FFT(快速傅里葉變換)、相關矩陣運算等算法中的大量重複乘法。

DSP分爲兩類,一類是定點DSP,另一類是浮點DSP。浮點DSP的浮點運算用硬件來實現,可以在單週期內完成,因而啓浮點運算處理速度高於定點DSP。而定點DSP只能用定點運算模擬浮點運算。

德州儀器(TI)、美國模擬器件公司(ADI)是全球DSP的兩大主要廠商。

TI的TMS320 DSP平臺包含了功能不同的多個系列,如2000系列、3000系列、4000系列、5000系列、6000系列。2010年5月,TI已經宣佈未其C64x系列數字信號處理器與多核片上系統提供Linux內核支持, 以充分滿足通信與關鍵任務基礎設施、醫療診斷以及高性能測量測試等應用需求。TI也推出了軟件可編程多核ARM+DSP SoC,即KeyStone多核ARM+DSP處理器,以滿足醫療成像應用、任務關鍵應用、測試和自動化應用的需求。

ADI主要由16位定點的21xx系列、32位浮點的SHARC系列、從SHARC系列發展而來的TigerSHARC系列,以及高性能16位DSP信號處理能力與通用微控制器方便性相結合的blackfin系列等。ADI的blackfin不含MMU,完整支持Linux,是沒有MMU情況下Linux的典型案例, 其官方網站爲http://blackfin.uclinux.org,目前blackfin的Linux開發保持了與Linux mainline的同步。

通用處理器和數字信號處理器也有互相融合以取長補短的趨勢,如屬數字信號控制器(DSC)即爲MCU+DSP,ADI的blackfin系列就屬於DSC。 目前,芯片廠商也推出了許多ARM+DSP的雙核以及多核處理器,如TI公司的OMAP4平臺就包括4個主要處理引擎:ARM Cortex-A9 MPcore、PowerVR SGX 540 GPU(Graphic Processing Unit)、C64x DSP和ISP(Image Signal Processor)。

除了上面講述的通用微控制器和數字信號處理器外, 還有一些針對特定領域而設計的專用處理器(ASP), 它們都是針對一些特定應用而設計的, 如用於HDTV、ADSL、Cable Modem等專用處理器。

網絡處理器的部分    略。

對於某些應用場合,使用ASIC(專用集成電路)往往是低成本且高性能的方案。ASIC專門針對特定應用而設計, 不具備也不需要靈活的編程能力。使用ASIC完成同樣的功能往往比直接使用CPU資源或者CPLD(複雜可編程邏輯器件)/FPGA(現場可編程門陣列)來得更廉價且高效。

在實際項目的硬件方案中,往往會根據應用的需求選擇通用處理器、數字信號處理器、特定領域處理器、CPLD/FPGA或ASIC之一的解決方案,在複雜的系統中,這些芯片可能會同時存在,協同合作,各自發揮自己的長處。如在一款智能手機中,可使用MCU處理圖形用戶界面和用的按鍵輸入並運行多任務操作系統,使用DSP進行音視頻編解碼,而在射頻方面則採用ASIC。

下圖是處理器分類

2 存儲器

存儲器主要可分類爲只讀存儲器(ROM)、閃存(Flash)、隨機存取存儲器(RAM)、光/磁介質存儲器。

ROM還可以再細分爲不可編程ROM、可編程ROM(PROM)、可擦除可編程ROM(EPROM)和電可擦除可編程ROM(EEPROM),EEPROM完全可以用軟件來擦寫,已經非常方便了。

NOR(或非)和NAND(與非)是市場上兩種主要的Flash閃存技術。Intel於1988年首先開發出NOR Flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接着,1989年,東芝公司發表了NAND Flash結構,每位的成本被大大降低。

NOR Flash和CPU的接口屬於典型的類SRAM接口(下圖),不需要增加額外的控制電路。 NOR Flash的特點是芯片內執行(eXecute In Place, XIP), 程序可以直接在NOR內運行。而NAND Flash和CPU的接口必須由相應的控制電路進行轉換,當然也可以通過地址線或GPIO產生NAND Flash接口的信號。 NAND Flash以塊方式進行訪問,不支持芯片內運行。

公共閃存接口(Common Flash Interface, CFI)是一個從NOR Flash器件中讀取數據的公開、標準接口。它可以使系統軟件查詢已經安裝的Flash器件的各種參數,包括器件陣列結構參數、電氣和時間參數以及器件支持的功能等。 如果芯片不支持CFI, 就需要使用JEDEC(Joint Electron Device Engineering Council, 電子電氣設備聯合會)了。JEDEC規範的NOR則無法直接通過命令來讀取容量等信息, 需要讀出製造商ID和設備ID,以確定Flash的大小。

與NOR Flash的類SRAM接口不同, 一個NAND Flash的接口主要包含如下信號。

  • I/O總線:地址、指令和數據通過這組總線傳輸,一般爲8位或16位
  • 芯片使能(Chip Enable,CE#):如果沒有檢測到CE信號, NAND器件就保持待機模式,不對任何控制信號做出響應。
  • 寫使能(Write Enable,WE#):WE#負責將數據、地址或者指令寫入NAND 之中。
  • 讀使能(Read Enable,RE#):RE#運行數據輸出。
  • 指令鎖存使能(Command Latch Enable, CLE):當CLE爲高電平時,在WE#信號的上升沿,指令將被鎖存到NAND指令寄存器中。
  • 地址鎖存使能(Address Latch Enable, ALE):當ALE爲高電平時,在WE#信號的上升沿,地址將被所存到NAND指令寄存器中。
  • 就緒/忙(Ready/Busy,R/B#):如果NAND器件忙, R/B#信號將變爲低電平。該信號是漏極開路,需要採用上來電阻。

NAND Flash較NOR Flash容量大,價格低;NAND Flash中每個塊的最大擦寫次數是100萬次,而NOR的擦寫次數是10萬次;NAND Flash的擦除、編程速度遠超過NOR Flash。

由於Flash固有的電氣特性, 在讀寫數據過程中,偶爾會產生1位或者幾位數據錯誤, 即位反轉, NAND Flash發生位反轉的概率要遠大於NOR Flash。位反轉無法避免,因此,使用NAND Flash的同時,應該採用錯誤偵測/錯誤更正(EDC/ECC)算法。

Flash的編程原理都是隻能將1寫爲0,而不能將0寫爲1。因此在Flash編程之前,必須將對應的塊擦除, 而擦除的過程就是把所有位都寫爲1的過程, 塊內所有字節變爲0xFF。 另外,Flash還存在一個負載均衡的問題, 不能老是在同一塊位置進行擦除和寫的動作,這樣容易導致壞塊。

值得一提的是, 目前NOR Flash可以使用SPI接口進行訪問以節省引腳。相對於傳統的並行NOR Flash 而言, SPI NOR Flash只需要6個引腳就能實現單I/O、算I/O和4個I/O口的接口通信,有的SPI NOR Flash還支持DDR模式,能進一步提供訪問速度到80MB/s。

IDE(Integrated Drive Electronics)接口可以連接硬盤控制器或者光驅,IDE接口的信號與SRAM類似。人們通常也把IDE接口稱爲ATA(Advanced Technology Attachment)接口,不過,從技術角度而言, 這個並不準確。 其實,ATA接口發展至今,已經經歷了ATA-1(IDE)、ATA-2(Enhanced IDE/Fast ATA,EIDE)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100以及Serial ATA(SATA)的發展過程。

很多SoC集成了一個eFuse電編程熔絲作爲OTP(One-Time Programable, 一次性可編程)存儲器。eFuse可以通過計算機對芯片內部的參數和功能進行配置,這一般是芯片出廠的時候已經設置好了。

以上所述的各種ROM、Flash和磁介質存儲器都屬於非易失性存儲器(NVM)的範疇, 掉電是信息不會丟失,而RAM則與此相反。

RAM也可以再分爲靜態RAM(SRAM)和動態RAM(DRAM)。DRAM以電荷形式進行存儲, 數據存儲在電容器中。 由於電容器會因爲漏電而出現電荷丟失, 所以DRAM器件需要定期刷新。 SRAM是靜態的,只要供電它就會保持一個值,SRAM沒有刷新週期。每個SRAM存儲單元有6個晶體管組成,而DRAM存儲單元由1個晶體管和1個電容器組成。

通常所說的SDRAM、DDR SDRAm皆屬於DRAM的範疇,它們採用和CPU外部存儲控制器同步的時鐘工作(注意,不是與CPU的工作評率一致)。與SDRAM相比,DDR SDRAM同時利用了時鐘脈衝的上升沿和下降沿傳輸數據,因此在時鐘評率不變的情況下,數據傳輸評率加倍。 此外,還存在使用RSL(Rambus Signaling Level, Rambus發信電平)技術的RDRAM(Rambus DRAM)和Direct RDRAM。

針對許多特定場合的應用,嵌入式系統中往往還使用了一些特定類似的RAM。

1. DPRAM:雙端口RAM

DPRAM的特點是可以通過兩個端口同時訪問, 具有兩套完全獨立的數據總線、地址總線和讀寫控制線,通常用於兩個處理器之間交互數據。當一端被寫入數據後,另一端可以通過輪詢或者中斷方式獲知,並讀取其寫入的數據。由於雙CPU同時訪問DPRAM時的仲裁邏輯電路集成在DPRAM內部, 所以需要硬件工程師設計的電路原理比較簡單。

DPRAM的有點是通信速度快、實時性強、接口簡單,而且兩邊處理器都可以主動進行數據傳輸。除了雙端口RAM以外,目前IDT等芯片廠商還推出了多端口RAM,可以供3個以上的處理器互通數據。

2. CAM:內容尋址RAM

CAM是以內容進行尋址的存儲器,是一種特殊的存儲陣列RAM, 它的主要工作機制就是同事將一個輸入數據項與存儲在CAM中的所有數據項自動進行比較, 判斷該輸入數據項與CAM中存儲的數據項是否相互匹配,並輸出給數據項對應的匹配信息。

在CAM中,輸入的是所要查詢的數據,輸出的是數據地址和匹配標誌。若匹配(即搜尋到數據),則輸出數據地址。CAM用於數據檢索的優勢是軟件無法比擬的,它可以極高地提供系統性能。

3. FIFO:先進先出隊列

FIFO存儲器的特點是先進先出,進出有序,FIFO多用於數據緩衝。FIFO和DPRAM類似,具有2個訪問端口,但是FIFO兩邊的端口並不對等,某一時刻只能設置一邊爲輸入,一邊爲輸出。

如果FIFO的區域共有n個字節,我們只能通過循環n次讀取同一個地址才能將該片區域讀出,不能指定偏移地址。對於有n個數據的FIFO,當循環讀m次之後,下一次讀取時會自動讀取到第m+1個數據,這是由FIFO本身的特性決定的。

總結第二節的內容,可以知道存儲器的分類

3 接口與總線

3.1 串口

RS-232、RS-422與RS-485 都是串行數據接口標準,最初都是由電子工業協會(EIA)制定併發布的。

RS-232 是一種單機發送、多機接收的單向、平衡傳輸規範

RS-422 改進了RS-232 通信距離短、速率低的缺點。

RS-485 增加了多點、雙向通信能力,即允許多個發送器連接到同一條總線上,同時增加了發送器的驅動能力和衝突保護特性,並擴展了總線共模範圍

1969年的RS-232C 是嵌入系統中應用最廣泛的串行接口,它爲連接DTE(數據終端設備)與DCE(數據通信設備)而制定。RS-232C標準接口有25條線(4條數據線、11條控制線、3條定時線、7條備用和未定義線), 常用的只有9根,

  • RTS:表示DTE請求DCE發送數據,當終端要發送數據時,使該信號有效
  • CTS:表示DCE準備好要接收DTE發來的數據,是對RTS的響應信號。
  • RxD:DTE通過RxD接收從DCE發來的串行數據。
  • TxD:DTE通過TxD將串行數據發送到DCE。
  • DSR:有效(ON狀態)表明DCE可以使用
  • DTS:有效(ON狀態)表明DTE可以使用
  • DCE:當本地DCE設備收到對方DCE設備送來的載波信號時,是DCD有效, 通知DTE準備接收,並且由DCE將接收到的載波信號解調爲數字信號,經RxD線送給DTE。
  • Ringing-RI:當調制解調器收到交換臺送來的振鈴呼叫信號時,使該信號有效(ON狀態),通知終端,已被呼叫。

最簡單的RS-232C串口只需要連接RxD、TxD、SG這3個信號,並使用XON/XOFF軟件流控。

3.2 I2C

I2C(內置集成電路)總線是由Philips 公司開發的兩線式串行總線,產生於20 世紀80 年代,用於連接微控制器及其外圍設備。I2C 總線簡單而有效,佔用的PCB(印製電路板)空間很小,芯片引腳數量少,設計成本低。I2C 總線支持多主控(Multi-Mastering)模式,任何能夠進行發送和接收的設備都可以成爲主設備。主控能夠控制數據的傳輸和時鐘頻率,在任意時刻只能有一個主控。

組成I2C 總線的兩個信號爲數據線SDA 和時鐘SCL。爲了避免總線信號的混亂,要求各設備連接到總線的輸出端必須是開漏輸出或集電極開路輸出的結構。總線空閒時,上拉電阻使SDA 和SCL 線都保持高電平。根據開漏輸出或集電極開路輸出信號的“線與”邏輯,I2C總線上任意器件輸出低電平都會使相應總線上的信號線變低。

I2C 設備上的串行數據線SDA接口電路是雙向的, 輸出電路用於向總線上發送數據, 輸入電路用於接收總線上的數據。同樣地,串行時鐘線SCL也是雙向的,作爲控制總線數據傳送的主機要通過SCL輸出電路發送時鐘信號,並檢測總線上SCL的電平以決定什麼時候發下一個時鐘脈衝電平;作爲接收主機命令的從設備需要按總線上SCL的信號發送或接收SDA上的信號,它可以向SCL線發出低電平信號以延長總線時鐘信號週期。

當SCL穩定再高電平時,SDA由高到低的變化將產生一個開始位,而由低到高的變化則產生一個停止位,

開始位和停止都由I2C主設備產生。在選擇從設備時,如果從設備採用7位地址,則主設備在發起傳輸過程前,需要先發送1字節的地址信息,前7位爲設備地址,最後1位爲讀寫標誌。之後,每次傳輸的數據也是1字節,從MSB開始傳輸。每個字節傳完後,在SCL的第9個上升沿到來之前,接收方應該發出1個ACK位。SCL上的時鐘脈衝由I2C主控方發出,在第8個時鐘週期後,主控方應該釋放SDA,I2C總線的時序

3.3 SPI

SPI(Serial Peripheral Interface,串行外設接口)總線系統是一種同步串行外設接口,它可以使CPU與各種外圍設備以串行方式進行通信以交換信息。一般主控SoC作爲SPI的“主(Master)”,而外設作爲SPI的“從(Slave)”。

SPI接口一般使用4條線:串行時鐘線(SCLK)、主機輸出/從機輸入數據線(MOSI)、主機輸入/從機輸出數據線(MISO)和低電平有效的從機選擇線(SS,在不同的文件裏,也常稱爲nCS、CS、CSB、CSN、nSS等等)。

在SPI總線的傳輸中,SS信號是低電平有效的,當我們要與某種外設通信時,需要將該外設的SS信號拉低。此外,特別要注意SPI從設備支持的SPI總線最高的時鐘頻率(決定了SCK的頻率)以及外設的CPHA、CPOL模式,這決定了數據和時鐘之間的偏移、採樣的時刻以及觸發的邊沿是上升沿還是下降沿。

SPI模塊爲了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性(CPOL)和相位(CPHA)可以進行配置。如果CPOL=0,串行同步時鐘的空閒狀態未低電平;如果CPOL=1,串行同步時鐘的空閒狀態爲高電平。如果CPHA=0,在串行同步時鐘的第一個跳邊沿(上升或下降)數據被採樣;如果CPHA=1,在串行同步時鐘的第二個跳邊沿(上升或下降)數據被採樣。

3.4 USB

USB 1.1 包含全速和低速兩種模式,低速方式的速率爲1.5Mbit/s,支持一些不需要很大數據吞吐量和很高實時性的設備,如鼠標等。全速模式爲12Mbit/s,可以外接速率更高的外設。

USB 2.0 中,增加了一種高速方式,數據傳輸率達到480Mbit/s,半雙工,可以滿足更高速外設的需要。

USB 3.0(也被認爲是Super Speed USB)的最大傳輸帶寬高達5.0Gbit/s(即640MB/s),全雙工。

USB 2.0 總線的機械連接非常簡單,採用4 芯的屏蔽線,一對差分線(D+、D-)傳送信號,另一對(VBUS、電源地)傳送+5V 的直流電。USB 3.0 線纜則設計了8 條內部線路,除VBUS、電源地之外,其餘3 對均爲數據傳輸線路。其中保留了D+ 與D- 這兩條兼容USB2.0 的線路,新增了SSRX 與SSTX 專爲USB 3.0 所設的線路。

在嵌入式系統中,電路板若需要掛接USB 設備,則需提供USB 主機(Host)控制器和連接器;若電路板需要作爲USB 設備,則需提供USB 設備適配器和連接器。目前,大多數SoC 集成了USB 主機控制器(以連接USB 外設)和設備適配器(以將本嵌入式系統作爲其他計算機系統的USB 外設,如手機充當U 盤)。

(略,後續補充)

3.5 SD和SDIO

SD(Secure Digital)是一種關於Flash 存儲卡的標準,也就是一般常見的SD 記憶卡,在設計上與MMC(Multi-Media Card)保持了兼容。SDHC(SD High Capacity)是大容量SD 卡,支持的最大容量爲32GB。2009 年發佈的SDXC(SD eXtended Capacity)則支持最大2TB 大小的容量。

SDIO(Secure Digital Input and Output Card,安全數字輸入輸出卡)在SD 標準的基礎上,定義了除存儲卡以外的外設接口。SDIO 主要有兩類應用——可移動和不可移動。不可移動設備遵循相同的電氣標準,但不要求符合物理標準。現在已經有非常多的手機或者手持裝置都支持SDIO 的功能,以連接WiFi、藍牙、GPS 等模塊。

一般情況下,芯片內部集成的SD 控制器同時支持MMC、SD 卡,又支持SDIO 卡,但是SD 和SDIO 的協議還是有不一樣的地方,支持的命令也會有不同。

SD/SDIO 的傳輸模式有:

 ● SPI 模式
        ● 1 位模式
        ● 4 位模式

下圖顯示了SDIO 接口的引腳定義。其中CLK 爲時鐘引腳,每個時鐘週期傳輸一個命令或數據位;CMD 是命令引腳,命令在CMD 線上串行傳輸,是雙向半雙工的(命令從主機到從卡,而命令的響應是從卡發送到主機);DAT[0]~DAT[3] 爲數據線引腳;在SPI 模式中,第8 腳位被當成中斷信號。圖2.18 給出了一個SDIO 單模塊讀、寫的典型時序。

eMMC(Embedded Multi Media Card)是當前移動設備本地存儲的主流解決方案,目的在於簡化手機存儲器的設計。eMMC 就是NAND Flash、閃存控制芯片和標準接口封裝的集合,它把NAND 和控制芯片直接封裝在一起成爲一個多芯片封裝(Multi-Chip Package,MCP)芯片。eMMC 支持DAT[0]~DAT[7] 8 位的數據線。上電或者復位後,默認處於1 位模式,只使
用DAT[0],後續可以配置爲4 位或者8 位模式。

 

輔助知識

奈奎斯特定理即爲採樣定理,指當採樣頻率fsmax 大於信號中最高頻率fmax 的兩倍時,即fsmax ≥ 2fmax 時,採樣之後的數字信號可完整地保留原始信息。這條定理在信號處理領域中的地位相當高,大致相當於物理學領域中的牛頓定律。

 

發佈了9 篇原創文章 · 獲贊 0 · 訪問量 975
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章