基于嵌入式Linux的ARM/DSP多機I2C通信
2 ARM和DSP通信軟件設(shè)計
運行Linux操作系統(tǒng)的ARM微控制器作為主控制器,在數(shù)據(jù)管理及多任務(wù)調(diào)度等方面有顯著優(yōu)勢,可以很好地組織外圍器件采集的數(shù)據(jù);主要實現(xiàn)對系統(tǒng)的整體控制,并通過總線設(shè)備驅(qū)動程序控制I2C總線模塊,通過主機尋址實現(xiàn)向I2C總線上掛載的下層DSP的數(shù)據(jù)收發(fā)。為保證數(shù)據(jù)通信的實時性,F(xiàn)28015通過中斷響應(yīng)的方式實現(xiàn)數(shù)據(jù)接收和發(fā)送。
2.1 ARM9平臺的嵌入式Linux的I2C總線驅(qū)動設(shè)計
2.1.1 I2C總線讀寫時序
ARM9微控制器作為主機向從機DSP寫數(shù)據(jù),首先向從機發(fā)送啟動信號,然后發(fā)送7位從機地址和1位寫標志位,再等待從機的應(yīng)答信號。在收到應(yīng)答信號后,主機發(fā)送數(shù)據(jù)給從機,再次等待應(yīng)答信號。當主機收到應(yīng)答信號之后再次發(fā)送數(shù)據(jù)。之后,主機等待從機的應(yīng)答信號,如此直到數(shù)據(jù)發(fā)送完成,主機發(fā)送停止信號。I2C總線寫數(shù)據(jù)幀格式如圖3所示。本文引用地址:http://m.butianyuan.cn/article/149119.htm
主模式下讀數(shù)據(jù),是指每次從指定的位置讀取一個或多個字節(jié)數(shù)據(jù)。主機首先向從機發(fā)送啟動信號,然后發(fā)送7位從機地址和1位讀標志位,等待從機應(yīng)答。當收到從機的應(yīng)答信號后,主機準備接收從機發(fā)送的數(shù)據(jù),接收完成后發(fā)送一個應(yīng)答信號,如此直到數(shù)據(jù)接收完成,主機發(fā)送一個停止信號。圖4為I2C總線讀數(shù)據(jù)幀格式。
2.1.2 Linux下I2C總線驅(qū)動程序概述
Linux系統(tǒng)的I2C總線驅(qū)動采用體系化結(jié)構(gòu)設(shè)計,包括I2C總線適配器驅(qū)動和I2C總線設(shè)備驅(qū)動??偩€驅(qū)動實現(xiàn)對I2C總線適配器(S3C2440的I2C總線模塊)的控制,設(shè)備驅(qū)動實現(xiàn)對具體設(shè)備(F28015的I2C總線模塊)的讀寫控制。圖5為總體驅(qū)動框架,可以分為三個層次:
①I2C框架。內(nèi)核中i2c.h和i2c-core.c為I2C總線框架的主體,提供了核心數(shù)據(jù)結(jié)構(gòu)的定義、I2C總線適配器驅(qū)動和設(shè)備驅(qū)動的注冊、注銷管理、I2C總線通信方法上層的、與具體適配器無關(guān)的代碼、檢測設(shè)備地址的上層代碼等。i2c-dev.c用于創(chuàng)建I2C總線適配器的設(shè)備節(jié)點,提供I2C總線設(shè)備訪問方法等。
②I2C總線適配器驅(qū)動。定義描述具體I2C總線適配器的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)在具體I2C總線適配器上的I2C總線通信方法。
③I2C總線設(shè)備驅(qū)動。定義描述具體設(shè)備的數(shù)據(jù)結(jié)構(gòu),借助I2C總線框架的相關(guān)函數(shù)實現(xiàn)設(shè)備的注冊,并為用戶提供上層應(yīng)用程序編程接口。
Linux的I2C總線驅(qū)動框架中的主要數(shù)據(jù)結(jié)構(gòu)包括:i2c_driver、i2c_client、i2c_adapter和i2c_algorithm,它們被定義在內(nèi)核中的i2c.h頭文件中。i2c_adapter對應(yīng)于物理上的一個適配器,而i2c_algorithm對應(yīng)一套通信方法,用來為適配器提供通信函數(shù)。i2c_algori thm中的關(guān)鍵函數(shù)master_xfei()用于產(chǎn)生I2C總線訪問周期需要的信號,以i2c_msg(即I2C總線消息)為單位。該結(jié)構(gòu)體原型如下:
i2c_driver對應(yīng)一套驅(qū)動方法,是用于輔助作用的數(shù)據(jù)結(jié)構(gòu)。i2c_client對應(yīng)于真實的物理設(shè)備,每個I2C總線設(shè)備都需要一個i2c_clie nt來描述。i2c_adapter和i2c_client的關(guān)系與I2C總線硬件體系中適配器和設(shè)備關(guān)系一致,即i2c_client依附于i2c_adapter。
linux相關(guān)文章:linux教程
評論