I2C 基础原理详解
今天來學習下I2C通信~
I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之間的(Inter) 通信方式。如上圖所以有很多的周邊設備都是用I2C通信方式進行通信的。
I2C(Inter-Intergrated Circuit)通信使用Clock Line(SCL:Serial Clock)和Data Line(SDA:Serial Data)。數據通過時鐘同步經過數據線進行傳輸。這里生成時鐘信號并輸出的設備便是Master, 時鐘信號作為輸入并接受數據的設備便是Slave。一般情況下Master便是MicroController,Slave便是周邊的設備,比如RTC, EEPROM, TOUCH等等。
上面我們提到I2C是同步通信的。同步通信需要獨立的時鐘線進行同步傳輸數據。我們看上面的圖可以知道這里只有一根數據線。我們用一根數據線來同時進行數據發送和數據接受。那么我們為什么需要設定通信速度呢?對于同步通信,有了獨立的時鐘信號進行同步發送數據根本不需要匹配Bit Width的啊?為什么同步通信還要設置通信速度呢?
在I2C中我們說的通信速度指的是Clock的最大速度(MAX SPEED),比方說Slave最多只能在100KHz下工作,但是Master在400KHz的頻率下工作,這樣的話他們就不能進行正常數據通信,所以我們需要設定設備時鐘的最大速度。
現在我們對I2C的基本通信情況是不是有了初步的了解了呢?
現在我們的Master想發送數據給Slave,但是周邊有很多的Slave,那么Master怎么把數據發送給自己向發送的設備呢?用Device Address(設備地址)!
Master為了能將數據發送給想發送的設備就需要能區分設備(slave)的方法。Master通過設備的地址來區分周邊的設備并進行數據接發。也就是說Master通過[設備地址&R/W+數據]形式的數據發送到I2C bus中,所有的設備讀取bus上的這些數據,判斷是不是發送給自己的,如果是發送給自己的就給Master一個響應。
前面我們一直提到I2C是通過同步時鐘在數據線(SDA)上進行數據接發的。這里我們來邊看圖邊分析看看。一般情況下同步時鐘上升沿或者是下降沿來接受或者發送數據的。但是I2C是在高電平(HIGH)的區間里數據有效,低電平區間內數據進行轉換的。
前面我們通過硬件方式了解了下數據是怎么發送接收的。那么數據在發送接收之前數據接發的開始標記和結束標記是如何通過硬件方式來規定的呢?數據接受發送的時候必須要知道開始標記和結束標記才能進行正常的數據接受對吧??
I2C的開始標記和結束正如圖所示。時鐘信號在高電平的情況下數據信號從高電平轉為低電平的話即為I2C通信的開始標記,時鐘信號在高電平的情況下數據信號有低電平轉為高電平的話即為I2C通信結束標記。
現在我們基本了解了硬件形式下I2C的[START+DATA+STOP]是如果進行工作的。現在我們來了解下I2C通信的最小單位是怎樣的。Master在時鐘信號為高電平并且數據信號有高電平轉為低電平的時候開始I2C通信。然后伴隨著時鐘的同步進行8bit的數據傳送或者是接受。后面第9bit的數據(ACK)是用來確認數據接發是否正常。最后時鐘信號高電平并且數據信號有低電平轉為高電平,即I2C通信終止結束。就是這樣I2C包含ACK總共9bit為通信的最小單位. 了解了這些,下面我們來看看上面提到過的[Device Address&R/W + data]形式的數據是如何傳輸的。
1. Master在時鐘信號->High并且數據信號由高電平轉為低電平,I2C通信開始。
2. Maste伴隨著時鐘同步傳輸8bit的數據。這里說的8bit數據指的是7bit的Device Address和1bit的R/W。
3. 這里的Device Address在我們用的設備DataSheet里面有說明的。這里需要注意到是比方說設備地址是1101000(0x68, 7bit),數據傳輸的時候因為要和1bit的W/R一起,所以這里要將device address左移一位,然后和W/R進行OR操作。
4. Master傳輸的設備地址對應的設備是否正確接發通過ACK進行響應確認。
5. 如果Master只是以 START + data 8bit(device address&R/W) + ACK這種格式發送后就結束的話也可以。但是一般情況下在地址發送之后緊接著會發送數據。
6. Master能對特定的設備進行數據發送或者是數據接受。在設備地址數據發送之后便可緊接著要發送的數據或者是要接受的數據。
7. Master在發送或者接受數據的時候不需要規定要發送或者接受多少bit 的數據。因為這個依據不同設備而不同,所以依據設備自己想要的格式進行收發數據即可。
8. Master在時鐘信號為高電平并且數據信號有低電平轉為高電平的話便終止結束通信。
現在我們已經了解了I2C整個通信過程中的數據格式以及通信方式。實際寫代碼過程中依據Datasheet中說明的Register情況來寫就可以了。
I2C部分到此結束~
未經允許不得轉載:浩瀚先森?I2C 基礎原理詳解
總結
以上是生活随笔為你收集整理的I2C 基础原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP和PHPINFO
- 下一篇: 家庭wifi,如何组网最合适