通過 I2C 執行的 MCF8316D 讀取事務涉及以下序列(請參閱圖 7-65)。
- 啟動事務的控制器 I2C 啟動條件。
- 啟動后跟 I2C 目標 ID 字節,其中包括 7 位目標 ID 和設置為 0b 的 R/W 位。ACK(黃色框中)表示 MCF8316D 已處理接收的目標 ID,該目標 ID 與其 I2C 目標 ID 相匹配,因此將繼續執行此事務。如果接收的目標 ID 與 MCF8316D 的 I2C ID 不匹配,則將忽略此事務,并且 MCF8316D 不會發送 ACK。
- 目標 ID 字節后跟 24 位控制字,每次發送一個字節。控制字中的位 23 設置為 1b,因為它是讀取事務。ACK(藍色框中)對應于 MCF8316D 發送到控制器的響應,表明已接收(控制字的)前一個字節并且可以發送下一個字節。
- 控制字后跟重復啟動(RS,啟動前不停止)或正常啟動(P 后跟 S),以啟動從 MCF8316D 到 I2C 控制器的數據(要讀回)傳輸。RS 或 S 后跟 7 位目標 ID 和設置為 1b 以啟動讀取事務的 R/W 位。MCF8316D 向控制器發送 ACK(RS 之后的灰色框中)以響應接收到讀取事務請求。
- 響應讀取事務請求后,MCF8316D 在 SDA 上發送數據字節,一次發送一個字節。MCF8316D 發送的數據字節數取決于控制字中的 DLEN 字段。
- 在發送數據字節時,首先發送 LSB 字節。有關詳細信息,請參閱節 7.6.2.4中的示例。
- 16 位/32 位讀取 – 控制字所述地址中的數據發送回控制器。
- 64 位讀取 - 64 位被視為兩個連續 32 位讀取。控制字中所述的地址用作 Addr_1。Addr_2 由 MCF8316D 通過將 Addr_1 遞增 0x2 來計算。MCF8316D 一共發送 8 個數據字節。前 4 個字節(以 LSB 在前的方式發送)從 Addr_1 讀取,接下來的 4 個字節從 Addr_2 讀取。
- 橙色框中的 ACK 對應于控制器發送到 MCF8316D 的響應,表明已接收前一個字節并且可以發送下一個字節。
- 如果已啟用 CRC,則 MCF8316D 會在末尾發送一個額外的 CRC 字節。控制器必須讀取此 CRC 字節,然后發送最后一個 ACK(橙色)。CRC 是針對整個數據包(目標 ID + W 位、控制字、目標 ID + R 位、數據字節)進行計算的。
- 終止事務的控制器 I2C 停止條件。