### 安装驱动
# 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
输入功能正常。
百思不得其解, 请各位路过的大神指导。
离线
接LED也控制不了, 有点怀疑芯片是坏的: https://whycan.cn/t_4669.html#p48259
离线
先暂停再下单买一个, 改天继续折腾: https://detail.tmall.com/item.htm?id=600629589545
离线
什么叫深圳速度
晚上十点下单, 现在显示已收件
离线
#写地址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直接操作是可以的.
离线
借助逻辑分析仪,终于找到原因了, 重新配置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的。
离线