基於Linux系統的多種串行總線統一接口的實現

2020-11-29 電子產品世界

摘要:基於Linux字符設備操作接口和各類串行總線的共性,按照分層的思想,抽象出各種總線統一接口統一接口的應用層API與底層的具體總線操作形式無關,而且便於應用系統的升級和移植。文中給出了一種多種串行總線統一接口的實現方法,並以ARM9為平臺,以I2C、1-Wire、SPI為例,驗證了新方法的可行性。
關鍵詞:統一接口;嵌入式系統Linux;設備驅動;串行總線

0 引言
Linux內核中單獨實現TTY、I2C、SPI、ISA、USB等多種總線驅動時,每一種總線的實現都有各自的特點,如參數設置不同,實現的結構不同等。以TTY、I2C為例,TTY採用的是基於線路規程的三層結構,而I2C則是基於用戶句柄和適配器的三層結構。當然,這些驅動都是功能齊全而強大的,但對於並不複雜的應用而言,這樣的控制是比較繁瑣的,而且,對於移植也是不利的。例如,某個應用系統原先使用一款I2C接口的時鐘晶片,但後來系統升級換成了一款SPI接口的時鐘晶片,這時就不得不對程序做較大的改動了。本文給出了一種多種串行總線統一接口的實現方法,並以ARM9為平臺,以I2C、1-Wire、SPI為例驗證了方法的可行性。

1 總線協議及其工作過程
多數的串行總線都基於主從結構,如果總線中包含了時鐘信號線,那麼,該時鐘信號就由主機提供,而如果還包含了片選信號,通常也由主機來控制。也就是說,主機發起通信,從機處於被動狀態,所以,對於總線時序的分析,只需討論主控制器端的時序,而從設備的時序就是它的逆向過程。
1.1 SPI協議及其工作過程
SPI總線是摩託羅拉公司提出的一種串行總線協議,該總線由4根基本的信號線組成,分別是CS、SI、SO、SCK。其中SCK是串行總線時鐘,由主設備提供;而SI、SO分別對應於數據輸入和數據輸出信號。在一主多從的系統中,片選信號決定當前有效的從設備。
SPI總線的工作過程是:首先,主機發起通信,通過片選信號激活從設備;然後,主機在串行時鐘SCK信號的同步下,將地址、命令、數據信息從串行數據輸出信號(相對主機而言)SI送出;而從設備則在SCK信號的同步下接收主機發送來的數據,並作出相應反應,最後將結果從數據輸入信號(相對主機而言)SO送出。
S3C2440中對SPI總線的控制,就是集中於對rSPCONn、rSPSTAn、rSPPINn、rSPPREn、rSPTDATn和rSPRDATn的控制。其中rSPCONn用於DMA設置、工作模式選擇、時鐘相位選擇,rSPSTAn用於控制器狀態查詢,rSPPINn用於多主機下出錯檢測和片選釋放,rSPPREn用於控制預分頻狀態寄存器,rSPTDATn是數據發送寄存器,rSPRDATn是數據接收寄存器。
1.2 I2C協議及其工作過程
I2C總線是由飛利浦公司提出的一種接口標準,該總線由SDA、SCL兩根信號線組成。其中SCL為時鐘信號,由主機提供,最大傳輸速率為400kb/s;而SDA為數據信號。連接到總線上的每一個設備都有一個唯一的地址,通過這個地址使得主機能夠找到目標從機並與之進行通信。
以主機發送為例,I2C總線的工作過程是:首先,主機控制時鐘信號SCL為高電平時,數據信號SDA產生一個下降沿,作為起始條件。然後,主機發出7位的從設備地址和1位R/W標誌,並激活將要與之通信的從設備,而從設備則會產生一個應答信號。對於寫數據,主機緊接著就將一個字符或一串數據寫入到從設備;而對於讀數據,則緊接著讀取從設備輸出的數據。
I2C總線中的S3C2440對I2C的控制主要集中於對rIICCON、rIICSTAT、rIICADD和rIICDS的控制。其中rIICCON用於時鐘源選擇、中斷控制和I2C控制器使能,rIICSTAT用於工作模式選擇、控制器狀態查詢,rIICADD是從設備地址(當S3C2440設置為從設備模式時使用),rIICDS是發送接收移位寄存器。
1.3 1-Wire協議及其工作過程
1-Wire總線是Maxim全資子公司Dallas提出的一種總線接口。1-Wire總線與其他的串行總線有比較大的區別:普通的串行總線通常由兩根或兩根以上的信號線組成;而1-Wire總線僅有一根信號線,同時用於時鐘、數據、命令的傳輸,具有資源利用率高、結構簡單、成本低廉、易於總線擴展等優點。
1-Wire總線工作過程:1-Wire總線包含復位、讀、寫三種基本時序。在復位狀態下,主機將總線拉低480~960 μs後釋放總線,由於上拉電阻的作用,此時的電平為高,等待15~60 μs之後,從設備將總線拉低表示復位成功。寫操作時,若寫入數據位為0,則主機將總線拉低60μs後釋放;若寫入數據位為1,則主機將總線拉低1~15 μs後釋放。由於很少有控制器集成了1-Wire總線控制器,所以,一般使用GPIO模擬的方式,這時,對於時序的控制就要求得比較精確。

2 Linux下的統一驅動
這些總線有一些共性,也就是驅動要實現的內容,主要包括單字節數據收發、數據流收發以及工作模式控制等。在這些共性的基礎上,一般都需要向上層提供一個統一的接口,以使得對使用這些API的應用程式而言(下層總線無論是RS-232、SPI、I2C,還是1-Wire)都不需要做任何改變。同時,還要對下層也提供一個通用接口,使得不同的總線都能與上層統一接口協調通信。該驅動的結構框架如圖1所示。

本文引用地址:http://www.eepw.com.cn/article/148622.htm


本文主要討論的是總線驅動部分,而應用層和物理層在測試的時候,也可用兩個簡單的例子來驗證設計結果。

linux作業系統文章專題:linux作業系統詳解(linux不再難懂)

相關焦點

  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    公司開發的2線式串行總線,用於連接微控制器及其外圍設備。它是同步通信的一種特殊形式,具有接口線少、控制方式簡單、器件封裝形式小、通信速率較高等優點。在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。
  • 多種工業應用串行總線特性及比較
    由於在消費類電子產品、計算機外設、汽車和工業應用中增加了嵌入式功能,對低成本、高速和高可靠通信介質的要求也不斷增長以滿足這些應用,其結果是越來越多的處理器和控制器用不同類型的總線集成在一起,實現與PC軟體、開發系統(如仿真器)或網絡中的其它設備進行通信。目前流行的通信一般採用串行或並行模式,而串行模式應用更廣泛。
  • 編碼器的CAN總線接口及其在光電跟蹤系統中的應用
    近幾年來串行通信快速發展,出現了多種控制系統現場總線形式,CAN總線就是其中應用最為廣泛的一種,它是控制器區域網總線的簡稱,是一種有效支持分布式控制和實時控制的串行通信網絡。由於CAN總線的高性能、高可靠性及獨特的設計,已成為目前國內外普及和實時性最高的現場總線。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    IIC總線作為一種申行傳輸總線,其使用連線少,結構簡單,是一種應用廣泛的高性能總線方式。而Linux作為一個原始碼公開、易於裁剪的作業系統,非常適合於嵌入式系統的應用。
  • 基於USB總線和89C51單片機的數據採集系統設計
    而通用串行總線(Universal Serial Bus,簡稱USB)的出現能很好地解決以上這些衝突。我們利用89C51單片機設計了基於USB總線的數據採集設備,並可與MAX485結合起來實現數據的遠程採集。系統硬體設計USB數據採集系統硬體模塊主要由串行A/D轉換器、89C51晶片、USB接口晶片和多路模擬開關等組成。
  • 串行ATA總線應用技術
    使基於ATA的存儲設備性能與中、低端企業級SCSI存儲設備性能重疊,適應數據生命周期和企業存儲分層等應用模式的開展。與ATA物理接口結構改變對應,SATA硬碟在機械系統、傳輸模式、信號方式、伺服系統、磁介質等都有一定的改變或改進,並大量借鑑SCSI技術,其基本帶寬達到1.5GMps,是一種典型的「後PC」技術[2]。
  • 採用PDIUSBD12晶片和ADuC812晶片實現串行總線接口設計
    採用PDIUSBD12晶片和ADuC812晶片實現串行總線接口設計 王澤兵 齊和平 發表於 2020-04-04 10:45:00 隨著計算機技術和信息技術的飛速發展
  • 基於C167單片機和CAN總線實現數位化電梯控制系統的設計
    基站的樓層控制器增設鑰匙開關、消防運行開關輸入功能,以實現電梯的開/ 停和消防運行,並通過CAN埠與總線相連接。 通訊模塊: 採用CAN總線多主結構,來實現電梯主控器、層站控制器、外呼和轎廂之間控制信號的串行通信。 廳外呼叫及顯示:在電梯的每層廳外都有呼叫選擇部分, 它代表乘客的乘梯方向(如向上或向下) ,並給予相應的LED 顯示。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    在實際應用中,現代技術開發嵌入式語音識別有兩種實現方式:調入嵌入式語音開發包和外擴語音識別晶片。本文的語音識別系統方案是以嵌入式處理器S3C2440為核心,外擴非特定人語音識別晶片LD3320,並將超聲波測距模塊和雲臺相結合作為系統的機械執行機構。
  • 嵌入式中常用的總線與接口有哪一些
    為了簡化硬體電路設計、簡化系統結構,常用一組線路,配置以適當的接口電路,與各部件和外圍設備連接,這組共用的連接線路被稱為總線。採用總線結構便於部件和設備的擴充,尤其制定了統一的總線標準則容易使不同設備間實現互連。 微機中總線一般有內部總線、系統總線和外部總線。
  • 基於CPCI總線接口和LVDS接口的接收和傳輸測試數據實驗設計
    因此,CPCI總線已成為當今應用最廣泛的工業計算機總線,基於CPCI總線的工業控制計算機已經成為解決大量高速數據處理的一個新方向。 基於某測試任務,本文詳細闡述了通過CPCI總線接口和LVDS接口接收和傳輸測試數據,在保證可靠性的前期下,提高了地面設備接收和處理數據的速度。測試結果表明,此方法可行可靠,圓滿完成了測試任務。
  • 通用串行總線USB及其應用
    由於傳統計算機接口有上述缺點,不能滿足當前計算機發展的需要,於是,Intel,Microsoft,Compaq,NEC,IBM,Digital,Northern Telecom等7家世界著名的計算機公司和通訊公司聯合制定了一種新的通用外部設備總線規範,即通用串行總線USB(Universal Serial Bus
  • 基於RS485總線的溫溼度監控系統設計
    整個系統在監控系統治理軟體的控制下,同一協調工作,完成設計功能。  2.2 主從式通訊網絡  監控系統中網絡通訊採用RS-485串行總線連接,串行通訊具有傳輸間隔長、連接簡單、使用靈活方便、數據傳輸可靠性高的特點,在產業監控、數據採集和實時控制系統中得到了廣泛應用。
  • I2C總線驅動在嵌入式系統中的兩種實現
    他通過串行數據線(Serial Data Lines,SDL)及串行時鐘線(Serial ClockLine,SCL)兩線在連接到總線上的器件之間傳送信息,並根據地址識別每個器件。一個或多個微控制器以及外圍器件可以通過I2C總線接口非常方便的連接在一起構成系統。這種總線結構的連線和連接引腳少,器件間總線簡單。
  • 基於Nios II的AT24C02接口電路設計與實現
    本文在討論了I2C通信協議的基礎上,利用FPGA技術,設計了NiosⅡ與AT24C02」之間進行通信的接口電路。本接口電路能產生基於I2C通信協議的讀寫操作時序,成功實現了對AT24C02的讀寫功能。由於所有的時序,都是由硬體產生,因此,本設計具有控制簡單、成本低廉等特點。
  • 基於CPLD和ISA總線的數據採集系統設計
    摘要:介紹一種基於複雜可編程邏輯器件(CPLD)的數據採集系統,並給出詳細的設計方案。計算機通過ISA總線實現與數據採集系統的指令和數據傳輸。通過VHDL編程實現CPLD對12位串行模數轉換器ADS7816的控制。最後,給出該系統設計的仿真波形和測試結果。
  • 通用串行總線(USB)原理及接口設計
    通用串行總線USB (Universal SerialBus)是Intel、Microsoft等大廠商為解決計算機外設種類的日益增加與有限的主板插槽和埠之間的矛盾而於1995年提出制定的。它是一種用於將適用USB的外圍設備連接到主機的外部總線結構,主要用在中速和低速的外設。
  • 基於VHDL/CPLD的I2C串行總線控制器設計及實現
    串行總線和並行總線相比具有結構簡單、佔用引腳少、成本低的優點。常見的串行總線有USB、IEEE1394、I2C等,其中I2C總線具有使用簡單的特點,在單片機、串行E2PROM、LCD等器件中具有廣泛的應用。  I2C(Inter IC BUS)是Philips公司開發的用於晶片之間連接的總線。
  • 基於單片機和CPLD的PLC背板總線協議接口晶片設計(一)
    摘要:設計了一組基於CPLD的PLC背板總線協議接口晶片,協議晶片可以區分PLC的背板總線的周期性數據和非周期性數據。背板總線的技術水平決定了PLC 產品的I/O 擴展能力,是PLC 設計製造的核心技術。目前,PLC 大多採用串行通信技術實現背板總線,串行總線引線少、硬體成本低,跟並行總線相比不容易受幹擾,串行總線可以提高在惡劣的工廠和工業環境下自動化設備的可靠性。用於串行通信技術的可選類型包括I2C、UART、SPI、USB 和乙太網等,一般來說,很多作為PLC 主晶片的單片機自身都集成了這些外設部件。
  • 基於嵌入式WinCE的CAN總線控制器驅動設計
    嵌入式作業系統(:Real-time Embedded OperatingSystem,RTOs或EOs)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。