IIC串行總線的組成及其工作原理
------------------最近項目上用到了一款美信的DS1308RTC芯片,由於是掛在了Zynq的PS MIO上,需要軟件人員協助才能測試;覺得太麻煩了,想通過飛線,然後在Vivado中調用IIC的IP核,在PL端實現IIC的讀寫,借此驗證此芯片的功能是否正常。因此簡單學習一下IIC的協議,順便借此提升一下對IIC的認識---------------
常用的串行擴展總線有:IIC總線、SPI總線與UART總線。
IIC總線只有兩根雙向信號線。一根是數據線SDA,另一根是時鐘線SCL。
IIC總線通過上拉電阻接正電源。當總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關系。
每個IIC總線上的器件都有唯一的地址。主機與其它器件間的數據傳送可以是由主機發送數據到其它器件,這時主機即為發送器,由總線上接收數據的器件則為接收器。
>>>數據位的有效性規定
IIC總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平器件,數據線上的高電平或低電平狀態才允許變化。
>>>起始和終止信號
SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。
起始和終止信號都是由主機發出的,在起始信號產生後,總線就處於被占用的狀態;在終止信號產生後,總線就處於空閑狀態。
備註:接收器件收到一個完整的數據字節後,有可能需要完成一些其它工作,如處理內部中斷服務等,可能無法立即接收下一個字節,這時接收期間可以將SCL線拉成低電平,從而使主機處於等待狀態。直到接收器件準備好接收下一個字節時,再釋放SCL線使之為高電平,從而使數據傳送可以繼續進行。
>>>數據傳送格式
1 每一個字節必須保證是8位長度。數據傳送時,先傳送最高位MSB,每一個被傳送的字節後面都必須跟隨一位應答位(即一幀共有9位)。
2 數據幀格式
IIC總線上傳送的數據信號是廣義的,既包括地址信號,又包括真正的數據信號。
在起始信號後必須傳送一個從機的地址(7位),第8位是數據的傳送方向位(R/T),用“0”表示主機發送數據(T),“1”表示主機接收數據(R)。每次數據傳送總是由主機產生的終止信號結束。但是,若主機希望繼續占用總線進行新的數據傳送,則可以不產生終止信號,馬上再次發出起始信號對另一從機進行尋址。
傳送數據的組合方式:
A、主機向從機發送數據,數據傳送方向在整個傳送過程中不變。
B、主機在第一個字節後,立即從從機讀數據
C、在傳送過程中,當需要改變傳送方向時,起始信號和從機地址都被重復產生一次,但兩次讀/寫方向位正好相反
>>>總線的尋址
IIC總線協議有明確的規定:采用7位的尋址字節(尋址字節時起始信號後的第一個字節)。
主機發送地址時:總線上的每個從機都將這7位地址碼與自己的地址進行比較,如果相同,則認為自己正被主機尋址,根據R/T位將自己確定為發送器或接收器。
從機的地址:由固定部分和可編程部分組成。
IIC串行總線的組成及其工作原理