《Linux设备驱动开发详解 A》一一2.3 接口与总线
本節書摘來華章計算機出版社《Linux設備驅動開發詳解 A》一書中的第2章,第2.3節,作者:宋寶華 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。1
2.3 接口與總線
2.3.1 串口
RS-232、RS-422與RS-485都是串行數據接口標準,最初都是由電子工業協會(EIA)制訂并發布的。
RS-232在1962年發布,命名為EIA-232-E。之后發布的RS-422定義了一種平衡通信接口,它是一種單機發送、多機接收的單向、平衡傳輸規范,被命名為TIA/EIA-422-A標準。RS-422改進了RS-232通信距離短、速率低的缺點。為進一步擴展應用范圍,EIA又于1983年在RS-422的基礎上制定了RS-485標準,增加了多點、雙向通信能力,即允許多個發送器連接到同一條總線上,同時增加了發送器的驅動能力和沖突保護特性,并擴展了總線共模范圍,被命名為TIA/EIA-485-A標準。
1969年發布的RS-232修改版RS-232C是嵌入式系統中應用最廣泛的串行接口,它為連接DTE(數據終端設備)與DCE(數據通信設備)而制定。RS-232C標準接口有25條線(4條數據線、11條控制線、3條定時線、7條備用和未定義線),常用的只有9根,它們是RTS/CTS(請求發送/清除發送流控制)、RxD/TxD(數據收發)、DSR/DTR(數據終端就緒/數據設置就緒流控制)、DCD(數據載波檢測,也稱RLSD,即接收線信號檢出)、Ringing-RI(振鈴指示)、SG(信號地)信號。RTS/CTS、RxD / TxD、DSR/DTR等信號的定義如下。
RTS:用來表示DTE請求DCE發送數據,當終端要發送數據時,使該信號有效。
CTS:用來表示DCE準備好接收DTE發來的數據,是對RTS的響應信號。
RxD:DTE通過RxD接收從DCE發來的串行數據。
TxD:DTE通過TxD將串行數據發送到DCE。
DSR:有效(ON狀態)表明DCE可以使用。
DTR:有效(ON狀態)表明DTE可以使用。
DCD:當本地DCE設備收到對方DCE設備送來的載波信號時,使DCD有效,通知DTE準備接收,并且由DCE將接收到的載波信號解調為數字信號,經RxD線送給DTE。
Ringing-RI:當調制解調器收到交換臺送來的振鈴呼叫信號時,使該信號有效(ON狀態),通知終端,已被呼叫。
最簡單的RS-232C串口只需要連接RxD、TxD、SG這3個信號,并使用XON/XOFF軟件流控。
組成一個RS-232C串口的硬件原理如圖2.9所示,從CPU到連接器依次為CPU、UART(通用異步接收器發送器,作用是完成并/串轉換)、CMOS/TTL電平與RS-232C電平轉換、DB9/DB25或自定義連接器。
圖2.9 RS-232C串口電路原理
2.3.2 I2C
I2C(內置集成電路)總線是由Philips公司開發的兩線式串行總線,產生于20世紀80年代,用于連接微控制器及其外圍設備。I2C總線簡單而有效,占用的PCB(印制電路板)空間很小,芯片引腳數量少,設計成本低。I2C總線支持多主控(Multi-Mastering)模式,任何能夠進行發送和接收的設備都可以成為主設備。主控能夠控制數據的傳輸和時鐘頻率,在任意時刻只能有一個主控。
組成I2C總線的兩個信號為數據線SDA和時鐘SCL。為了避免總線信號的混亂,要求各設備連接到總線的輸出端必須是開漏輸出或集電極開路輸出的結構??偩€空閑時,上拉電阻使SDA和SCL線都保持高電平。根據開漏輸出或集電極開路輸出信號的“線與”邏輯,I2C總線上任意器件輸出低電平都會使相應總線上的信號線變低。
“線與”邏輯指的是兩個或兩個以上的輸出直接互連就可以實現“與”的邏輯功能,只有輸出端是開漏(對于CMOS器件)輸出或集電極開路(對于TTL器件)輸出時才滿足此條件。工程師一般以“OC門”簡稱開漏或集電極開路。
I2C設備上的串行數據線SDA接口電路是雙向的,輸出電路用于向總線上發送數據,輸入電路用于接收總線上的數據。同樣地,串行時鐘線SCL也是雙向的,作為控制總線數據傳送的主機要通過SCL輸出電路發送時鐘信號,并檢測總線上SCL上的電平以決定什么時候發下一個時鐘脈沖電平;作為接收主機命令的從設備需按總線上SCL的信號發送或接收SDA上的信號,它也可以向SCL線發出低電平信號以延長總線時鐘信號周期。
當SCL穩定在高電平時,SDA由高到低的變化將產生一個開始位,而由低到高的變化則產生一個停止位,如圖2.10所示。
開始位和停止位都由I2C主設備產生。在選擇從設備時,如果從設備采用7位地址,則主設備在發起傳輸過程前,需先發送1字節的地址信息,前7位為設備地址,最后1位為讀寫標志。之后,每次傳輸的數據也是1字節,從MSB開始傳輸。每個字節傳完后,在SCL的第9個上升沿到來之前,接收方應該發出1個ACK位。SCL上的時鐘脈沖由I2C主控方發出,在第8個時鐘周期之后,主控方應該釋放SDA,I2C總線的時序如圖2.11所示。
2.3.3 SPI
SPI(Serial Peripheral Interface,串行外設接口)總線系統是一種同步串行外設接口,它可以使CPU與各種外圍設備以串行方式進行通信以交換信息。一般主控SoC作為SPI的“主”,而外設作為SPI的“從”。
SPI接口一般使用4條線:串行時鐘線(SCLK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOSI和低電平有效的從機選擇線SS(在不同的文獻里,也常稱為nCS、CS、CSB、CSN、nSS、STE、SYNC等)。
圖2.12演示了1個主機連接3個SPI外設的硬件連接圖。
如圖2.13所示,在SPI總線的傳輸中,SS信號是低電平有效的,當我們要與某外設通信的時候,需要將該外設上的SS線置低。此外,特別要注意SPI從設備支持的SPI總線最高時鐘頻率(決定了SCK的頻率)以及外設的CPHA、CPOL模式,這決定了數據與時鐘之間的偏移、采樣的時刻以及觸發的邊沿是上升沿還是下降沿。
圖2.13 SPI總線的時序
SPI模塊為了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性(CPOL)和相位(CPHA)可以進行配置。如果CPOL=?0,串行同步時鐘的空閑狀態為低電平;如果CPOL=?1,串行同步時鐘的空閑狀態為高電平。如果CPHA=?0,在串行同步時鐘的第一個跳變沿(上升或下降)數據被采樣;如果CPHA?=?1,在串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣。
2.3.4 USB
USB(通用串行總線)是Intel、Microsoft等廠商為解決計算機外設種類的日益增加與有限的主板插槽和端口之間的矛盾而于1995年提出的,它具有數據傳輸率高、易擴展、支持即插即用和熱插拔的優點,目前已得到廣泛應用。
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-這兩條兼容USB 2.0的線路,新增了SSRX與SSTX專為USB 3.0所設的線路。
在嵌入式系統中,電路板若需要掛接USB設備,則需提供USB主機(Host)控制器和連接器;若電路板需要作為USB設備,則需提供USB設備適配器和連接器。目前,大多數SoC集成了USB主機控制器(以連接USB外設)和設備適配器(以將本嵌入式系統作為其他計算機系統的USB外設,如手機充當U盤)。由USB主機、設備和Hub組成的USB系統的物理拓撲結構如圖2.14所示。
圖2.14 USB的物理拓撲結構
每一個USB設備會有一個或者多個邏輯連接點在里面,每個連接點叫端點。USB提供了多種傳輸方式以適應各種設備的需要,一個端點可以選擇如下一種傳輸方式。
1.?控制(Control)傳輸方式
控制傳輸是雙向傳輸,數據量通常較小,主要用來進行查詢、配置和給USB設備發送通用命令。所有USB設備必須支持標準請求(Standard Request),控制傳輸方式和端點0。
2.?同步(Isochronous)傳輸方式
同步傳輸提供了確定的帶寬和間隔時間,它用于時間要求嚴格并具有較強容錯性的流數據傳輸,或者用于要求恒定數據傳送率的即時應用。例如進行語音業務傳輸時,使用同步傳輸方式是很好的選擇。同步傳輸也常稱為“Streaming Real-time”傳輸。
3.?中斷(Interrupt)傳輸方式
中斷方式傳送是單向的,對于USB主機而言,只有輸入。中斷傳輸方式主要用于定時查詢設備是否有中斷數據要傳送,該傳輸方式應用在少量分散的、不可預測的數據傳輸場合,鍵盤、游戲桿和鼠標屬于這一類型。
4.?批量(Bulk)傳輸方式
批量傳輸主要應用在沒有帶寬、間隔時間要求的批量數據的傳送和接收中,它要求保證傳輸。打印機和掃描儀屬于這種類型。
而USB 3.0則增加了一種Bulk Streams傳輸模式,USB 2.0的Bulk模式只支持1個數據流,而Bulk Streams傳輸模式則可以支持多個數據流,每個數據流被分配一個Stream ID(SID),每個SID與一個主機緩沖區對應。
在USB架構中,集線器負責檢測設備的連接和斷開,利用其中斷IN端點(Interrupt IN Endpoint)來向主機報告。一旦獲悉有新設備連接上來,主機就會發送一系列請求給設備所掛載的集線器,再由集線器建立起一條連接主機和設備之間的通信通道。然后主機以控制傳輸的方式,通過端點 0對設備發送各種請求,設備收到主機發來的請求后回復相應的信息,進行枚舉(Enumerate)操作。因此USB總線具備熱插拔的能力。
2.3.5 以太網接口
以太網接口由MAC(以太網媒體接入控制器)和PHY(物理接口收發器)組成。以太網MAC由IEEE 802.3以太網標準定義,實現了數據鏈路層。常用的MAC支持10Mbit/s或100Mbit/s兩種速率。吉比特以太網(也稱為千兆位以太網)是快速以太網的下一代技術,將網速提高到了1000 Mbit/s。千兆位以太網以 IEEE 802.3z和802.3ab發布,作為IEEE 802.3 標準的補充。
MAC和PHY之間采用MII(媒體獨立接口)連接,它是IEEE-802.3定義的以太網行業標準,包括1個數據接口與MAC和PHY之間的1個管理接口。數據接口包括分別用于發送和接收的兩條獨立信道,每條信道都有自己的數據、時鐘和控制信號,MII數據接口總共需要16個信號。MII管理接口包含兩個信號,一個是時鐘信號,另一個是數據信號。通過管理接口,上層能監視和控制PHY。
一個以太網接口的硬件電路原理如圖2.15所示,從CPU到最終接口依次為CPU、MAC、PHY、以太網隔離變壓器、RJ45插座。以太網隔離變壓器是以太網收發芯片與連接器之間的磁性組件,在其兩者之間起著信號傳輸、阻抗匹配、波形修復、信號雜波抑制和高電壓隔離作用。
圖2.15 以太網接口的硬件電路原理
許多處理器內部集成了MAC或同時集成了MAC和PHY,另有許多以太網控制芯片也集成了MAC和PHY。
2.3.6 PCI和PCI-E
PCI(外圍部件互連)是由Intel于1991年推出的一種局部總線,作為一種通用的總線接口標準,它在目前的計算機系統中得到了非常廣泛應用。PCI總線具有如下特點。
數據總線為32位,可擴充到64位。
可進行突發(Burst)模式傳輸。突發方式傳輸是指取得總線控制權后連續進行多個數據的傳輸。突發傳輸時,只需要給出目的地的首地址,訪問第1個數據后,第2~n個數據會在首地址的基礎上按一定規則自動尋址和傳輸。與突發方式對應的是單周期方式,它在1個總線周期只傳送1個數據。
總線操作與處理器—存儲器子系統操作并行。
采用中央集中式總線仲裁。
支持全自動配置、資源分配,PCI卡內有設備信息寄存器組為系統提供卡的信息,可實現即插即用。
PCI總線規范獨立于微處理器,通用性好。
PCI設備可以完全作為主控設備控制總線。
圖2.16給出了一個典型的基于PCI總線的計算機系統邏輯示意圖,系統的各個部分通過PCI總線和PCI-PCI橋連接在一起。CPU和RAM通過PCI橋連接到PCI總線0(即主PCI總線),而具有PCI接口的顯卡則可以直接連接到主PCI總線上。PCI-PCI橋是一個特殊的PCI設備,它負責將PCI總線0和PCI總線1(即從PCI主線)連接在一起,通常PCI總線1稱為PCI-PCI橋的下游(Downstream),而PCI總線0則稱為PCI-PCI橋的上游(Upstream)。為了兼容舊的ISA總線標準,PCI總線還可以通過PCI-ISA橋來連接ISA總線,從而支持以前的ISA設備。
圖2.16 基于PCI總線的計算機系統邏輯示意圖
當PCI卡剛加電時,卡上配置空間即可以被訪問。PCI配置空間保存著該卡工作時所需的所有信息,如廠家、卡功能、資源要求、處理能力、功能模塊數量、主控卡能力等。通過對這個空間信息的讀取與編程,可完成對PCI卡的配置。如圖2.17所示,PCI配置空間共為256字節,主要包括如下信息。
制造商標識(Vendor ID):由PCI組織分配給廠家。
設備標識(Device ID):按產品分類給本卡的編號。
分類碼(Class Code):本卡功能的分類碼,如圖卡、顯示卡、解壓卡等。
申請存儲器空間:PCI卡內有存儲器或以存儲器編址的寄存器和I/O空間,為使驅動程序和應用程序能訪問它們,需申請CPU的一段存儲區域以進行定位。配置空間的基地址寄存器用于此目的。
申請I/O空間:配置空間中的基地址寄存器用來進行系統I/O空間的申請。
中斷資源申請:配置空間中的中斷引腳和中斷線用來向系統申請中斷資源。偏移3Dh處為中斷引腳寄存器,其值表明PCI設備使用了哪一個中斷引腳,對應關系為
1—INTA#、2—INTB#、3—INTC#、4—INTD#。
圖2.17 PCI配置空間
PCI-E(PCI Express)是Intel公司提出的新一代的總線接口,PCI Express采用了目前業內流行的點對點串行連接,比起PCI以及更早的計算機總線的共享并行架構,每個設備都有自己的專用連接,采用串行方式傳輸數據,不需要向整個總線請求帶寬,并可以把數據傳輸率提高到一個很高的頻率,達到PCI所不能提供的高帶寬。
PCI Express在軟件層面上兼容目前的PCI技術和設備,支持PCI設備和內存模組的初始化,也就是說無須推倒目前的驅動程序、操作系統,就可以支持PCI Express設備。
2.3.7 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主要有兩類應用——可移動和不可移動。不可移動設備遵循相同的電氣標準,但不要求符合物理標準?,F在已經有非常多的手機或者手持裝置都支持SDIO的功能,以連接WiFi、藍牙、GPS等模塊。
一般情況下,芯片內部集成的SD控制器同時支持MMC、SD卡,又支持SDIO卡,但是SD和SDIO的協議還是有不一樣的地方,支持的命令也會有不同。
SD/SDIO的傳輸模式有:
SPI模式
1位模式
4位模式
表2.1顯示了SDIO接口的引腳定義。其中CLK為時鐘引腳,每個時鐘周期傳輸一個命令或數據位;CMD是命令引腳,命令在CMD線上串行傳輸,是雙向半雙工的(命令從主機到從卡,而命令的響應是從卡發送到主機);DAT[0]~DAT[3]為數據線引腳;在SPI模式中,第8腳位被當成中斷信號。圖2.18給出了一個SDIO單模塊讀、寫的典型時序。
圖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位模式。
總結
以上是生活随笔為你收集整理的《Linux设备驱动开发详解 A》一一2.3 接口与总线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《部署IPv6网络(修订版)》一2.4
- 下一篇: 《机器人学经典教程》——2.3 人工智能