Linux 尽管命令行未按预期工作,但设置/重置GPIO
我正试图通过sysfs设置/重置GPIO值。我把文件作为参考 有一点我有点困惑,下面给出了一个场景 导出要测试的gpio 200Linux 尽管命令行未按预期工作,但设置/重置GPIO,linux,command-line,gpio,sysfs,Linux,Command Line,Gpio,Sysfs,我正试图通过sysfs设置/重置GPIO值。我把文件作为参考 有一点我有点困惑,下面给出了一个场景 导出要测试的gpio 200 mx6q:/sys/class/gpio/gpio200# echo "out" > direction <-- set the direction as write(out) mx6q:/sys/class/gpio/gpio200# cat direction < -- just to verify out mx6q:/
mx6q:/sys/class/gpio/gpio200# echo "out" > direction <-- set the direction as write(out)
mx6q:/sys/class/gpio/gpio200# cat direction < -- just to verify
out
mx6q:/sys/class/gpio/gpio200# echo 1 > value < -- set value as 1(high)
mx6q:/sys/class/gpio/gpio200# cat value
1
mx6q:/sys/class/gpio/gpio200# echo 0 > value < -- set value Low again
mx6q:/sys/class/gpio/gpio200# cat value
0
mx6q:/sys/class/gpio/gpio200# cat direction
out
mx6q:/sys/class/gpio/gpio200# echo "in" > direction < -- change the direction to read the pin
mx6q:/sys/class/gpio/gpio200# cat direction
in
mx6q:/sys/class/gpio/gpio200# cat value < -- what i am expecting here is 0 (last set value)
1
mx6q:/sys/class/gpio/gpio200#echo“out”>方向值<--将值设置为1(高)
mx6q:/sys/class/gpio/gpio200#cat值
1.
mx6q:/sys/class/gpio/gpio200#echo 0>值<--再次将值设置为低
mx6q:/sys/class/gpio/gpio200#cat值
0
mx6q:/sys/class/gpio/gpio200#cat方向
出来
mx6q:/sys/class/gpio/gpio200#echo“>方向<--更改方向以读取引脚
mx6q:/sys/class/gpio/gpio200#cat方向
在里面
mx6q:/sys/class/gpio/gpio200#cat value<--我在这里期望的是0(最后一个设置值)
1.
因此,无论我之前设置的值是多少,我总是读取一个高值。这真的是预期的行为吗?
我在两点上感到困惑
方向
为输出
,则值
中的数据定义要在GPIO引脚上设置的逻辑电平
如果方向
为中的,则值
中的数据是当前从GPIO引脚读取的逻辑电平
为什么在我更改方向后,以前设置的值不保持不变
想象一下,你把大头针绑在地上
如果您将方向设置为out
并将1
写入value
,那么当您读回value
时,您当然会看到1
,因为这是您刚才请求的
如果在
中将方向
设置为,则值
现在将读取0
,因为您的管脚已接地,因此您当前正在从管脚读取逻辑0。因此您所说的类似场景是接地GPIO管脚的特殊情况。一般来说,我可以读回改变方向后设置的相同值?如果我错了,请改正。感谢您的支持:)我不是说,不是。我是说,当您切换方向时,值
的内容通常会发生变化,因为文件的含义在每种情况下都是不同的。当方向
为输出
时,值
的含义是“我请求此值”。当方向
在
中为时,值
的含义是“这是当前从pin读取的值”。它们是不同的东西,您不会期望值保持不变。“请建议一个适当的文档阅读”——您正在使用的SoC数据表或TRM。通常,管脚控制器(如Atmel)始终允许读取该管脚的逻辑状态,无论该管脚用于输入或输出、GPIO或多路复用到外围设备、数字或模拟(如ADC输入)功能。好的,我的是iMX SoC,我将查找并读取相应的文档。谢谢