ZHCAE77 July 2024 PCA9535 , PCA9555 , TCA6416A , TCA6424A , TCA9535 , TCA9539 , TCA9539-Q1 , TCA9555 , TCAL6416R , TCAL9539 , TCAL9539-Q1
是的,有些器件只能在一组特定的寄存器内自动递增。例如,TI I2C IO 扩展器便是如此。对于具有 2 个端口(16 位扩展)的 IO 扩展器,可在一组端口寄存器内进行自动递增。图 4-1 展示了使用 TCAL6416 等 16 位 IO 扩展器的这种特殊自动递增情况的示例。如果在将寄存器设置为 0x02h(输出端口 0 寄存器)后执行连续写入,则会使得向寄存器写入的数据在寄存器 0x02h(输出端口 0 寄存器)和 0x03h(输出端口 1 寄存器)之间交替。
由于用户无法一次性向所有寄存器进行写入,因此这种类型的自动递增功能会产生一个需要多个 I2C 事务(具有启动/重启和/或停止条件)的初始化序列。虽然从初始化的角度来看这是一个缺点,但这种自动递增方法有一个优点。由于只能从一个设定端口进行写入或读取,因此可以在接收/输出有用数据时获得更好的延迟。
图 4-2 所示为一个 4 位 IO 扩展器 (TCA9536) 用于切换位 2 和位 3。自动递增功能用于在每次 ACK 后立即切换这些位。由于该器件只有一个端口,因此自动递增功能会持续递增到同一寄存器(输出寄存器 0x01h)中,因此每次写入新数据时,该器件都会在每次 ACK 时更新。这种方法降低了输出切换的延迟,因为发送寄存器字节 (0x01h) 后,该器件可以自由更改输出状态。另一种方法是始终通过发送器件地址、寄存器以及启动和停止条件之间的数据来向器件执行写入操作。
从读取角度来看,需轮询 IO 扩展器输入的应用可以使这种自动递增变得高效,因为器件在返回到相关寄存器之前不需要在所有寄存器中进行递增。