LPC11C14通信接口之I2C

1、什麼是IIC?

        IIC的英文全稱Inter-IntegratedCircuit(集成電路總線),是一種多向控制總線,由飛利浦半導體公司在八十年代初設計,主要是用來連接整體電路(ICS)。在IIC中,多個芯片可以連接到同一總線結構下,同時每個芯片都可以作爲實施數據傳輸的控制源,這種方式簡化了信號傳輸總線。

        因此,IIC實質是用來在芯片和外圍器件之間連接的通信接口。

2、IIC接線

    IIC通信一共要有2根線:SCL(時鐘線)和SDA(數據線)

    SCL時鐘線:控制IIC通信雙方進行數據傳遞控制

    SDA數據線:IIC通信雙方數據傳輸

    一個主設備可以連接多個從設備,那麼究竟什麼是主設備,從設備?IIC總線結構如下:

    所謂的主設備就是控制着SCL時鐘輸出的一方,那麼被動接收SCL的一方就是從設備了。

3、IIC通信協議

    IIC通信是屬於同步串行通信的一種,並且支持1對多的通信方式(一主多從),所以IIC通信我就以主設備發送一個字節的數據0xaa爲例講解IIC通信協議。

    首先,我們將發送一個字節0xaa需要解決的問題先思考下:

    (1)MSB(高位)還是LSB(低位)在前?

    0xaa轉換成二進制是1010 1010,而串口發送數據是一個bit位一個bit位的發送的,那麼在開始發送時應該先發送高位的1還是低位的0呢?

    這裏大家注意下,在同步串口通信中,一般是先發送高位,後發送低位。IIC就正好是同步串口通信的一種,所以發送0xaa的時候,是先從高位開始向低位的順序發送的。怎麼區分是同步還是異步呢,主要看通信接口中有沒有時鐘線SCL,有SCL的就是同步,反之沒有的就是異步。

    (2)開始發送的時候,怎麼區分總線的空閒和繁忙狀態?

    作爲通信接口,在收發雙方之間必然存在實際的物理連接線路,那麼線路必然存在兩種狀態:繁忙(有數據正在傳輸中)和空閒(線路空閒沒有數據傳輸),IIC的兩根線:SCL和SDA,在空閒的時候都是默認輸出高電平的。那麼怎麼開始數據的傳輸(從空閒到繁忙)、怎麼結束數據的傳輸(從繁忙到空閒)?

    既然IIC總線在空閒的時候,SCL和SDA都是輸出高電平,那麼IIC總線協議規定,組合信號:SCL保持高電平不變,SDA輸出低電平,產生下降沿突變,這個組合信號就是起始信號,用來是的IIC總線從開始的空閒態切換到繁忙態。

    (3)怎麼從主設備連接的多個從設備中選定要通信的從設備?

    IIC支持一個主設備連接多個從設備的方式,那麼在通信的時候只能有一個從設備和主設備建立通信,但是IIC又不能和SPI一樣,增添一個獨立的引腳用來區分,那IIC怎麼實現和從設備的連接呢?

    每一個IIC設備一般在出廠的時候都會編好號,這個編號就是IIC設備如果作爲從設備通信的時候的從設備地址。當然有些設備在出廠的時候可能沒有編號,比如咱們的LPC11C14,但是我們可以人爲寫入,只要注意這個IIC從設備地址是全球不唯一,但是在實際物理開發板上是惟一的原則就好。

    從設備地址一般是7個bit位寬度。

    所以,主設備要想從多個從設備中選中某一個從設備進行通信,只要知道這個從設備的地址就可以了(也必須要知道),在開始通信後(發送起始信號後),將要通信的從設備地址發送出去,那麼掛在IIC總線上的所有從設備都會受到從設備地址,這時候他們會和自己的從設備地址進行比較,看是否一樣,不一樣的從設備就會陷入休眠。

    (4)數據bit位中的1怎麼發送?bit位中的0怎麼發送?

    IIC數據位傳輸是一位一位傳輸的,每傳輸一個bit位,耗時SCL的一個時鐘週期,在這個時鐘週期內,低電平期間,向引腳發送數據,高電平期間,保持穩定不變,具體時序如下:

    (5)一次發送的幀的格式是什麼?

    IIC每次發送數據都是8bit一個字節爲單位。

    (6)能不能一次發送多個字節?如果能,怎麼發送?

    IIC可以一次發送多個字節,只要中途不出現停止信號,直接按順序發送就可以了。

    (7)發送方怎麼確定自己發送的數據接收方收到了?

    規範接收方每接收一個字節數據,都會在第9個時鐘週期給IIC發送方回一個ACK應答信號(發送方釋放SDA,從設備藉助SDA輸出低電平),否則其他情況全部視作NACK非應答信號(沒有收到信號、或者收到的是高電平)。

    (8)只有一根SDA用來進行收發數據,那麼怎麼判斷方向?

    在開始建立通信時,主設備發送了從設備地址,但是由於從設備地址寬度是7bit,而一次發送數據是一個字節,所以,通常做法是先將7個bit從設備地址邏輯左移1bit,在低位空出的bit位用來決定接下來通信的方向:0-表示發送,1-表示接收

    因此,所謂的IIC通信協議的實質就是爲了解決以上幾個問題,可以同以下結構體現:

4、IIC控制器和IIC協議之間的關係

    IIC通信協議就是上述的,規定實際通信過程的實現約定,這個只是書面約定,沒有付諸實現,而IIC控制器就是實現IIC通信協議的硬件,我們一般實現IIC通信協議的方法有兩種:通過IO口模擬IIC實訓實現、或者直接使用IIC控制器。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章