描述

这是一个24个引脚的芯片,通过I2C总线提供16个并行输入/输出(GPIO)扩展。操作电压为2.3V到5.5V,IO口可以忍受高达5V的电压。这款芯片有两个8位的寄存器(用于输出或输入选择),输入端口寄存器,输出端口寄存器以及极性选择寄存器。当上电的时候,IO口默认为输入模式。可以通过向IO配置位写入数据来配置IO是输入还是输出模式。每一个输入或者输出的数据都保存在相应的寄存器中。输出极性可以通过极性选择寄存器来进行翻转。所有的寄存器都可以读。

当任何IO口输入状态和寄存器中设置的输入状态不同的时候,开漏中断引脚(INT)会产生中断,用于告诉用户输入状态发生改变了。在发生超时或者其他不当操作的时候,用户可以利用上电复位功能重置该设备,上电复位会将寄存器重置为默认值。可以通过三个引脚A0,A1和A2来改变IIC地址,从而可以在同一IIC总线挂载多个XL9555芯片。

封装图

引脚功能表

系统框图

时序图

功能描述

6.1设备地址

可以通过改变A0,A1,A2引脚的高低电平来改变I2C从机地址。

❗注意,所有引脚都不能悬空。

6.2寄存器

主机通过发送一个命令字节来控制Table 6. 中的8个寄存器

6.2.1寄存器0和寄存器1:输入端口寄存器

输入端口寄存器反映引脚接收到的逻辑电平,无论这些引脚是否被寄存器6和寄存器7配置成输出还是输入。该寄存器只能读取,对其写入是没有效果的。这个寄存器上电后的默认值由外部施加的逻辑电平来决定。在进行读取操作前,主机需要先发送一个带有命令字节的写传输用于指示I2C设备接下来要访问寄存器0和寄存器1。

6.2.2 寄存器2和寄存器3:输出端口寄存器

输出端口寄存器是一个仅用于输出的端口。它是由配置寄存器(寄存器6和寄存器7)来决定输出引脚的逻辑电平高低。对于定义为输入的引脚,这个寄存器的值就没有用了。从这个寄存器读取值的话,反应的并非是引脚的实际电平状态。

6.3.3 寄存器4和寄存器5:极性反转寄存器

极性反转寄存器允许用户反转输入端口寄存器数据的极性。如果极性反转寄存器中的某位被设置成1,则输入端口数据的极性会被反转。

6.3.4 寄存器6和寄存器7

配置寄存器用于配置IO引脚的方向。如果配置寄存器中的某一位被设置为1,则对应的端口引脚被配置位高阻抗输入引脚。如果设置成0,则配置位输出引脚。在设备复位的时候,所有端口引脚默认被配置为输入,并且每一个引脚都通过一个上拉电阻连接到VCC。

6.4上电复位

当从0V开始向VCC供电的时候,内部上电复位会将设备保持在复位状态直到VCC达到VPOR。这个时候,复位状态才被释放,设备寄存器和I2C/SMBus状态机将初始化为默认状态。在此之后,必须先将Vcc降低到0.2V以下,才能再次复位。

6.5 I/O端口

当设备将I/O配置为输入时,FETs Q1和Q2关闭,从而创建高阻抗输入,输入电压可以升高到Vcc,但最大值为5.5V。

如果将I/O配置为输出,则根据输出端口寄存器的状态,Q1或Q2被导通。

6.6 中断输出

在输入模式下,端口的任何上升沿或者下降沿的变化,会触发中断,经过一定的延迟时间(tiv(INT)),INT中断引脚信号有效。如果要解除中断,可以读取输入端口寄存器,或者输入信号返回到先前状态。中断的复位操作是发生在读取模式期间,具体是在SCL信号上升沿之后的应答ACK或非应答NACK位。

❗如果将I/O从输出更改为输入,且引脚的状态与输入端口寄存器的内容不匹配,则可能会发生虚假中断。

❗由于每个8引脚端口都是独立读取的,因此由Port 0引起的中断不会被Port 1的读取清除,反之亦然。

❗INT输出具有开漏结构,需要连接到VCC的拉上电阻来提供完整的逻辑高电平输出。

I2C总线通信

7.1 端口寄存器写入

向XL9555芯片传输数据的时候,需发送设备地址,并且把最低有效位LSB设置为逻辑0,代表写操作。地址发送后,紧接着发送命令字节,该字节决定紧随命令字节后的数据将被写入哪个寄存器。

XL9555芯片内部的八个寄存器被配置为四对寄存器:输入端口寄存器、输出端口寄存器、极性反转寄存器和配置寄存器。向每一对寄存器中的一个写入数据后,下一个数据字节将自动写入该对中的另一个寄存器。例如,如果第一个字节被发送到输出端口1(寄存器3),则下一个字节将被存储到输出端口0(寄存器2)。

图14展示了向从设备寄存器写入单个字节的示例,即写入极性反转寄存器(0x04)。在这个过程中:

  1. 发送设备地址:首先发送7位设备地址(包括读写位R/W=0),以选定目标设备。
  2. 发送命令字节:紧接着发送命令字节,该字节的特定位模式决定了要访问的寄存器对及该对中的具体寄存器。例如,若命令字节指示要写入极性反转寄存器,则设备会识别并准备接收紧随其后的数据字节。
  3. 发送数据字节:在命令字节之后,发送要写入指定寄存器的数据字节。
  4. 自动写入对寄存器:如之前所述,如果写入的是一对寄存器中的一个(如输出端口1),则下一个数据字节将自动写入该对中的另一个寄存器(如输出端口0)。
  5. 可连续写入:此过程可以连续进行,直到所有需要写入的数据都已被传输。

7.2 端口寄存器读取

为了从XL9555芯片读取数据,需要先发送设备地址,并将最低有效位设置为逻辑0,这是为了先发送命令字节。后续会进行I2C重启并改变为读模式。在发送地址之后,发送命令字节以确定要访问的寄存器。

读取过程概述

  1. 发送设备地址(准备读操作):首先发送设备地址,但此时R/W位为0,这实际上是一个准备步骤,为接下来的读操作做准备。
  2. 发送命令字节:紧接着地址,发送命令字节以指定要访问的寄存器。
  3. 重启并设置读模式:然后,总线需要重启(这通常意味着重新发送起始条件),并再次发送设备地址,但此时将LSB位设置为逻辑1(R/W=1),表示读操作。
  4. 接收数据:设备随后会发送由命令字节指定的寄存器中的数据(见图17、18、19和20)。在XL9535和XL9555中,数据是在应答时钟脉冲的下降沿被存入寄存器的。
  5. 连续读取:读取第一个字节后,可以读取额外的字节,但这些数据将反映该对寄存器中另一个寄存器的信息。例如,如果首先读取输入端口1,则下一个读取的字节将是输入端口0的数据。
  6. 读取结束:在一次读取传输中,可以接收任意数量的数据字节,但在接收最后一个字节时,总线主设备不应应答该数据,以表示读取操作的结束。

典型应用

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐