2018年1月2日 星期二

淺談I2C(Inter-Integrated Circuit Bus)

I2C

Inter-Integrated Circuit Bus 的簡稱,

最初由飛利浦公司制定用來讓CPU與週邊低速裝置溝通的協定,

後來產權都轉移給NXP公司,


I2C匯流排很簡單,

只有兩條線SDA 與 SCL,

每一個I2C 裝置都有一個slave address,

slave address 通常以7 bit長度的十六進制表示,

也就是說除了保留的16的位址以外,

最多能夠連接112個裝置,


常見的I2C匯流排依照速率可分為

標準模式:

    100K bit/s

低速模式:

    10K bit/s

快速模式:

    400K bit/s

高速模式:
 
    3.4M bit/s



I2C 兩條訊號線 SDA與SCL,

通常有pull high 電阻,

用以讓其維持在高準位

一般狀況下,

SDA只有在SCL為LOW的時候才能改變資料,

SCL為HIGH時SDA必須維持訊號穩定,

只有在特殊情形時,

SDA會在SCL為HIGH時候改變

例如

訊號開始(START)與結束(STOP)



底下是一個標準的I2C 資料傳輸的簡圖

一個標準的I2C 封包除了start 與 stop 訊號以外,

由8個 bit 組成(1 byte),

加上一個ACK(low) /NACK (high) bit

才是一個完整的I2C封包

I2C傳輸的第一個byte最為重要,

因為前面提到的slave address 就在這個byte中,

最低位元為read /write 的控制bit



I2C的write傳輸如下圖:

I2C的read傳輸如下圖:


一個混合模式的I2C傳輸:










沒有留言: