簡介
I2C (Inter - Intertraed circuit)內部整合電路,顧名思義就是主要控制短距離的內部裝置,而不適用於長距離的傳輸,I2C有不同的速度模式通常都是雙向傳輸,如標準模式100 Kbit/s、低速模式 10 Kbit/s、快速模式400Kbit/s、高速模式3.4Mbit/s。但還是有單向輸出的超快速模式5Mbit/s。
其bus的傳輸主要是SDA、SCL兩條線傳輸,以open drain 的方式,決定0、1準位,同時也代表有wire-AND的情況。
- SDA:序列資料,傳輸資料(data)、位址(address)。
- SCL:序列時脈,傳輸時脈(clock)訊號。
資料傳輸規則
I2C有master-slave的概念,所以在討論傳輸的方式時,應該要先釐清此點,每一個裝置都有獨立的位址(address),master、slave可發送也可以接收。
- Master:主動與slave溝通,並且可以控制SCL。
- Slave:當被master定址時,做出回應。
以SDA、SCL的變化為主體,傳輸時主要有四種模式:(1:高準位、0:低準位)
- START:當SCL為1時,SDA由1->0。
- SDA資料變化:SCL為0時。(SDA不一定要變化)
- 傳送/接收資料:SCL為1時。
- STOP:當SCL為1時,SDA由0->1。
當SCL在低準位的時候,SDA可以變換傳輸資料;當SCL在高準位的時候,SDA需要保持在穩定的狀態。
寫入write(是由左到右序列輸入,並非同時)
一開始會SDA、SCL都會是1,此時master傳送,SDA由1到0變換,對slave表示傳送開始,之後,便開始傳送位址(address),用以定址要接收資料的裝置,共有7 bits,再來是確定write/read(write為0,read為1) 1 bit,然後要確認資料是否有誤,會由slave傳送資料(ACK是用來確認master到slave的傳輸是否有誤,正常的話會由slave傳回0,應用到open drain的 wire-AND原理),最後才開始傳送資料(data),傳送完一樣需要確認ACK,只要不傳送STOP就會不斷的傳送,或著資料太多slave裝不下,slave就會傳送NACK停止。
讀入read(是由左到右序列輸入,並非同時)
前面基本上跟write一致,主要從W/R開始變化,當slave傳送ok的訊息後(ACK = 0),資料會由slave傳給master,最後ACK會由master傳送1表示正常,如果要不斷的繼續寫則由master傳送資料的ACK要等於1,只有傳送STOP時,ACK才會是0。