Linux 尽管命令行未按预期工作,但设置/重置GPIO

Linux 尽管命令行未按预期工作,但设置/重置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:/

我正试图通过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:/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.
因此,无论我之前设置的值是多少,我总是读取一个高值。这真的是预期的行为吗? 我在两点上感到困惑

  • 为什么在我更改方向后,以前设置的值不保持不变
  • 如果我可以在“in”和“out”两种情况下对值进行cat,那么“Direction”真正的意思是什么
  • 请建议阅读适当的文档,以便对GPIO操作有一个清晰的了解。 提前谢谢

    如果我可以在“in”和“out”两种情况下对值进行cat,那么“Direction”真正的意思是什么

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

    如果
    方向
    输出
    ,则
    中的数据定义要在GPIO引脚上设置的逻辑电平

    如果
    方向
    中的
    ,则
    中的数据是当前从GPIO引脚读取的逻辑电平

    为什么在我更改方向后,以前设置的值不保持不变

    想象一下,你把大头针绑在地上

    如果您将方向设置为
    out
    并将
    1
    写入
    value
    ,那么当您读回
    value
    时,您当然会看到
    1
    ,因为这是您刚才请求的


    如果在
    中将
    方向
    设置为
    ,则
    现在将读取
    0
    ,因为您的管脚已接地,因此您当前正在从管脚读取逻辑0。

    因此您所说的类似场景是接地GPIO管脚的特殊情况。一般来说,我可以读回改变方向后设置的相同值?如果我错了,请改正。感谢您的支持:)我不是说,不是。我是说,当您切换
    方向时,
    的内容通常会发生变化,因为文件的含义在每种情况下都是不同的。当
    方向
    输出
    时,
    的含义是“我请求此值”。当
    方向
    中为
    时,
    的含义是“这是当前从pin读取的值”。它们是不同的东西,您不会期望值保持不变。“请建议一个适当的文档阅读”——您正在使用的SoC数据表或TRM。通常,管脚控制器(如Atmel)始终允许读取该管脚的逻辑状态,无论该管脚用于输入或输出、GPIO或多路复用到外围设备、数字或模拟(如ADC输入)功能。好的,我的是iMX SoC,我将查找并读取相应的文档。谢谢