我正在使用嵌入式 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 文件) 。
新手问题请多多指教,希望大家多多指教。
提前致谢
请阅读第1368页的MCIMX50应用处理器参考手册(第33.3节),其中列出了处理器焊盘的各种可能的控制功能.
清单是:
有人可以解释每一个是什么,最好是以教育方式与其他信息的链接?
提前致谢.
我正在尝试监视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) 我正在使用 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 接收正确的值。
基本上我正在做的是:
这是我的 C 代码:
#include "XMC4500.h"
#define DEL 1260
void init()
{
// P1.0 output, push pull …Run Code Online (Sandbox Code Playgroud) 我的目标是控制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为空?
我正在尝试使用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 / …
我正在尝试将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 …
这是我第一次尝试对 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) 是否存在用于编程需求的虚拟GPIO驱动程序?
我必须在我的Linux PC上开发一个软件,然后在一些带有物理GPIO的嵌入式系统上试用它(CHIP,OpenWRT等等)?
谢谢!
有谁知道有一家公司销售适用于普通非物联网 Windows 10 PC 的 USB 电缆,该电缆可以将 USB 转换为 40 针 Raspberry pi 接头上的所有以下总线?示例:USB->GPIO、I2C、SPI、UART 等。
我能找到的最接近的是:
这可以将 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) 我在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.任何帮助都会感激不尽