更新於 2024/10/09閱讀時間約 2 分鐘

I2C 學習

    簡介

      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:低準位)
    1. START:當SCL為1時,SDA由1-0。
    2. SDA資料變化:SCL為0時。(SDA不一定要變化)
    3. 傳送/接收資料:SCL為1時。
    4. 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。

       
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.