问题描述:
场景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位置为不同的状态,并且只需配置一次从机地址即可配置好两块芯片的地址?
Johnsin Tao:
Hi从描述看就是两者的配置相互干扰到了吗?没办法多出I/O口进行独立一些的控制吗?
user5095818:
回复 Johnsin Tao:
您好:
场景一是因为我们硬件最开始设计是将两片TPS23861芯片的A3引脚均接地拉低,地址配置我是参考示例代码中的地址配置函数 tps_SetI2CAddresses(),配置流程与手册P38中描述的I2C通信时序是一致的,但实际测试时在对第二片TPS23861芯片的从机地址进行配置时,发送临时地址后主机便收不到ACK,第二片地址配置失败。于是我将其中的一片TPS23861芯片的A3脚翘起悬空,并修改地址配置流程,先通过0x30广播地址发送0xAA从机地址解锁指令并配置临时地址为0x40,然后向临时地址0x40发送从机地址修改命令0x11,将从机地址配置为0x20,不再执行第二片地址的配置。即通过一次从机地址配置便同时修改了两片TPS23861芯片的从机地址(第二片因其A3脚悬空内部上拉为高,从机地址自动配置为0x28)。
故我想确认一下采用双片TPS23861芯片设计时是否必须将其中一片的A3脚拉低,将另外一片的A3脚悬空或拉高?若A3脚均接地时也可以逐片配置从机地址,为什么配置第二片地址时临时地址就得不到ACK了?