前面的章節講述了單組 8 位數據的發送,但是僅僅發送單組數據往往是不夠的, 因為實際上I2C協議的芯片需要傳輸多組數據。在使用 PCF8563和 AT24C02 之類的芯片之前,我們需要准備好實現多組數據的發送代碼。
I2C 的多組數據連續發送與單組數據稍有差異,時序圖如下:
上圖由於長度關系只展示兩組數據,實際上的 I2C 通訊的數據一般在 4組以上。時序也是類似的,這里不再贅述。
經過多次調試實現的 I2C 多組數據連續發送代碼如下:
代碼將 I2C 的信號傳輸分為4個函數:
- 發送起始位 i2c_start_bit
- 發送數據位 i2c_data_bit
- 發送應答位 i2c_ack_bit
- 發送停止位 i2c_stop_bit
I2C 速率較高,在 I2C 的發送過程中如果進行計算數據發送會大大的延遲。所以,在發送前必須計算完所有需要發送的數據。
由於 Keil C51 不支持動態數組,這里的聲明的二維數組為 8 * 8的。這段代碼允許連續發送的數據不超過 8 個,如果數據超過這個限制就需要做出修改。
邏輯分析儀給出的結果如下:
邏輯分析儀輸出了四位數據 01、02、03、04,可以看到代碼工作的還算不賴。由於沒有接芯片,所以邏輯分析儀顯示 ACK 位沒有應答。
(●'◡'●),這樣的話,I2C 的部分就基本准備結束了,下一章節將以 PCF8563 為例,用 I2C 協議實現 RTC 的功能。