set/reset GPIO 虽然命令行没有按预期工作

set/reset GPIO though command line is not working as expected

我正在尝试通过 sysfs set/reset GPIO 值。我参考了 this 文档。

有一次我有点困惑,下面给出了场景

导出 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:/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

所以不管我之前设置的值是多少,我总是读到一个高值。这真的是预期的行为吗? 我有两点很困惑,

  1. 为什么之前设置的值在我改变方向后不存在?
  2. "Direction" 的真正含义是什么,如果我可以在 "in" 和 "out" 两种情况下获取值?

请建议阅读适当的文档以清楚了解 GPIO 操作。 提前致谢

what does the "Direction" really means, if i can cat for the value in both "in" and "out" case?

这个问题有点不清楚,但也许这有帮助:

如果 directionout,则 value 中的数据定义了您要在 GPIO 引脚上 设置 的逻辑电平。

如果directionin,则value中的数据为当前从GPIO引脚读取的逻辑电平。

why the previously set value is not persisting after i change the direction?

假设您将引脚接地。

如果你把方向设置为out,把1写成value,那么当然当你回读value时你会看到1因为这就是你刚刚要求的。

如果您当时将 direction 设置为 invalue 现在将显示为 0,因为您将引脚接地,所以您当前从引脚读取逻辑 0。