This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TPS23861 I2C从机地址配置问题

Other Parts Discussed in Thread: TPS23861

问题描述:

场景1:产品采用双片级联的方式,片0的AIN引脚悬空(内部上拉为高), AOUT直连片1的AIN引脚,片1的AOUT上拉到3.3V。片0和片1的A3引脚均接地。上电后主控MCU按照手册上的方法配置两片TPS23861的从机地址,先发送指令0xAA到0x30广播地址,对从机地址寄存器进行解锁操作并写入临时地址0x40(手册上描述该地址大于0x30即可),然后通过临时地址0x40配置第一片(由于片0的AIN引脚悬空,故理论上来说它是第一片)的新地址为0x21成功。然而当再次通过0x40临时地址配置第二片(按照手册描述,当片0的新地址配置成功后,其AOUT便开漏输出低,故片1的AIN则被拉低选中)的从机地址时,出现ACK错误,0x40地址不再得到响应,第二片的地址配置失败。

场景2:将片0的A3接低,片1的A3拉高,两块芯片的AIN和AOUT连接与场景1一致。上电后先发送指令0xAA到0x30广播地址,对从机地址寄存器进行解锁操作并写入临时地址0x40,并通过0x40配置TPS32861从机地址为0x20后不再进行地址配置操作,结果片0可以响应地址0x20,片1则响应地址0x28(因其A3引脚为高)。一次地址配置操作可以同时配置好两片A3引脚状态不一致的芯片。

提问:

1.对比以上两个场景,是否说明采用双片TPS23861方案时,一定要将两块芯片的A3位置为不同的状态,并且只需配置一次从机地址即可配置好两块芯片的地址?

  • Hi
    从描述看就是两者的配置相互干扰到了吗? 没办法多出I/O口进行独立一些的控制吗?
  • 您好:

    场景一是因为我们硬件最开始设计是将两片TPS23861芯片的A3引脚均接地拉低,地址配置我是参考示例代码中的地址配置函数 tps_SetI2CAddresses(),配置流程与手册P38中描述的I2C通信时序是一致的,但实际测试时在对第二片TPS23861芯片的从机地址进行配置时,发送临时地址后主机便收不到ACK,第二片地址配置失败。于是我将其中的一片TPS23861芯片的A3脚翘起悬空,并修改地址配置流程,先通过0x30广播地址发送0xAA从机地址解锁指令并配置临时地址为0x40,然后向临时地址0x40发送从机地址修改命令0x11,将从机地址配置为0x20,不再执行第二片地址的配置。即通过一次从机地址配置便同时修改了两片TPS23861芯片的从机地址(第二片因其A3脚悬空内部上拉为高,从机地址自动配置为0x28)。

    故我想确认一下采用双片TPS23861芯片设计时是否必须将其中一片的A3脚拉低,将另外一片的A3脚悬空或拉高?若A3脚均接地时也可以逐片配置从机地址,为什么配置第二片地址时临时地址就得不到ACK了?

  • 问题找到了,TPS23861芯片级联方式配置地址,第一片地址解锁并通过临时地址配置完新地址后,其AOUT引脚会暂时拉低,来允许第二片芯片配置地址,但是这个拉低的时间只有100ms(通过示波器查看),第二片芯片地址需要在这100ms之内立即通过临时地址配置其新地址。