0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C通信介紹及軟測(cè)方法

硬件設(shè)計(jì)解析 ? 來源:愛搞研究的阿燦 ? 作者:愛搞研究的阿燦 ? 2023-04-17 16:35 ? 次閱讀

一、I2C總線的介紹

??I2C是一種非常常見的通信協(xié)議,是philips公司提出的,由數(shù)據(jù)線SDA和時(shí)鐘線SCL兩條雙向信號(hào)線組成,CPU利用串行時(shí)鐘線發(fā)出時(shí)鐘信號(hào),利用串行數(shù)據(jù)線發(fā)送或者接受數(shù)據(jù)。SDA線傳輸數(shù)據(jù)是大端傳輸(字節(jié)高位先傳),每次傳輸8bit,即1字節(jié)。支持多主控,任何時(shí)間點(diǎn)只能有一個(gè)主控。每個(gè)連接到總線的設(shè)備都有一個(gè)獨(dú)立的地址addr,共7個(gè)bit,主機(jī)正是利用該地址對(duì)設(shè)備進(jìn)行訪問(這是I2C和SPI最大的不同點(diǎn)之一,I2C對(duì)從設(shè)備進(jìn)行操作需要知道從設(shè)備地址,然后進(jìn)行尋址;而SPI則不需要通過設(shè)備地址尋址)。
??當(dāng)總線空閑的時(shí)候,SDA和SCL都是高電平。在數(shù)據(jù)傳輸過程中,SCL為高電平的時(shí)候,SDA線必須保持穩(wěn)定,SDA上傳輸1個(gè)bit數(shù)據(jù);當(dāng)SCL為低電平的時(shí)候,SDA線才可以改變電平。簡(jiǎn)言之,只有當(dāng)SCL為高電平時(shí),SDA的數(shù)據(jù)才有意義。

5ad07028-da9f-11ed-a826-dac502259ad0.png


??開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。起始信號(hào)由主控制器產(chǎn)生。
??結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。結(jié)束信號(hào)也只能由主控制器產(chǎn)生。
??(記憶竅門:因?yàn)榭偩€空閑時(shí)兩根線都是高電平,所以開始信號(hào)是由高電平變?yōu)榈碗娖剑欢Y(jié)束信號(hào)是要回到總線空閑的狀態(tài),所以是從低電平變?yōu)楦唠娖剑?br />

5add7f98-da9f-11ed-a826-dac502259ad0.png


??發(fā)送到SDA線上的每個(gè)字節(jié)必須是8位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個(gè)字節(jié)后必須跟一個(gè)ACK應(yīng)答位,數(shù)據(jù)從最高有效位(MSB)開始傳輸。
??主機(jī)每發(fā)送完8bit數(shù)據(jù)后等待從機(jī)ACK。即在第9個(gè)clock,若從機(jī)發(fā)回ACK,SDA會(huì)被拉低。若沒有ACK,SDA會(huì)被置高,這會(huì)引起主控發(fā)生RESTART或STOP流程。根據(jù)近期實(shí)際開發(fā)經(jīng)驗(yàn),主機(jī)在第一次尋址失敗后,會(huì)再次尋址,如果兩次都失敗,那么SDA就會(huì)把電平拉高(同時(shí)SCL處于高電平狀態(tài)),結(jié)束通信。

5ae290fa-da9f-11ed-a826-dac502259ad0.png


??I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號(hào)。應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位(ACK簡(jiǎn)稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功。(無論是發(fā)送地址還是數(shù)據(jù),其后都緊跟著一個(gè)ACK/NACK。ACK和NACK由slave提供。)
??如果從機(jī)要在完成一些其他功能之后才能接收或發(fā)送下一個(gè)完整的數(shù)據(jù)字節(jié),則可以使時(shí)鐘線SCL 保持低電平,從而迫使主機(jī)進(jìn)入等待狀態(tài)。當(dāng)從機(jī)準(zhǔn)備好接收下一個(gè)數(shù)據(jù)字節(jié),并且釋放時(shí)鐘線SCL 后,數(shù)據(jù)傳輸繼續(xù)。
??當(dāng)主控器接收數(shù)據(jù)時(shí),在最后一個(gè)數(shù)據(jù)字節(jié),必須發(fā)送一個(gè)非應(yīng)答信號(hào)(NACK),使受控器釋放數(shù)據(jù)線,以便主控器產(chǎn)生一個(gè)停止信號(hào)來終止總線的數(shù)據(jù)傳送。
??在起始信號(hào)結(jié)束后,發(fā)送一個(gè)7bit的從設(shè)備地址,然后緊跟著讀寫標(biāo)志位(“0”表示寫,“1”表示讀)。如果從設(shè)備有回應(yīng),就可以繼續(xù)讀寫數(shù)據(jù),具體讀寫哪個(gè)寄存器也要有所說明。

5ae83d7a-da9f-11ed-a826-dac502259ad0.png

二、邏輯分析儀抓取總線波形

??在實(shí)際工作中可以使用邏輯分析儀抓取I2C總線的波形進(jìn)行排故。

5b0102a6-da9f-11ed-a826-dac502259ad0.png


??由于我手上只有杜邦線,缺少邏輯分析儀專用的數(shù)據(jù)線(一頭帶夾子,如下圖所示),沒有辦法在連接外設(shè)的同時(shí)抓取波形,所以此處只能簡(jiǎn)單抓取主設(shè)尋址外設(shè)的波形。
??抓取波形使用的軟件是USBee Suite,如下圖所示:

5b29e13a-da9f-11ed-a826-dac502259ad0.png


5b3368fe-da9f-11ed-a826-dac502259ad0.png


??快速設(shè)置信號(hào)4,5為I2C總線,這種設(shè)置方法也決定了硬件上的連接。

5b47ec84-da9f-11ed-a826-dac502259ad0.png


??設(shè)置采樣率和樣本數(shù)如圖所示:

5b5ecec2-da9f-11ed-a826-dac502259ad0.png


??設(shè)置下降沿觸發(fā)(倒數(shù)第3個(gè)信號(hào)通道,軟件上標(biāo)注的SDA和SCL并不是實(shí)際上的SDA和SCL,這是一個(gè)軟件BUG,根據(jù)波形來判斷,有規(guī)律的進(jìn)行跳變的就是SCL, 另外一個(gè)是SDA.):

5b74d7d0-da9f-11ed-a826-dac502259ad0.png


??使用單次觸發(fā)方式捕獲波形:

5b991de8-da9f-11ed-a826-dac502259ad0.png


??實(shí)際捕獲到的波形如下圖所示:

5bb2197e-da9f-11ed-a826-dac502259ad0.png


5bc2a190-da9f-11ed-a826-dac502259ad0.png


??根據(jù)波形可以看出,GM5主設(shè)兩次尋址地址為0X22的從設(shè)備,但是沒有收到從設(shè)備的回應(yīng)(NACK),最終主設(shè)停止了本次通信。


原文標(biāo)題:二、邏輯分析儀抓取總線波形

文章出處:【微信公眾號(hào):愛搞研究的阿燦】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    774

    瀏覽量

    29729
  • I2C總線
    +關(guān)注

    關(guān)注

    8

    文章

    386

    瀏覽量

    60743
  • 邏輯分析儀
    +關(guān)注

    關(guān)注

    3

    文章

    213

    瀏覽量

    23094
  • I2C通信
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    8778
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i2c總線介紹

    I2C介紹   I2C總線是兩線式串行總線。    I2C總線最主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性,支持多主控(multimastering)。&nb
    發(fā)表于 08-13 17:29 ?0次下載

    HT45R37使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法 (C語言)

    HT45R37使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法 (C語言)HT45R37 提供SIM 串行傳輸功能,分別是SPI 功能和I2C 功能,本文介紹H
    發(fā)表于 03-27 08:36 ?12次下載

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法 HT56R678 內(nèi)建有SIM 功能,其中包括了SPI 和I2C 兩種通信接口,本文以HT56R678 為母體,
    發(fā)表于 03-27 09:25 ?16次下載

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法HT56R678 內(nèi)建有SIM 功能,其中包括了SPI 和I2C 兩種通信接口,本文以HT56R678 為母體,
    發(fā)表于 03-28 22:39 ?7次下載

    模擬I2C總線多主節(jié)點(diǎn)通信原理及實(shí)現(xiàn)方法

    摘要 介紹模擬I2C總線的多主節(jié)點(diǎn)通信原理,并提出一種新的實(shí)現(xiàn)方法。這種采用延時(shí)接收比較來實(shí)現(xiàn)仲裁的方法,可使不具有
    發(fā)表于 06-18 17:57 ?5485次閱讀
    模擬<b class='flag-5'>I2C</b>總線多主節(jié)點(diǎn)<b class='flag-5'>通信</b>原理及實(shí)現(xiàn)<b class='flag-5'>方法</b>

    labview與i2c通信的編程問題

    labview與i2c通信的編程問題,適合新手看看
    發(fā)表于 12-09 15:49 ?205次下載

    I2C總線的結(jié)構(gòu)介紹

    內(nèi)容摘要:介紹I2C總線的結(jié)構(gòu)、工作原理、數(shù)據(jù)傳輸方式,討論了基于I2C總線的多機(jī)通信軟硬件設(shè)計(jì),實(shí)現(xiàn)了程控交換多機(jī)通信調(diào)度指揮系統(tǒng)。
    發(fā)表于 02-29 15:44 ?6次下載

    STM32F2通信接口I2C

    STM32F2通信接口I2C
    發(fā)表于 09-03 11:24 ?31次下載
    STM32F<b class='flag-5'>2</b>—<b class='flag-5'>通信</b>接口<b class='flag-5'>I2C</b>

    I2C通信協(xié)議應(yīng)該如何學(xué)習(xí)

    我最近剛做完I2C通信協(xié)議的編寫與調(diào)試,下面介紹一下我從一開始理解夏老師的程序,修改程序,直到下板調(diào)試整個(gè)的學(xué)習(xí)過程,希望對(duì)大家學(xué)習(xí) I2C 有一定的幫助。一、 分析源代碼學(xué)習(xí)
    發(fā)表于 04-28 08:00 ?21次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>協(xié)議應(yīng)該如何學(xué)習(xí)

    I2C總線的基本通信總結(jié)

    在電子設(shè)計(jì)開發(fā)中I2C大家已經(jīng)很熟悉了,每一種電子產(chǎn)品小到電子開關(guān),大到衛(wèi)星通信都會(huì)利用的I2C總線。據(jù)統(tǒng)計(jì)I2C在電子產(chǎn)品中占據(jù)了93%的份額,幾乎任何一種電路都要使用。
    的頭像 發(fā)表于 08-26 14:08 ?1.8w次閱讀
    <b class='flag-5'>I2C</b>總線的基本<b class='flag-5'>通信</b>總結(jié)

    硬件I2C與模擬I2C

    硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    AN036 基于EEPROM通信I2C總線鎖死解決方法

    AN036 基于EEPROM通信I2C總線鎖死解決方法
    發(fā)表于 02-23 19:09 ?0次下載
    AN036 基于EEPROM<b class='flag-5'>通信</b>的<b class='flag-5'>I2C</b>總線鎖死解決<b class='flag-5'>方法</b>

    I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus

    I2C,即Inter-Integrated Circuit,是一種常用的串行通信協(xié)議,用于在器件之間——特別是兩個(gè)或兩個(gè)以上不同電路之間建立通信。I2C Primer是最常用的
    的頭像 發(fā)表于 06-15 15:29 ?5134次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>協(xié)議:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    I2C控制器驅(qū)動(dòng)介紹

    適配器與 I2C 設(shè)備進(jìn)行通信方法I2C 總線驅(qū)動(dòng),或者說 I2C 適配器驅(qū)動(dòng)的主要工作就是初始化
    的頭像 發(fā)表于 07-22 15:38 ?1330次閱讀
    <b class='flag-5'>I2C</b>控制器驅(qū)動(dòng)<b class='flag-5'>介紹</b>

    UART、SPI、I2C比較 串口通信介紹

    UART、SPI、I2C比較 I2C線更少,比UART、SPI更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)?b class='flag-5'>I2C需要有雙向IO的支持,而且使用上拉電阻,抗干擾能力較弱,一般用于同一板卡上芯片之間的
    的頭像 發(fā)表于 11-09 18:06 ?1197次閱讀
    UART、SPI、<b class='flag-5'>I2C</b>比較 串口<b class='flag-5'>通信</b><b class='flag-5'>介紹</b>