1. 程式人生 > >I2C 基礎原理詳解

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部分到此結束~