GPIO實現I2C協議模擬(1)
阿新 • • 發佈:2018-11-30
最近需要用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)