<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > I2C總線(xiàn)測(cè)試和分析

          I2C總線(xiàn)測(cè)試和分析

          作者: 時(shí)間:2011-02-23 來(lái)源:網(wǎng)絡(luò) 收藏

          1、I2C總線(xiàn)簡(jiǎn)介

          I2C((Inter-Integrated Circuit bus))總線(xiàn)是一種由飛利浦公司開(kāi)發(fā)的串行總線(xiàn),產(chǎn)生于上個(gè)世紀(jì)80年代,最初為音頻和視頻設(shè)備開(kāi)發(fā),現(xiàn)已廣泛應(yīng)用到通信、計(jì)算機(jī)、工業(yè)控制、多媒體等多個(gè)行業(yè),主要作為設(shè)備管理承載使用。它由兩條串行線(xiàn)(一條地址線(xiàn)和一條時(shí)鐘線(xiàn))構(gòu)成總線(xiàn)網(wǎng)絡(luò),用于連接微控制器及低速的外圍設(shè)備通信。I2C總線(xiàn)包括一個(gè)兩端接口,通過(guò)一個(gè)帶有緩沖區(qū)的接口,數(shù)據(jù)可以被I2C發(fā)送或接受。利用I2C技術(shù)可以對(duì)連接在總線(xiàn)的所有部件進(jìn)行集中管理,可隨時(shí)監(jiān)控風(fēng)扇、內(nèi)存、硬盤(pán)、網(wǎng)絡(luò)、系統(tǒng)溫度等多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性。圖1是 I2C總線(xiàn)架構(gòu)示意圖。

          圖1 I2C 總線(xiàn)架構(gòu)

          I2C總線(xiàn)是由數(shù)據(jù)線(xiàn)SDA和時(shí)鐘SCL構(gòu)成的串行總線(xiàn),可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,傳送速率從100kbps到最高3.4Mbps。各種被控制電路均并聯(lián)在這條總線(xiàn)上,但就像電話(huà)機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,地址碼用來(lái)選址,即接通需要控制的IC部件,確定總線(xiàn)上哪個(gè)部件需要接收數(shù)據(jù);同時(shí)發(fā)送端設(shè)備(CPU或外設(shè))還要發(fā)出“讀”或“寫(xiě)”的操作指示,以及具體的消息內(nèi)容。I2C協(xié)議的報(bào)文內(nèi)容可分成以下幾部分:

          * 開(kāi)始位--Start Bit

          * 地址 -- Address :7 或 10比特

          * 讀/寫(xiě)標(biāo)志位-- Read/Write Bit:

          指示數(shù)據(jù)方向

          讀 = 數(shù)據(jù)從從設(shè)備讀到主設(shè)備

          寫(xiě) = 數(shù)據(jù)從主設(shè)備寫(xiě)到從設(shè)備

          * 確認(rèn)位 -- Acknowledge Bit

          * 字節(jié)數(shù)據(jù) -- Data Byte(s)

          除EEPROM數(shù)據(jù)讀/寫(xiě)外,通常數(shù)據(jù)長(zhǎng)度都=4

          * 重啟動(dòng)位 -- ReStart Bit

          出現(xiàn)在組合的讀/寫(xiě)消息內(nèi)容中

          * 停止位 -- Stop Bit

          下圖2是7位和10位兩種地址長(zhǎng)度的 I2C協(xié)議幀結(jié)構(gòu)。

          圖2 7位和10位兩種地址長(zhǎng)度的 I2C協(xié)議幀結(jié)構(gòu)

          2、I2C總線(xiàn)的需求

          工程師對(duì)I2C總線(xiàn)和分析的需求主要涵蓋以下三個(gè)方面:

          2.1了解總線(xiàn)正在發(fā)生什么

          軟件工程師設(shè)計(jì)了I2C主控設(shè)備發(fā)出的消息內(nèi)容,但硬件工程師需要確定消息是不是被準(zhǔn)確無(wú)誤的傳送到物理線(xiàn)路上,需要了解總線(xiàn)上真正在發(fā)生什么。傳統(tǒng)的使用示波器的方式是先用探頭把信號(hào)捕獲下來(lái),然后根據(jù)電平特點(diǎn)轉(zhuǎn)換成“1”或“0”,然后再去對(duì)比I2C協(xié)議,將其還原成有意義的消息幀。這種方式費(fèi)時(shí)費(fèi)力,對(duì)工程師的業(yè)務(wù)能力要求很高,而且儀器使用效率很低。工程師需要儀器能提供一種自動(dòng)化的方式,直接將采集到的波形翻譯成容易識(shí)別的內(nèi)容,再根據(jù)不用類(lèi)別工程師的需求,以不同的方式動(dòng)態(tài)顯示在儀器屏幕上。比如硬件工程師可能希望以二進(jìn)制的方式查看I2C消息內(nèi)容,底層驅(qū)動(dòng)工程師希望以16進(jìn)制方式分析波形,而應(yīng)用軟件工程師則希望以ASCII文本的方式去了解總線(xiàn)上實(shí)際運(yùn)行的數(shù)據(jù)內(nèi)容

          2.2調(diào)試總線(xiàn)上有故障的節(jié)點(diǎn)

          I2C是由多個(gè)節(jié)點(diǎn)組成的總線(xiàn)網(wǎng)絡(luò),每一個(gè)節(jié)點(diǎn)都用唯一的地址符加以識(shí)別。主控設(shè)備發(fā)出的消息會(huì)被總線(xiàn)上所有節(jié)點(diǎn)接收到,但只有目標(biāo)地址和本節(jié)點(diǎn)匹配的消息才會(huì)被該節(jié)點(diǎn)送入上層軟件接口處理,因此當(dāng)某個(gè)特點(diǎn)的節(jié)點(diǎn)出了故障,或我們僅對(duì)該節(jié)點(diǎn)收發(fā)的數(shù)據(jù)感興趣時(shí),我們希望僅觀測(cè)到目標(biāo)地址為該節(jié)點(diǎn)的 I2C消息幀,而忽略其他地址節(jié)點(diǎn)的信息。

          工程師可能還面臨這樣一種情況:我不清楚I2C總線(xiàn)上有無(wú)故障節(jié)點(diǎn),或不清楚是哪個(gè)節(jié)點(diǎn)收發(fā)數(shù)據(jù)有誤,但我希望一旦總線(xiàn)上有出錯(cuò)狀態(tài)時(shí),我能立即定位到故障來(lái)源。

          2.3分析EEPROM內(nèi)存單元的有效性

          EERPOM是在各類(lèi)系統(tǒng)單板上廣泛使用的存儲(chǔ)器件,主要作用是存儲(chǔ)系統(tǒng)上電時(shí)需要導(dǎo)入的信息,比如主內(nèi)存地址、容量、模式,CPU初始化狀態(tài)等,EEPROM器件一般都采用I2C總線(xiàn)與CPU建立通信傳遞數(shù)據(jù)。當(dāng)讀寫(xiě)EEPROM配置信息出錯(cuò)的情況下,我們就不僅僅需要知道是哪片EEPROM出問(wèn)題,更有意義的是要深入到器件內(nèi)部,定位具體是哪個(gè)地址單元出了問(wèn)題,是讀數(shù)據(jù)過(guò)程中有問(wèn)題還是寫(xiě)數(shù)據(jù)過(guò)程中有問(wèn)題。

          3、力科示波器充分滿(mǎn)足工程師 I2C總線(xiàn)的需求

          廣大工程師用戶(hù)日益需要能處理各種通用測(cè)量任務(wù)、同時(shí)又能滿(mǎn)足分析 I2C總線(xiàn)等低速串行總線(xiàn)的專(zhuān)用需求、且符合有限預(yù)算的解決方案,力科基于Windows操作系統(tǒng)的全系列示波器產(chǎn)品滿(mǎn)足了這些需求,這些系列包括WaveSurfer Xs、WaveRunner Xi、WavePro 7Zi和WaveMaster 8Zi,這些產(chǎn)品一個(gè)很重要的的應(yīng)用方面就是調(diào)試串行總線(xiàn)。示波器不僅要能測(cè)量信號(hào)電平、頻率等常規(guī)項(xiàng)目,還要能提供專(zhuān)門(mén)的軟件包以更深入分析和調(diào)試I2C總線(xiàn)。

            力科 I2C測(cè)試軟件包主要包括三大功能,完全涵蓋了嵌入式開(kāi)發(fā)工程師分析I2C的以上需求,分別是總線(xiàn)協(xié)議解碼、總線(xiàn)觸發(fā)和EEPROM內(nèi)存單元調(diào)試。

          3、1總線(xiàn)觸發(fā)

          在力科示波器界面下進(jìn)入菜單項(xiàng)“Trigger”->”Serial Data”->”I2C”,彈出的界面中允許用戶(hù)按照特定的模式去觸發(fā)I2C消息幀,如下圖3所示。比如你只關(guān)心地址為0x20節(jié)點(diǎn)上讀寫(xiě)的數(shù)據(jù),那就可以設(shè)置以”地址”方式觸發(fā);或者你希望看到所有幀長(zhǎng)度為4的I2C消息,那就可以設(shè)置以“幀長(zhǎng)度”為觸發(fā)方式;更復(fù)雜的情況是既要隔離特定地址的消息,還要隔離該地址節(jié)點(diǎn)上接收到的特定數(shù)據(jù)內(nèi)容,那就可以設(shè)置”地址+數(shù)據(jù)”。

          “No Ack”觸發(fā)方式提供給用戶(hù)專(zhuān)門(mén)捕獲總線(xiàn)出錯(cuò)狀態(tài),通過(guò)這種方式,工程師可以快速定位到有故障的節(jié)點(diǎn)和出錯(cuò)狀態(tài)。

          圖3 力科示波器 I2C軟件包設(shè)置觸發(fā)界面

          3、1總線(xiàn)協(xié)議解碼

          在力科示波器界面下進(jìn)入菜單項(xiàng)“Analysis”->”Serial Decode”->”I2C”,用戶(hù)對(duì)總線(xiàn)正在傳輸?shù)臄?shù)據(jù)內(nèi)容進(jìn)行實(shí)時(shí)解碼,解碼后的內(nèi)容能選擇以“二進(jìn)制”、“十六進(jìn)制”和“ASCII”三種方式直接顯示在波形上方。由于I2C消息由多個(gè)協(xié)議字段組成,因此解碼時(shí)軟件會(huì)自動(dòng)地把不同的協(xié)議字段以不同的顏色框加以標(biāo)準(zhǔn),比如地址字段是紅色框,而數(shù)據(jù)字段則對(duì)應(yīng)成藍(lán)色框,如下圖4所示

          圖4 I2C總線(xiàn)解碼

          一種更直觀的方式以表格化形式列出全部捕獲到消息幀的所有協(xié)議字段,然后用戶(hù)可以根據(jù)需要單獨(dú)方法顯示表格中特定的消息幀,如下圖5所示。

          圖5 表格顯示 I2C協(xié)議幀結(jié)構(gòu)數(shù)據(jù)

          3、3EERPOM調(diào)試

          力科I2C軟件包專(zhuān)門(mén)提供 EERPOM內(nèi)存單元地址的觸發(fā)方式,以滿(mǎn)足工程師升入調(diào)試EEPROM器件的需求。在這種情形下,不僅需要設(shè)置器件作為 I2C節(jié)點(diǎn)的地址符,還要設(shè)置器件內(nèi)部某個(gè)具體內(nèi)存單元的地址。完成這些設(shè)置后,觸發(fā)顯示在示波器屏幕上的波形即使該內(nèi)存單元上讀寫(xiě)的數(shù)據(jù)內(nèi)容。如下圖6所示。

          圖6 I2C軟件包調(diào)試EEPROM界面



          關(guān)鍵詞: 測(cè)試 測(cè)試測(cè)量

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();