标签: gpio

通过/ dev/mem驱动Beaglebone GPIO

我正在尝试编写一个用于在Beaglebone上闪烁LED的C程序.我知道我可以使用sysfs方式......但是我想看看是否可以使用/ dev/mem获得与物理地址空间映射相同的结果.

我有一个头文件,beaglebone_gpio.h,内容如下:

#ifndef _BEAGLEBONE_GPIO_H_
#define _BEAGLEBONE_GPIO_H_

#define GPIO1_START_ADDR 0x4804C000
#define GPIO1_END_ADDR 0x4804DFFF
#define GPIO1_SIZE (GPIO1_END_ADDR - GPIO1_START_ADDR)
#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190

#define USR0_LED (1<<21)
#define USR1_LED (1<<22)
#define USR2_LED (1<<23)
#define USR3_LED (1<<24)

#endif
Run Code Online (Sandbox Code Playgroud)

然后我有我的C程序,gpiotest.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h> 
#include "beaglebone_gpio.h"

int main(int argc, char *argv[]) {
    volatile void *gpio_addr = NULL;
    volatile unsigned int *gpio_oe_addr = NULL;
    volatile unsigned int *gpio_setdataout_addr = NULL;
    volatile unsigned int *gpio_cleardataout_addr …
Run Code Online (Sandbox Code Playgroud)

embedded mmap embedded-linux gpio

28
推荐指数
3
解决办法
3万
查看次数

Docker访问Raspberry Pi GPIO引脚

在Raspberry Pi 2上运行Docker时,我们如何将GPIO引脚暴露给Docker容器?

gpio raspberry-pi docker raspberry-pi2

28
推荐指数
3
解决办法
1万
查看次数

NameError:未定义名称"true"

我有以下代码,并在尝试运行时收到以下错误消息:

NameError: name 'true' is not defined
Run Code Online (Sandbox Code Playgroud)

我试图让Raspberry Pi在端口17上接收输入时运行HTML脚本:

import RPi.GPIO as GPIO
import time
import os

inputSignal = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(inputSignal,GPIO.IN)
while true:
    if (GPIO.input(inputSignal)):
        os.system("html /home/pi/index.html")
    else:
        print("No Input")
Run Code Online (Sandbox Code Playgroud)

python gpio

24
推荐指数
2
解决办法
4万
查看次数

如何找出哪个Linux驱动程序占用了我的GPIO?

我的电路板上有一个多用作GPIO的焊盘.当我尝试通过/ sys/class/gpio/export导出它时,我得到了

-sh: echo: write error: Device or resource busy
Run Code Online (Sandbox Code Playgroud)

我的猜测是其他一些司机在我得到这个机会之前要求这个垫子.我怎样才能找到保留它的内容?

linux-device-driver gpio

21
推荐指数
3
解决办法
1万
查看次数

访问没有``sudo``的GPIO(树莓派)

当然,这个问题可能并不特定于树莓派.另外,我对Linux比较陌生.

我想写一个小库(在node.js中,如果这很重要)来使用sysfs访问raspberry pi的GPIO.但是,访问sysfs需要sudo访问权限,这显然是有原因的.

Quick2Wire似乎有一个解决方案,但我想更好地理解它,而不是盲目地使用它.他们当然使用了C语言,但从我的理解来看,代码并不复杂,而且可能只用bash就可以完成,即使不那么优雅.但是,最重要的是,我不确定它为什么会起作用.

任何帮助都会很棒.

编辑:感谢您的评论.很明显,我需要重新解释这个问题.这里说:一旦安装(作为root),应用程序不再需要使用根权限吗?在这种情况下,如何将某人添加到群组中?/sys/devices/virtual/gpio不是gpio sysfs可用的位置,那有什么诀窍呢?我真的是一个n00b,所以这些问题可能是n00b-ish,所以请耐心等待.

linux sudo gpio raspberry-pi

20
推荐指数
1
解决办法
2万
查看次数

Raspberry Pi- GPIO GP事件

我正在使用我的Raspberry Pi上的GPIO引脚和PIR传感器来检测运动.当传感器检测到运动时,我想将软件移动到其他功能上.

此刻,为了检测运动,我的程序在等待运动被检测到的同时不断地循环运行.虽然目前这种方法有效,但在将来使用时,这将是非常低效的,我希望通过将其分配给一个事件来改进这一点.

有没有办法将我的GPIO输入绑定到程序检测到的事件,而无需手动运行循环.

这是我当前的检测运动循环:

var = 1
counter = 0
while var == 1:
    if GPIO.input(7):
        counter += 1
        time.sleep(0.5)
    else:
        counter = 0
        time.sleep(1)

    if counter >= 3:
        print "Movement!"
        captureImage()
        time.sleep(20)
Run Code Online (Sandbox Code Playgroud)

计数器和检测运动多次用于减少传感器拾取的误报数.

python events motion gpio raspberry-pi

19
推荐指数
2
解决办法
4万
查看次数

无法禁用systemd serial-getty服务

在使用Arch Linux的Raspberry Pi上,有一个名为的服务活动serial-getty@AMA0.

单元文件是:/usr/lib/systemd/system/serial-getty@.service

作为root我可以调用

systemctl stop serial-getty@ttyAMA0
systemctl disable serial-getty@ttyAMA0
Run Code Online (Sandbox Code Playgroud)

但重启后,服务已启用并再次运行.

禁用后为什么启用服务?如何永久禁用它?

UPDATE

systemd使用发电机在/ usr/lib中/ systemd /系统发电机/是称为systemd-getty的发电机二进制.此二进制文件在系统启动时运行,并将符号链接serial-getty@ttyAMA0.service添加到/run/systemd/generator/getty.target.wants.

我终于找到了一个肮脏的解 我在/usr/lib/systemd/system/serial-getty@.service中注释掉了所有操作.无论如何,服务确实似乎已开始,但没有阻止ttyAMA0.

tty archlinux gpio raspberry-pi systemd

17
推荐指数
1
解决办法
1万
查看次数

狮身人面像:如何排除自动模块中的进口?

我有一个用Python编写的Raspberry Pi项目,它使用RPi.GPIO模块.关于代码的所有工作都是在Windows机器上完成的,RPi.GPIO不会安装,每次我尝试运行autodoc时都会崩溃,说它无法导入RPi.GPIO.

D:\cube\docs\ledcube.rst:4: WARNING: autodoc: failed to import module u'ledcube'
; the following exception was raised:
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\sphinx-1.2b1-py2.7.egg\sphinx\ext\autodoc.
py", line 326, in import_object
    __import__(self.modname)
  File "D:\cube\ledcube.py", line 2, in <module>
    import RPi.GPIO as GPIO
ImportError: No module named RPi.GPIO
Run Code Online (Sandbox Code Playgroud)

有什么方法吗?

importerror python-sphinx autodoc gpio

15
推荐指数
3
解决办法
1万
查看次数

mmap比ioremap慢

我正在开发运行Linux 2.6.37的ARM设备.我试图尽可能快地切换IO引脚.我制作了一个小内核模块和一个用户空间应用程序.我尝试了两件事:

  1. 使用直接从内核空间操作GPIO控制寄存器ioremap.
  2. mmap() GPIO控制寄存器无需缓存并从用户空间使用它们.

两种方法都有效,但第二种方法比第一种方法慢3倍(在示波器上观察).我想我禁用了所有缓存机制.

当然,我想要充分利用这两个领域:从内核空间的速度来看,用户空间的灵活性和易开发性.

有谁知道为什么mmap()可能比这慢ioremap()

这是我的代码:

内核模块代码

static int ti81xx_usmap_mmap(struct file* pFile, struct vm_area_struct* pVma)
{
  pVma->vm_flags |= VM_RESERVED;
  pVma->vm_page_prot = pgprot_noncached(pVma->vm_page_prot);

  if (io_remap_pfn_range(pVma, pVma->vm_start, pVma->vm_pgoff,
                          pVma->vm_end - pVma->vm_start, pVma->vm_page_prot))
     return -EAGAIN;

  pVma->vm_ops = &ti81xx_usmap_vm_ops;
  return 0;
}

static void ti81xx_usmap_test_gpio(void)
{
  u32* pGpIoRegisters = ioremap_nocache(TI81XX_GPIO0_BASE, 0x400);
  const u32 pin = 1 << 24;
  int i;

  /* I should use IO read/write functions instead of pointer deferencing, 
   * but portability isn't …
Run Code Online (Sandbox Code Playgroud)

linux kernel mmap gpio

12
推荐指数
1
解决办法
6004
查看次数

Python按钮功能奇怪,不做同样的事情

我目前有两个连接到我的Raspberry Pi的按钮(这些是带有环形LED的那些)并且我正在尝试执行此代码

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

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT) #green LED
GPIO.setup(18, GPIO.OUT) #red LED
GPIO.setup(4, GPIO.IN, GPIO.PUD_UP) #green button
GPIO.setup(27, GPIO.IN, GPIO.PUD_UP) #red button

def remove_events():
        GPIO.remove_event_detect(4)
        GPIO.remove_event_detect(27)

def add_events():
        GPIO.add_event_detect(4, GPIO.FALLING, callback=green, bouncetime=800)
        GPIO.add_event_detect(27, GPIO.FALLING, callback=red, bouncetime=800)

def red(pin):
        remove_events()
        GPIO.output(17, GPIO.LOW)
        print "red pushed"
        time.sleep(2)
        GPIO.output(17, GPIO.HIGH)
        add_events()

def green(pin):
        remove_events()
        GPIO.output(18, GPIO.LOW)
        print "green pushed"
        time.sleep(2)
        GPIO.output(18, GPIO.HIGH)
        add_events()

def main():
    while True:
        print "waiting"
        time.sleep(0.5)

GPIO.output(17, GPIO.HIGH)
GPIO.output(18, GPIO.HIGH)
GPIO.add_event_detect(4, …
Run Code Online (Sandbox Code Playgroud)

python gpio raspberry-pi

12
推荐指数
1
解决办法
361
查看次数