通过 I2C 执行的 MCF8315C 读取事务涉及以下序列(请参阅图 6-56)。
- 启动事务的控制器 I2C 启动条件。
- 启动后跟 I2C 目标 ID 字节,其中包括 7 位目标 ID 和设置为 0b 的 R/W 位。ACK(黄色框中)表示 MCF8315C 已处理接收的目标 ID,该目标 ID 与其 I2C 目标 ID 相匹配,因此将继续执行此事务。如果接收的目标 ID 与 MCF8315C 的 I2C ID 不匹配,则将忽略此事务,并且 MCF8315C 不会发送 ACK。
- 目标 ID 字节后跟 24 位控制字,每次发送一个字节。控制字中的位 23 设置为 1b,因为它是读取事务。ACK(蓝色框中)对应于 MCF8315C 发送到控制器的响应,表明已接收(控制字的)前一个字节并且可以发送下一个字节。
- 控制字后跟重复启动(RS,启动前不停止)或正常启动(P 后跟 S),以启动从 MCF8315C 到 I2C 控制器的数据(要读回)传输。RS 或 S 后跟 7 位目标 ID 和设置为 1b 以启动读取事务的 R/W 位。MCF8315C 向控制器发送 ACK(RS 之后的灰色框中)以响应接收到读取事务请求。
- 响应读取事务请求后,MCF8315C 在 SDA 上发送数据字节,一次发送一个字节。MCF8315C 发送的数据字节数取决于控制字中的 DLEN 字段。
- 在发送数据字节时,首先发送 LSB 字节。有关详细信息,请参阅节 6.6.2.4中的示例。
- 16 位/32 位读取 – 控制字所述地址中的数据发送回控制器。
- 64 位读取 - 64 位被视为两个连续 32 位读取。控制字中所述的地址用作 Addr_1。Addr_2 由 MCF8315C 通过将 Addr_1 递增 0x2 来计算。 MCF8315C 一共发送 8 个数据字节。前 4 个字节(以 LSB 在前的方式发送)从 Addr_1 读取,接下来的 4 个字节从 Addr_2 读取。
- 橙色框中的 ACK 对应于控制器发送到 MCF8315C 的响应,表明已接收前一个字节并且可以发送下一个字节。
- 如果已启用 CRC,则 MCF8315C 会在末尾发送一个额外的 CRC 字节。控制器必须读取此 CRC 字节,然后发送最后一个 ACK(橙色)。CRC 是针对整个数据包(目标 ID + W 位、控制字、目标 ID + R 位、数据字节)进行计算的。
- 终止事务的控制器 I2C 停止条件