### 安装驱动
# 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的。
离线
不错的,可以借鉴用了。不过这个芯片有点贵。
离线
不错的,可以借鉴用了。不过这个芯片有点贵。
挺好的,可以做为一种思路, 用单片机模拟通讯协议扩展IO。
现在的003单片机可便宜了
离线
应该是寄存器指令出问题了,初始化不对。
离线
奇怪,为什么要用这个呢,用74HC595扩展不香吗?
离线
奇怪,为什么要用这个呢,用74HC595扩展不香吗?
因为 74HC595 不是 I2C 接口?
离线
https://github.com/torvalds/linux/blob/master/drivers/gpio/gpio-74x164.c
https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/fairchild%2C74hc595.yaml
74HC595 / 74HC164 在 Linux 用 SPI 驱动 74HC595/164 ^_^
离线
@我就是废物
echo 400 > /sys/class/gpio/export
请问这个400是怎么计算出来的?
离线