IIC協議學習筆記

  IIC總線(Inter-Integrated Circuit)即集成電路總線,是PHILIPS公司設計出來的一種簡單、雙向、二線制、同步串行總線。IIC總線是一個多向控制總線,多個器件(從機)能夠同時掛載到一個主機控制的一條總線上。每一個鏈接在總線上的設備都是經過惟一的地址和其餘器件通訊,主機和從機的角色可互換,html

  主機和從機的概念。主機就是負責整個系統的任務協調與分配,從機通常是經過接收主機的指令從而完成某些特定的任務,主機和從機之間經過總線鏈接,進行數據通信。咱們平時使用的我的電腦也就是這個概念。微信

  IIC協議爲半雙工協議。學習

  全雙工指在發送數據的同時也可以接收數據,二者同步進行。目前的網卡通常都支持全雙工。ui

  半雙工就是指一個時間段內只有一個動做發生,早期的對講機、以及早期集線器等設備都是基於半雙工的產品。spa

  還有一種單工通訊是指通訊線路上的數據按單一方向傳送.。設計

  數據有效傳輸在scl信號的高電平期間,sda數據線保持穩定,在scl爲低電平時容許sda數據線變化。3d

  起始條件在scl爲高電平期間,sda出現降低沿,則爲起始信號。htm

 

  結束條件在scl爲高電平期間,sda出現上升沿,則爲結束信號。blog

 

  總結:當scl爲高電平的時候,sda爲出現降低沿爲start位, sda出現上升沿爲stop位,因此在scl爲高電平的時候sda應該保持穩定不能隨意亂動。這就又回到了數據傳輸有效的條件,只有在scl爲低電平期間,才容許數據變化,在高電平期間,不容許數據變化,不然就會出現起始位或結束位。get

  應答(ACK,Acknowledgement)。即確認字符,在數據通訊中,接收站發給發送站的一種傳輸類控制字符。主機每向從機發送完一個字節的數據,主機老是須要等待從機給出一個應答信號,來確認從機是否成功接收到了數據,從機應答主機所須要的時鐘也是由主機提供的,應答出如今每一次主機完成8個數據位傳輸後緊跟着的時鐘週期,低電平0表示應答,1表示非應答。,須要應答時,數據發出方將SDA總線設置爲3態輸入,因爲IIC總線上有上拉電阻,所以此時總線默認高電平,若數據接收方正確接收到數據,則數據接收方將SDA總線拉低,以示正確應答。

  IIC傳輸時時從MSB開始傳輸到LSB結束。MSB是Most Significant Bit的縮寫,最高有效位。在二進制數中,MSB是最高加權位。與十進制數字中最左邊的一位相似。一般,MSB位於二進制數的最左側,LSB位於二進制數的最右側。LSB,英文 least significant bit,中文義最低有效位。

IIC寫時序

ID_Address, REG_Address, W_REG_Data

(1)   產生start位

(2)   傳送器件地址ID_Address,器件地址的最後一位爲數據的傳輸方向位,R/W,低電平0表示主機往從機寫數據(W),1表示主機從從機讀數據(R)。ACK應答,應答是從機發送給主機的應答,這裏不用管。

(3)   傳送寫入器件寄存器地址,即數據要寫入的位置。一樣ACK應答不用管。

(4)   傳送要寫入的數據。ACK應答不用管。

(5)   產生stop信號。

 

IIC讀時序

{ID_Address + REG_Address} + {ID_Address + R_REG_Data}

(1)   產生start信號

(2)   傳送器件地址(寫ID_Address),ACK。

(3)   傳送字地址(寫REG_Address),ACK。

(4)   再次產生start信號

(5)   再傳送一次器件地址,ACK。

(6)   讀取一個字節的數據,讀數據最後結束前無應答ACK信號。

(7)   產生stop信號。

  從時序圖上能夠看出,IIC讀時序要寫兩次器件地址,剛開始接觸的時候我也很疑惑 dummy write。我我的這樣理解這裏,首先傳送器件地址到總線上找到器件,而後寫入寄存器地址,也就是word address找到須要讀取數據的地址,但並非真正的寫入數據因此叫作dummy wirte(假寫)。而後再傳輸一次器件地址後開始讀數據。

  IIC協議在讀寫數據時,老是要發送器件地址,這裏須要注意的是,不是主機給從機發送地址,而是主機給地址總線上發送地址,掛IIC總線上的全部從機都能收到地址,若是發過來的地址和本身的地址匹配上了,從機就會給主機一個應答,這樣就創建起來了一個通信。因此我在想,若是從機的器件是徹底同樣的,那麼IIC協議就能夠同時給多個從機,即對多個器件進行配置。這種理論上是可行的,但實際上是不行的,IIC協議就是經過地址不一樣來判斷給哪一個器件傳送數據的,若是兩個器件的地址徹底同樣,器件會產生應答,那麼兩個器件就經過競爭判斷給誰通訊了,有隨機性。即IIC協議一次只能和一個設備/器件進行通信。

IIC讀寫時序補充

    雙字節地址寫時序,寫入器件地址,寫入寄存器地址高位、低位,而後寫數據。

    多數據寫時序,寫入器件地址,寫入寄存器地址,連續寫入數據。

    雙字節地址多數據寫時序,寫入器件地址,寫入寄存器地址高位、低位,而後連續寫入數據。

    雙字節地址讀時序,寫入器件地址,寫入寄存器地址高位、低位,而後再次寫入器件地址,寫入數據。讀數據最後結束前無應答ACK信號。

  多數據讀時序,寫入器件地址,寫入寄存器地址,,而後再次寫入器件地址,連續寫入數據。讀數據最後結束前無應答ACK信號。

  雙字節地址多數據讀時序,寫入器件地址,寫入寄存器地址,,而後再次寫入器件地址,連續寫入數據。讀數據最後結束前無應答ACK信號。

 

 轉載請註明出處:NingHeChuan(寧河川)

我的微信訂閱號:開源FPGA

若是你想及時收到我的撰寫的博文推送,能夠掃描左邊二維碼(或者長按識別二維碼)關注我的微信訂閱號

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/8595423.html

相關文章
相關標籤/搜索