标签: gpio

如何在 Linux 上通过 GPIO 获取边缘事件而不需要繁忙循环?

我正在使用嵌入式 Linux(内核 2.6.31)的系统。

内部是一颗AT91SAM9G20芯片,部分Pin转发到外部。

现在我想将它们用作 GPIO 输入。

我阅读了有关通过文件系统使用 GPIO 的 gpio.txt 文档,直到这里为止它都运行良好。我将一些开关连接到 gpio 引脚,我可以在/sys/class/gpio/gpioX/value. 但现在我想对更改做出反应,而不是在循环中忙等待。(即回显“Switch1 被按下”)。

我想我在这里需要中断,但是如果不编写自己的内核驱动程序,我无法找到如何使用它们。我对 Linux 和 C 比较陌生(我通常用 Java 编程),所以我也想通过 sysfs 处理中断。但我的问题是,我的 GPIO 目录中没有“edge”文件(我猜是因为这只是从内核版本 2.6.33+ 开始)。是对的吗?我在那里有一个uevent文件,而不是“edge”,该文件在gpio.txt.

在 gpio.txt 文档中提到了一个标准内核驱动程序:“gpio_keys”。可以用这个来解决我的问题吗?

我想使用这个驱动程序比允许用户空间程序操纵内核任务更好。我找到了很多用于编写自己的驱动程序的代码片段,但我什至无法找出gpio.h要包含的 600 个文件中的哪些,以及如何引用该库(交叉编译器找不到 gpio.h 文件) 。

新手问题请多多指教,希望大家多多指教。

提前致谢

linux gpio

5
推荐指数
1
解决办法
9395
查看次数

飞思卡尔处理器中焊盘控制功能的说明?

请阅读第1368页的MCIMX50应用处理器参考手册(第33.3节),其中列出了处理器焊盘的各种可能的控制功能.

清单是:

  • SRE(1位压摆率控制).
  • DSE(2位驱动强度控制).
  • ODE(1位开漏控制).
  • HYS(1位滞后控制).
  • PULL_KEEP_CTL(4位上拉/下拉和保持器控制)
  • PUS(2位上拉/下拉配置值)
  • PUE(1位拉/保持选择)
  • PKE(1位启用/禁用上拉,下拉或保持器功能)
  • DDR_MODE_SEL(1位ddr_mode控制)
  • DDR_INPUT(1位ddr_input控制)

有人可以解释每一个是什么,最好是以教育方式与其他信息的链接?

提前致谢.

io kernel arm processor gpio

5
推荐指数
2
解决办法
4073
查看次数

选择GPIO监控

我正在尝试监视GPIO引脚,根据Linux文档,我应该能够通过以下方式监视/sys/class/gpio/gpio##/value文件来执行此操作select:

"value" ... reads as either 0 (low) or 1 (high).  If the GPIO
    is configured as an output, this value may be written;
    any nonzero value is treated as high.

    If the pin can be configured as interrupt-generating interrupt
    and if it has been configured to generate interrupts (see the
    description of "edge"), you can poll(2) on that file and
    poll(2) will return whenever the interrupt was triggered. If
    you use poll(2), set the events …
Run Code Online (Sandbox Code Playgroud)

ruby linux gpio

5
推荐指数
1
解决办法
2063
查看次数

通过单个 GPIO 引脚转储闪存

我正在使用 Infineon 的 XMC4500 Relax Kit,我正在尝试通过单个 GPIO 引脚提取固件。

我非常天真的想法是通过 GPIO 引脚一次转储一位,然后用逻辑分析仪以某种方式“嗅探”数据。

伪代码:

while(word by word memory copy hasn't finished)
  ...
  register = value;
  temp_value = value AND 0x1;
  pin = temp_value;
  value = value >> 1;
  ...
Run Code Online (Sandbox Code Playgroud)

我在正确的轨道上吗?有没有人有更好/更好的想法如何存档?

### 编辑 ###

实际上我的(shell)代码的一个要求是它需要非常小。我发现了这个关于如何通过闪烁 LED 转储固件的绝妙技巧。

但是,我正在努力使用 Saleae Logic Analyzer 接收正确的值。

基本上我正在做的是:

  1. 设置GPIO引脚方向输出
  2. 用时钟(SPI 串行时钟)闪烁 LED1(引脚 1.1)
  3. 用数据位 (SPI MOSI) 闪烁 LED2(引脚 1.0)
  4. 使用逻辑分析仪嗅探引脚

这是我的 C 代码:

#include "XMC4500.h"

#define DEL 1260

void init() 
{
  // P1.0 output, push pull …
Run Code Online (Sandbox Code Playgroud)

c embedded reverse-engineering firmware gpio

5
推荐指数
2
解决办法
952
查看次数

在什么情况下/ sys / kernel / debug / gpio为空?

摘要

我的目标是控制Intel主板(带有C1037U处理器的NM70芯片组)上的Peppermint 4 Linux(内核版本3.8.0)中的GPIO引脚。

我正在调试使用sysfs接口的问题,并试图了解/ sys / kernel / debug / gpio为空的情况?

尝试通过以下方式导出针脚0到255时

echo XX > /sys/class/gpio/export

XX从0到255,我得到以下错误消息

echo: write error: No such device

在什么情况下/ sys / kernel / debug / gpio为空?

 背景

  • 主板:具有NM70芯片组的英特尔
  • 处理器:C1037U处理器
  • 操作系统:Peppermint 4 Linux
  • 内核版本:3.8.0
  • GPIO接口:sysfs

我正在尝试使用sysfs接口,该接口允许通过文件系统从用户空间访问GPIO引脚。

我已成功遵循https://help.ubuntu.com/community/Kernel/Compile的“替代构建方法:老式Debian方式”部分重新编译内核,以便在用户空间中公开GPIO访问,并打开GPIO的调试模式:

编译完新内核后,我可以首次在/ sys / class / gpio中看到GPIO文件夹。然后,从理论上讲,应该是能够通过写入文件系统来打开/关闭GPIO端口的情况。在http://falsinsoft.blogspot.co.uk/2012/11/access-gpio-from-linux-user-space.html中概述了这种方法。

尝试通过以下方式导出针脚0到255时

echo XX > /sys/class/gpio/export

XX从0到255,我得到以下错误消息

echo: write error: No such device

尝试通过以下方式导出0到255范围外的引脚时

echo XX > /sys/class/gpio/export

我收到以下错误消息

echo: write error: Invalid argument

本教程建议这可能是因为GPIO端口是为另一个程序保留的,并且如果是这样,调试文件(/ sys / kernel / …

embedded embedded-linux sysfs gpio

5
推荐指数
1
解决办法
3292
查看次数

在Linux设备树中为IO扩展器指定GPIO编号

我正在尝试将PCA9557 I / O扩展器添加到I2C总线上基于手臂的系统上。系统已经在不同的I2C总线上具有另一个I / O扩展器。我试图弄清楚如何指定新扩展器上的针脚获得的GPIO编号,以及如何使它们都能正常工作。

这是I2C总线2下现有扩展器的设备树部分:

        i2c2: i2c@e8007000 {
        status = "ok";

        pca9539: pca9539@74 {
            compatible = "nxp,pca9539";
            reg = <0x74>;
            interrupt-parent = <&gpio>;
            interrupts = <9 0x0>;
            gpio-controller;
            #gpio-cells = <2>;
            interrupt-controller;
            #interrupt-cells = <2>;
        };
        };
Run Code Online (Sandbox Code Playgroud)

使用上述方法,现有的I / O扩展器(带有16个GPIO)在Linux中显示为/ sys / class / gpio / gpiochip128,公开了GPIO编号128-143。GPIO 0-127内置于主机处理器中。

我为I2C总线0上的新扩展器添加了以下内容:

   i2c0: i2c@e8003000 {
        status = "ok";

        pca9557: pca9557@18 {
            compatible = "nxp,pca9557";
            reg = <0x18>;
            gpio-controller;
            #gpio-cells = <2>;
        };
Run Code Online (Sandbox Code Playgroud)

我还修改了内核配置,以构建GPIO_PCA953X驱动程序,该驱动程序应支持PCA9557。

当我将以上内容添加到设备树中进行编译和引导时,我现在看到映射为/ sys / class …

linux i2c gpio device-tree

5
推荐指数
0
解决办法
3946
查看次数

按钮 GPIO.FALLING 事件被触发两次

这是我第一次尝试对 Raspberry Pi 和面包板上的硬件按钮进行编码。程序很简单,当检测到按下按钮时,打开面包板上的 LED 1 秒钟。我的代码似乎有效,但奇怪的是,每隔一个按钮就会触发回调函数两次。我是一个完全的编程菜鸟,所以我不确定问题是否出在我的代码上,或者硬件或按钮是否实际上以某种方式掉落了两次。我希望这里有人能帮助我解决这个奇怪的问题。这是我的代码:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time


LedPin = 11    # pin11 --- led
BtnPin = 12    # pin12 --- button

def setup():
    GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
    GPIO.setup(LedPin, GPIO.OUT)   # Set LedPin's mode is output
    GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)
    GPIO.output(LedPin, GPIO.HIGH) # Set LedPin high(+3.3V) to off led

def Light(ev=None):
        print 'A button press was detected'
        GPIO.output(LedPin, 0) …
Run Code Online (Sandbox Code Playgroud)

python gpio raspberry-pi raspberry-pi2

5
推荐指数
1
解决办法
4500
查看次数

虚拟GPIO仿真

是否存在用于编程需求的虚拟GPIO驱动程序?

我必须在我的Linux PC上开发一个软件,然后在一些带有物理GPIO的嵌入式系统上试用它(CHIP,OpenWRT等等)?

谢谢!

linux emulation gpio

5
推荐指数
1
解决办法
2848
查看次数

USB 转 GPIO/SPI/I2C/UART 适用于常规 Windows 10 PC?类似于 Raspberry Pi 40 针接头

有谁知道有一家公司销售适用于普通非物联网 Windows 10 PC 的 USB 电缆,该电缆可以将 USB 转换为 40 针 Raspberry pi 接头上的所有以下总线?示例:USB->GPIO、I2C、SPI、UART 等。

我能找到的最接近的是:

Digilentinc.com 的数字发现逻辑分析仪

这可以将 PC USB 转换为 GPIO/I2C/SPI 等...除了我正在寻找更小、电线更少的东西...只有 40 针接头或更少...类似于树莓派 40 针接头,除了被驱动从连接到 PC 的 USB 改为...有人见过这种类型的待售产品,它可以通过所有列出的总线从 PC-USB 转换为 40 针接头吗?

另外,我希望能够使用“Windows.Devices”Api 而不是专有驱动程序 DLL API 通过Windows UWP对该 USB 转换设备进行编程...还没有真正找到...示例:

// C# Program GPIO connected to USB dongle of regular PC...
using Windows.Devices.GPIO;
...
private void InitGPIO()
{
    var gpio_ctrl = GpioController.GetDefault();
    // Check GPIO state
    if (gpio_ctrl == null)
    {
        this.pin = null; …
Run Code Online (Sandbox Code Playgroud)

c# windows spi i2c gpio

5
推荐指数
1
解决办法
9578
查看次数

改变树莓派3上串口的波特率

我在raspberry pi 3上安装了lineage os 14我连接了一个带有UART端口的gps模块,然而,GPS的波特率是9600但是/ dev/ttyS0的波特率是115200我想改变ttyS0的波特率以便读取GPS数据我试过stty命令

stty -F /dev/ttyS0 9600
Run Code Online (Sandbox Code Playgroud)

但是,当我再次使用此命令检查
stty -F /dev/ttyS0速度值为115200 时,这不会改变波特率.如何更改/ dev/ttyS0的波特率我也找到了一些带有串行命令的解决方案serial /dev/ttyS0 9600但是它不存在于adb shell.任何帮助都会感激不尽

gps android uart gpio raspberry-pi3

5
推荐指数
1
解决办法
1766
查看次数