一、I2C總線的介紹
??I2C是一種非常常見的通信協(xié)議,是philips公司提出的,由數(shù)據(jù)線SDA和時鐘線SCL兩條雙向信號線組成,CPU利用串行時鐘線發(fā)出時鐘信號,利用串行數(shù)據(jù)線發(fā)送或者接受數(shù)據(jù)。SDA線傳輸數(shù)據(jù)是大端傳輸(字節(jié)高位先傳),每次傳輸8bit,即1字節(jié)。支持多主控,任何時間點只能有一個主控。每個連接到總線的設備都有一個獨立的地址addr,共7個bit,主機正是利用該地址對設備進行訪問(這是I2C和SPI最大的不同點之一,I2C對從設備進行操作需要知道從設備地址,然后進行尋址;而SPI則不需要通過設備地址尋址)。
??當總線空閑的時候,SDA和SCL都是高電平。在數(shù)據(jù)傳輸過程中,SCL為高電平的時候,SDA線必須保持穩(wěn)定,SDA上傳輸1個bit數(shù)據(jù);當SCL為低電平的時候,SDA線才可以改變電平。簡言之,只有當SCL為高電平時,SDA的數(shù)據(jù)才有意義。
![5ad07028-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_KARpBgAABibVFJnG8938.png)
??開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。起始信號由主控制器產(chǎn)生。
??結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數(shù)據(jù)。結束信號也只能由主控制器產(chǎn)生。
??(記憶竅門:因為總線空閑時兩根線都是高電平,所以開始信號是由高電平變?yōu)榈碗娖剑欢Y束信號是要回到總線空閑的狀態(tài),所以是從低電平變?yōu)楦唠娖剑?br />
![5add7f98-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_KAQ9jWAABTcx6km3s464.png)
??發(fā)送到SDA線上的每個字節(jié)必須是8位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個字節(jié)后必須跟一個ACK應答位,數(shù)據(jù)從最高有效位(MSB)開始傳輸。
??主機每發(fā)送完8bit數(shù)據(jù)后等待從機ACK。即在第9個clock,若從機發(fā)回ACK,SDA會被拉低。若沒有ACK,SDA會被置高,這會引起主控發(fā)生RESTART或STOP流程。根據(jù)近期實際開發(fā)經(jīng)驗,主機在第一次尋址失敗后,會再次尋址,如果兩次都失敗,那么SDA就會把電平拉高(同時SCL處于高電平狀態(tài)),結束通信。
![5ae290fa-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_KANhnJAAC-rPh_qxY355.png)
??I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個字節(jié),就在時鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個應答信號。應答信號為低電平時,規(guī)定為有效應答位(ACK簡稱應答位),表示接收器已經(jīng)成功地接收了該字節(jié);應答信號為高電平時,規(guī)定為非應答位(NACK),一般表示接收器接收該字節(jié)沒有成功。(無論是發(fā)送地址還是數(shù)據(jù),其后都緊跟著一個ACK/NACK。ACK和NACK由slave提供。)
??如果從機要在完成一些其他功能之后才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié),則可以使時鐘線SCL 保持低電平,從而迫使主機進入等待狀態(tài)。當從機準備好接收下一個數(shù)據(jù)字節(jié),并且釋放時鐘線SCL 后,數(shù)據(jù)傳輸繼續(xù)。
??當主控器接收數(shù)據(jù)時,在最后一個數(shù)據(jù)字節(jié),必須發(fā)送一個非應答信號(NACK),使受控器釋放數(shù)據(jù)線,以便主控器產(chǎn)生一個停止信號來終止總線的數(shù)據(jù)傳送。
??在起始信號結束后,發(fā)送一個7bit的從設備地址,然后緊跟著讀寫標志位(“0”表示寫,“1”表示讀)。如果從設備有回應,就可以繼續(xù)讀寫數(shù)據(jù),具體讀寫哪個寄存器也要有所說明。
![5ae83d7a-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_OAJ_yfAAEo1LTaEsg401.png)
二、邏輯分析儀抓取總線波形
??在實際工作中可以使用邏輯分析儀抓取I2C總線的波形進行排故。
![5b0102a6-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_OAYxamAAQAAVl7r6Q608.png)
??由于我手上只有杜邦線,缺少邏輯分析儀專用的數(shù)據(jù)線(一頭帶夾子,如下圖所示),沒有辦法在連接外設的同時抓取波形,所以此處只能簡單抓取主設尋址外設的波形。
??抓取波形使用的軟件是USBee Suite,如下圖所示:
![5b29e13a-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_OAdNCUAAFAR5zGWr8649.png)
![5b3368fe-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_OAWHb6AACKU4N7UrM593.png)
??快速設置信號4,5為I2C總線,這種設置方法也決定了硬件上的連接。
![5b47ec84-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_OAEuVPAADfy03zP8M073.png)
??設置采樣率和樣本數(shù)如圖所示:
![5b5ecec2-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_SAJS2SAACl0wevK1Q351.png)
??設置下降沿觸發(fā)(倒數(shù)第3個信號通道,軟件上標注的SDA和SCL并不是實際上的SDA和SCL,這是一個軟件BUG,根據(jù)波形來判斷,有規(guī)律的進行跳變的就是SCL, 另外一個是SDA.):
![5b74d7d0-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_SAAg7xAADFH9_Ap84013.png)
??使用單次觸發(fā)方式捕獲波形:
![5b991de8-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_SAL-kYAADkh7WVtKE433.png)
??實際捕獲到的波形如下圖所示:
![5bb2197e-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_SAO6HdAAEYX9fLHfk056.png)
![5bc2a190-da9f-11ed-a826-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/CE/wKgZomTni_SARONgAACMiaNZPkI268.png)
??根據(jù)波形可以看出,GM5主設兩次尋址地址為0X22的從設備,但是沒有收到從設備的回應(NACK),最終主設停止了本次通信。
原文標題:二、邏輯分析儀抓取總線波形
文章出處:【微信公眾號:愛搞研究的阿燦】歡迎添加關注!文章轉載請注明出處。
-
網(wǎng)絡通信
+關注
關注
4文章
814瀏覽量
29947 -
I2C總線
+關注
關注
8文章
406瀏覽量
61166 -
邏輯分析儀
+關注
關注
3文章
214瀏覽量
23270 -
I2C通信
+關注
關注
0文章
22瀏覽量
8920
發(fā)布評論請先 登錄
相關推薦
i2c總線介紹
HT45R37使用I2C進行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法 (C語言)
HT56R678使用I2C進行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法
HT56R678使用I2C進行數(shù)據(jù)傳輸?shù)?b class='flag-5'>方法
模擬I2C總線多主節(jié)點通信原理及實現(xiàn)方法
![模擬<b class='flag-5'>I2C</b>總線多主節(jié)點<b class='flag-5'>通信</b>原理及實現(xiàn)<b class='flag-5'>方法</b>](https://file1.elecfans.com//web2/M00/A5/9F/wKgZomUMOUeAMHRAAACmQWkrAwI522.jpg)
I2C總線的結構介紹
I2C通信協(xié)議應該如何學習
![<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>協(xié)議應該如何學習](https://file.elecfans.com/web1/M00/BB/37/o4YBAF6n8-eAKCBVAABu7nGwVZk852.png)
I2C總線的基本通信總結
![<b class='flag-5'>I2C</b>總線的基本<b class='flag-5'>通信</b>總結](https://file.elecfans.com/web2/M00/12/47/pYYBAGEnMfaACT1zAAAOklqCJ7Y988.jpg)
硬件I2C與模擬I2C
![硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus
![<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>協(xié)議:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus](https://file1.elecfans.com/web2/M00/89/C6/wKgZomSKvsWAdY77AAA276SHfaM213.png)
UART、SPI、I2C比較 串口通信介紹
![UART、SPI、<b class='flag-5'>I2C</b>比較 串口<b class='flag-5'>通信</b><b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/AF/16/wKgZomVMrA-ACKPtAAGDEYJ9eV0752.jpg)
評論