I2C 協議詳解(二)—— 多組數據連續發送


前面的章節講述了單組 8 位數據的發送,但是僅僅發送單組數據往往是不夠的, 因為實際上I2C協議的芯片需要傳輸多組數據。在使用 PCF8563和 AT24C02 之類的芯片之前,我們需要准備好實現多組數據的發送代碼。

I2C 的多組數據連續發送與單組數據稍有差異,時序圖如下:

上圖由於長度關系只展示兩組數據,實際上的 I2C 通訊的數據一般在 4組以上。時序也是類似的,這里不再贅述。

經過多次調試實現的 I2C 多組數據連續發送代碼如下:

代碼將 I2C 的信號傳輸分為4個函數:

  1. 發送起始位 i2c_start_bit
  2. 發送數據位 i2c_data_bit
  3. 發送應答位 i2c_ack_bit
  4. 發送停止位 i2c_stop_bit

I2C 速率較高,在 I2C 的發送過程中如果進行計算數據發送會大大的延遲。所以,在發送前必須計算完所有需要發送的數據。

由於 Keil C51 不支持動態數組,這里的聲明的二維數組為 8 * 8的。這段代碼允許連續發送的數據不超過 8 個,如果數據超過這個限制就需要做出修改。

邏輯分析儀給出的結果如下:

邏輯分析儀輸出了四位數據 01、02、03、04,可以看到代碼工作的還算不賴。由於沒有接芯片,所以邏輯分析儀顯示 ACK 位沒有應答。

(●'◡'●),這樣的話,I2C 的部分就基本准備結束了,下一章節將以 PCF8563 為例,用 I2C 協議實現 RTC 的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM