你好,我们想通过PCF8574A这个芯片实现I2C扩展GPIO的功能。
我们连接芯片到Linux系统后使用I2Cdetect命令可以看到芯片的地址0x38.
接下来想要配置P5口为高电平,我们使用命令i2cset 1(bus端口) 0x38(设备地址) 0x20(配置数据0010 0000).
但是P5并没有被拉高,我们在P5上连接了LED的正极,LED负极串联电阻接地,看到LED没有被点亮。
请问我们的操作有什么问题?有没有相关的操作说明文档可以参考?
谢谢
Kailyn Chen:
您好,从机地址0X38改为0X70 再试试呢。
Amy Luo:
您好,
您的电路是怎么连接的呢,PCF8574APWR地址是7开头的,见数据手册8.3.3 Address Reference部分,您用示波器看下时序图,看是否有ACK信号,如果通信正常,再看下硬件是否有问题:您接的LED导通压降是多少呢,串接的电阻是多少呢,判断下P5是否有足够的电流驱动LED亮或者断开外接电路测下P5是否输出高
Xu Dianwei:
回复 Kailyn Chen:
0x38是7位地址,使用Linux的I2Cset是直接补全变成0x70的8位地址的。之前使用I2C控制dlp是验证过没有问题的。
Xu Dianwei:
回复 Amy Luo:
0x38是7位地址,使用i2cset命令会自动补齐为8位地址0x70.
我们使用示波器观察,可以看到ack信号,data端也是2串数据,第一组是0x70,第二组是要发的数据0x20。LED灯就是最普通的LED灯,3.3V可以点亮。串阻110欧姆。
Xu Dianwei:
回复 Amy Luo:
正常的操作是先发0x70 ,再发0x20.就可以设置p5是高,其他位都是低吗?
Amy Luo:
回复 Xu Dianwei:
可查看数据手册Figure 16. Write Mode (Output)是输出配置时序,数据包含P0-P7,其他位需要什么值就配置什么值。
LED是否可以点亮主要是驱动电流,建议您断开外接电路测P5输出,排除驱动电流不足问题。
Xu Dianwei:
回复 Amy Luo:
我看到手册连续发了3组数据,第一组是设备地址,第二组和第三组都代表什么意思呢?
Amy Luo:
回复 Xu Dianwei:
第二组是需要写进去的数据,第三组看起来像是数据表中的错误,应该是多余的:
e2e.ti.com/…/881341
Xu Dianwei:
回复 Amy Luo:
这个芯片需要提前配置输入和输出吗?看到规格书里面写8个端口可以单独配置每个口是输入还是输出,这个要如何做到呢?
我们只发设备地址0x70和8个口的电平高低0x20,是不是没有配置各个端口应该是输出或是输入呀?
Kailyn Chen:
回复 Xu Dianwei:
您好,PCF8574AP这款IO expander没有寄存器来配置IOport是输入还是输出,是直接通过读写来判定 是输入还是输出port的。
比如您写某个port,那么就是output, 如果您读某个port,那么这个port就是input port。