1. 程式人生 > >GPIO實現I2C協議模擬(1)

GPIO實現I2C協議模擬(1)

最近需要用GPIO模擬I2C協議,如果是在Linux下面比較簡單,但在Windows下面,是否有沒Linux那麼簡單了。

索性自己對I2C協議還有一些瞭解,翻了SPEC並結合示波器量出的實際訊號分析,總算有些成就,在這裡以做記錄

I2C是什麼,這裡不做介紹,網上資料太多.

要用GPIO模擬I2C協議,就是控制GPIO的High與Low,複製出與I2C通訊協議一樣的波形出來.

由於標準的I2C頻率在10K到100kHz之間,所以用GPIO模擬還是需要考慮一個IO動作時間問題.

個人推薦整個模擬動作在驅動裡面實現,如果在APP層通過IO驅動提供的IO RW來做,效能上面會慢很多

言歸正題

波形的理解.

I2C波形分為開始,傳送資料,接收資料, ACK, NACK, STOP這些行為.

SCL為Low時,可以修改SDA的狀態,SCL為HIGH時為電平穩定期,同時也是另一端接收時間


開始:     SCL為High的時候,SDA由High變為LOW

ACK:    SCL為High的時候,SDA為Low

NACK:    SCL為High的時候,SDA為High

傳送資料:  以8Bit為一個單元,一個BIT一個BIT的發,高位先發,低位後發,

接收資料:  同上

STOP :     SCL為High的時候,SDA由Low變為High


Master每傳送一個位元組後,都需要讀 Slave 的迴應,ACK表示執行成功,NACK表示Slave沒有響應.

Master接收Slave傳送的資料,每接收一個,都需要發一次ACK給SLAVE,然後再接收,接收完成後,需要發NACK及STOP給 Slave

綜上描述.

寫Slave的過程如下(BYTE)

image