新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux的ARM/DSP多機(jī)I2C通信

        基于嵌入式Linux的ARM/DSP多機(jī)I2C通信

        作者: 時(shí)間:2012-05-08 來源:網(wǎng)絡(luò) 收藏


        2 軟件設(shè)計(jì)
        運(yùn)行操作系統(tǒng)的微控制器作為主控制器,在數(shù)據(jù)管理及多任務(wù)調(diào)度等方面有顯著優(yōu)勢(shì),可以很好地組織外圍器件采集的數(shù)據(jù);主要實(shí)現(xiàn)對(duì)系統(tǒng)的整體控制,并通過總線設(shè)備驅(qū)動(dòng)程序控制總線模塊,通過主機(jī)尋址實(shí)現(xiàn)向總線上掛載的下層的數(shù)據(jù)收發(fā)。為保證數(shù)據(jù)的實(shí)時(shí)性,F(xiàn)28015通過中斷響應(yīng)的方式實(shí)現(xiàn)數(shù)據(jù)接收和發(fā)送。
        2.1 9平臺(tái)的總線驅(qū)動(dòng)設(shè)計(jì)
        2.1.1 I2C總線讀寫時(shí)序
        ARM9微控制器作為主機(jī)向從機(jī)寫數(shù)據(jù),首先向從機(jī)發(fā)送啟動(dòng)信號(hào),然后發(fā)送7位從機(jī)地址和1位寫標(biāo)志位,再等待從機(jī)的應(yīng)答信號(hào)。在收到應(yīng)答信號(hào)后,主機(jī)發(fā)送數(shù)據(jù)給從機(jī),再次等待應(yīng)答信號(hào)。當(dāng)主機(jī)收到應(yīng)答信號(hào)之后再次發(fā)送數(shù)據(jù)。之后,主機(jī)等待從機(jī)的應(yīng)答信號(hào),如此直到數(shù)據(jù)發(fā)送完成,主機(jī)發(fā)送停止信號(hào)。I2C總線寫數(shù)據(jù)幀格式如圖3所示。

        本文引用地址:http://www.104case.com/article/149119.htm

        c.jpg


        主模式下讀數(shù)據(jù),是指每次從指定的位置讀取一個(gè)或多個(gè)字節(jié)數(shù)據(jù)。主機(jī)首先向從機(jī)發(fā)送啟動(dòng)信號(hào),然后發(fā)送7位從機(jī)地址和1位讀標(biāo)志位,等待從機(jī)應(yīng)答。當(dāng)收到從機(jī)的應(yīng)答信號(hào)后,主機(jī)準(zhǔn)備接收從機(jī)發(fā)送的數(shù)據(jù),接收完成后發(fā)送一個(gè)應(yīng)答信號(hào),如此直到數(shù)據(jù)接收完成,主機(jī)發(fā)送一個(gè)停止信號(hào)。圖4為I2C總線讀數(shù)據(jù)幀格式。

        d.jpg


        2.1.2 下I2C總線驅(qū)動(dòng)程序概述
        Linux系統(tǒng)的I2C總線驅(qū)動(dòng)采用體系化結(jié)構(gòu)設(shè)計(jì),包括I2C總線適配器驅(qū)動(dòng)和I2C總線設(shè)備驅(qū)動(dòng)。總線驅(qū)動(dòng)實(shí)現(xiàn)對(duì)I2C總線適配器(S3C2440的I2C總線模塊)的控制,設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)對(duì)具體設(shè)備(F28015的I2C總線模塊)的讀寫控制。圖5為總體驅(qū)動(dòng)框架,可以分為三個(gè)層次:

        e.jpg


        ①I2C框架。內(nèi)核中i2c.h和i2c-core.c為I2C總線框架的主體,提供了核心數(shù)據(jù)結(jié)構(gòu)的定義、I2C總線適配器驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)的注冊(cè)、注銷管理、I2C總線方法上層的、與具體適配器無關(guān)的代碼、檢測(cè)設(shè)備地址的上層代碼等。i2c-dev.c用于創(chuàng)建I2C總線適配器的設(shè)備節(jié)點(diǎn),提供I2C總線設(shè)備訪問方法等。
        ②I2C總線適配器驅(qū)動(dòng)。定義描述具體I2C總線適配器的數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)在具體I2C總線適配器上的I2C總線通信方法。
        ③I2C總線設(shè)備驅(qū)動(dòng)。定義描述具體設(shè)備的數(shù)據(jù)結(jié)構(gòu),借助I2C總線框架的相關(guān)函數(shù)實(shí)現(xiàn)設(shè)備的注冊(cè),并為用戶提供上層應(yīng)用程序編程接口。
        Linux的I2C總線驅(qū)動(dòng)框架中的主要數(shù)據(jù)結(jié)構(gòu)包括:i2c_driver、i2c_client、i2c_adapter和i2c_algorithm,它們被定義在內(nèi)核中的i2c.h頭文件中。i2c_adapter對(duì)應(yīng)于物理上的一個(gè)適配器,而i2c_algorithm對(duì)應(yīng)一套通信方法,用來為適配器提供通信函數(shù)。i2c_algori thm中的關(guān)鍵函數(shù)master_xfei()用于產(chǎn)生I2C總線訪問周期需要的信號(hào),以i2c_msg(即I2C總線消息)為單位。該結(jié)構(gòu)體原型如下:
        f.jpg
        i2c_driver對(duì)應(yīng)一套驅(qū)動(dòng)方法,是用于輔助作用的數(shù)據(jù)結(jié)構(gòu)。i2c_client對(duì)應(yīng)于真實(shí)的物理設(shè)備,每個(gè)I2C總線設(shè)備都需要一個(gè)i2c_clie nt來描述。i2c_adapter和i2c_client的關(guān)系與I2C總線硬件體系中適配器和設(shè)備關(guān)系一致,即i2c_client依附于i2c_adapter。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        linux相關(guān)文章:linux教程




        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 易门县| 德庆县| 日照市| 隆昌县| 敦煌市| 深圳市| 长沙市| 广东省| 平果县| 德阳市| 玛多县| 台北县| 博野县| 融水| 高尔夫| 高陵县| 郴州市| 嵊泗县| 克东县| 丁青县| 凤冈县| 上虞市| 扬中市| 苏尼特右旗| 准格尔旗| 腾冲县| 岳西县| 美姑县| 蕲春县| 玉门市| 安义县| 墨玉县| 涟水县| 神农架林区| 德兴市| 渭源县| 枣庄市| 崇左市| 乌什县| 张家川| 阿尔山市|