基于嵌入式Linux的ARM/DSP多機I2C通信
2 ARM和DSP通信軟件設計
運行Linux操作系統的ARM微控制器作為主控制器,在數據管理及多任務調度等方面有顯著優勢,可以很好地組織外圍器件采集的數據;主要實現對系統的整體控制,并通過總線設備驅動程序控制I2C總線模塊,通過主機尋址實現向I2C總線上掛載的下層DSP的數據收發。為保證數據通信的實時性,F28015通過中斷響應的方式實現數據接收和發送。
2.1 ARM9平臺的嵌入式Linux的I2C總線驅動設計
2.1.1 I2C總線讀寫時序
ARM9微控制器作為主機向從機DSP寫數據,首先向從機發送啟動信號,然后發送7位從機地址和1位寫標志位,再等待從機的應答信號。在收到應答信號后,主機發送數據給從機,再次等待應答信號。當主機收到應答信號之后再次發送數據。之后,主機等待從機的應答信號,如此直到數據發送完成,主機發送停止信號。I2C總線寫數據幀格式如圖3所示。本文引用地址:http://cqxgywz.com/article/149119.htm

主模式下讀數據,是指每次從指定的位置讀取一個或多個字節數據。主機首先向從機發送啟動信號,然后發送7位從機地址和1位讀標志位,等待從機應答。當收到從機的應答信號后,主機準備接收從機發送的數據,接收完成后發送一個應答信號,如此直到數據接收完成,主機發送一個停止信號。圖4為I2C總線讀數據幀格式。

2.1.2 Linux下I2C總線驅動程序概述
Linux系統的I2C總線驅動采用體系化結構設計,包括I2C總線適配器驅動和I2C總線設備驅動。總線驅動實現對I2C總線適配器(S3C2440的I2C總線模塊)的控制,設備驅動實現對具體設備(F28015的I2C總線模塊)的讀寫控制。圖5為總體驅動框架,可以分為三個層次:

①I2C框架。內核中i2c.h和i2c-core.c為I2C總線框架的主體,提供了核心數據結構的定義、I2C總線適配器驅動和設備驅動的注冊、注銷管理、I2C總線通信方法上層的、與具體適配器無關的代碼、檢測設備地址的上層代碼等。i2c-dev.c用于創建I2C總線適配器的設備節點,提供I2C總線設備訪問方法等。
②I2C總線適配器驅動。定義描述具體I2C總線適配器的數據結構,實現在具體I2C總線適配器上的I2C總線通信方法。
③I2C總線設備驅動。定義描述具體設備的數據結構,借助I2C總線框架的相關函數實現設備的注冊,并為用戶提供上層應用程序編程接口。
Linux的I2C總線驅動框架中的主要數據結構包括:i2c_driver、i2c_client、i2c_adapter和i2c_algorithm,它們被定義在內核中的i2c.h頭文件中。i2c_adapter對應于物理上的一個適配器,而i2c_algorithm對應一套通信方法,用來為適配器提供通信函數。i2c_algori thm中的關鍵函數master_xfei()用于產生I2C總線訪問周期需要的信號,以i2c_msg(即I2C總線消息)為單位。該結構體原型如下:

i2c_driver對應一套驅動方法,是用于輔助作用的數據結構。i2c_client對應于真實的物理設備,每個I2C總線設備都需要一個i2c_clie nt來描述。i2c_adapter和i2c_client的關系與I2C總線硬件體系中適配器和設備關系一致,即i2c_client依附于i2c_adapter。
linux相關文章:linux教程









評論