聊聊通訊協議 I2C 子系統
I2C Transfer
Definition of timing
想要深入探討 I2C 協議,必須深刻理解各種時間的定義(F/S-mode)
標識符 | 定義 |
tf | 信號下降時間 |
tr | 信號上升時間 |
tLOW | 信號低電平時間 |
tHIGH | 信號高電平時間 |
tHD;DAT | 數據保持時間 |
tSU;DAT | 數據建立時間 |
tSP | 輸入濾波器必須抑制的毛刺脈寬 |
tBUF | 啟動和停止條件的空閑時間 |
tHD;STA | 重復起始條件的保持時間 |
tSU;STA | 重復起始條件的建立時間 |
tSU;STO | 停止條件建立時間 |
Sr 重新啟動,S 啟動,P 停止。
note:SCL 高電平的時候,SDA 是高就是 1,是低就是 0。SCL 低電平期間,SDA 變換數據。
note:起始條件很容易理解,重復起始條件就是沒有STOP,再來了一個 START,然后發送另外一個從設備 ID,訪問其他從設備。
定義術語
1.數據有效性
在 SCL 高電平期間,SDA 必須穩定,所以一般情況下,SCL 高電平寬度小,SDA 高電平寬度大,用示波器看也是這樣的。
2.起始條件和停止條件
起始條件:SCL 高電平時,SDA 由高變低。
停止條件:SCL 高電平時,SDA 由低變高。
一般每傳輸一個字節(8 bit),就會重新開始。SDA 在 SCL 是低電平期間變換數據,不可以在 SCL 高電平期間變換數據,否則會認為是 起始和停止條件。
- 傳輸長度必須是一個字節(8 bit)
- 每次傳輸的字節不受限制
- 數據必須以 MSB 開頭進行傳輸,也就是先傳輸最高位
- 從機可以將時鐘線 SCL 保持在低位,迫使主機進入等待狀態。
3.ACK or NACK
每次傳輸完一個字節以后,從設備要進行一個回應,回應 ACK 或者 NACK。
ACK :在傳輸 8 bit 以后,在第九個 bit ,SCL 高電平,如果 SDA 是低電平,說明回應了 ACK。
NACK:在傳輸 8 bit 以后,在第九個 bit ,SCL 高電平,如果 SDA 是高電平,說明回應了 NACK。
4.write data
5.read data
6.復合格式
7.I2C Transfer Regulation
- 以 START 條件開始
- 以 STOP 條件結束
- 傳輸的第一個字節為 7bit 從機地址 + 1bit 讀寫位
- 每個總線上的設備都會比較 STRAT 信號后面的 7bit 地址與自己的地址是否匹配
- 每個 byte(8 bits) 后面都會有 ACK 或者 NACK
- 在 START 信號或者 repeated START 信號后,從機必須重置自己的總線邏輯
- 一個 START 后面緊跟著一個 STOP 信號,是非法格式
- 主機 master 可以不產生 STOP 信號,而是直接產生一個 repeated START 信號+另外一個設備地址,直接開始訪問另外一個設備
8.10-bit addressing
解析如下:
A9-A0 表示 10bits 地址
9、示波器波形圖
10.補充
I2C 不支持從設備在 SCL 和 SDA 總線上發起一個中斷,通知主設備來讀數據。有中斷需求的從設備需要額外接一根中斷線,通知主控數據已經準備好,讓主控發起讀數據的操作。