您尚未登录。

楼主 #1 2020-06-30 11:52:11

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

QQ图片20200630114218.jpg

### 安装驱动
# modprobe gpio-pcf857x
[ 2380.235831] pcf857x 0-0020: probed
#
# echo 400 > /sys/class/gpio/export

# echo low > /sys/class/gpio/gpio400/direction
# echo 0 > /sys/class/gpio/gpio400/value
# echo 1 > /sys/class/gpio/gpio400/value

这样, P0还是输出 3V3,始终不能输出 0V


# echo out > /sys/class/gpio/gpio400/direction
# echo 0 > /sys/class/gpio/gpio400/value
# echo 1 > /sys/class/gpio/gpio400/value

low改为out或者high也是一样不能输出低电平




接着我在P0加10K下拉电阻,无论怎么控制都是输出2.7V。





# echo in > /sys/class/gpio/gpio400/direction
# cat /sys/class/gpio/gpio400/value

输入功能正常。



百思不得其解, 请各位路过的大神指导。

离线

楼主 #3 2020-06-30 21:42:06

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

接LED也控制不了, 有点怀疑芯片是坏的: https://whycan.cn/t_4669.html#p48259

pcf8574.png

离线

楼主 #4 2020-06-30 22:14:17

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

先暂停再下单买一个, 改天继续折腾: https://detail.tmall.com/item.htm?id=600629589545

离线

楼主 #5 2020-06-30 22:46:43

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

QQ截图20200630224536.png


什么叫深圳速度

晚上十点下单, 现在显示已收件

离线

楼主 #6 2020-07-01 23:07:20

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

#写地址0寄存器 P0-P7均低电平
i2cset -y 0 0x20 0x00 0x00

#写地址0寄存器 P0-P7均高电平
i2cset -y 0 0x20 0x00 0xFF

#读地址0寄存器
i2cget -y 0 0x20 0x00 b

奇怪了, 居然用i2c-utils直接操作是可以的.

离线

楼主 #7 2020-07-02 10:02:09

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: V3s控制GPIO扩展芯片 NXP PCF8574, 可以读IO电平,但是怎么也写不了低电平,请各位大佬帮我瞅瞅

借助逻辑分析仪,终于找到原因了, 重新配置dts:

        pcf8574: gpio@20 {
                compatible = "nxp,pcf8574";
                reg = <0x20>;
                gpio-controller;
                #gpio-cells = <2>;
                interrupt-controller;
                #interrupt-cells = <2>;
        };

原来我是从 别 处 粘贴 过来的:

compatible = "nxp,pcf8575";


根据驱动源码: https://github.com/torvalds/linux/blob/master/drivers/gpio/gpio-pcf857x.c

static const struct i2c_device_id pcf857x_id[] = {
    { "pcf8574", 8 },
...
    { "pcf8575", 16 },
...
    { }
};

pcf8574 是8bit的, pcf8575是16bit的。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn