BeagleBone Black笔记
目录
- 参考资料
- 开机
- led控制
- GPIO输入输出
参考资料
链接: BeagleBone Black使用(一):狗板简介
链接: 使用Beaglebone Black的IO口
开机
直接用usb连接到电脑上,这是个otg口,虚拟成了网卡:
网口登录:
Debian GNU/Linux 10 beaglebone ttyS0
BeagleBoard.org Debian Buster IoT Image 2020-04-06
Support: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
default username:password is [debian:temppwd]
默认用户名密码:debian:temppwd
串口登录(串口可以直接荣root登录 root|root
):
led控制
开启
echo none > /sys/class/leds/beaglebone:green:usr3/trigger && echo 1 > /sys/class/leds/beaglebone:green:usr3/brightness
关闭
echo none > /sys/class/leds/beaglebone:green:usr3/trigger && echo 0 > /sys/class/leds/beaglebone:green:usr3/brightness
python代码:
#!/usr/bin/python
#//
# blink.py
# Blinks one LED wired to P9_15.
# Wiring: P9_15 connects to the plus lead of an LED. The negative lead of the
# LED goes to a 220 Ohm resistor. The other lead of the resistor goes
# to ground.
# Setup:
# See:
#//
import Adafruit_BBIO.GPIO as GPIO
import time
out = "P9_15"
GPIO.setup(out, GPIO.OUT)
while True:
GPIO.output(out, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(out, GPIO.LOW)
time.sleep(0.5)
c代码:
// blinkLED.c
// Blinks the USR3 LED.
// Wiring: None
// Setup:
// See:
#include <stdio.h>
#include <unistd.h>
int main() {
FILE * trigger = fopen("/sys/class/leds/beaglebone:green:usr3/trigger", "w");
FILE * brightness = fopen("/sys/class/leds/beaglebone:green:usr3/brightness", "w");
int on = 0;
fprintf(trigger, "none\n");
while(1) {
fprintf(brightness, "%d\n", on);
fflush(brightness);
if(!on)
on = 1;
else
on = 0;
usleep(500000);
}
}
// ring.pru0.c
// Does the "Ring Test" given here: https://pub.pages.cba.mit.edu/ring/
// Reads P8_19 and writes it to P9_16 as fast as it can.
// Wiring: P9_16 connects to the plus lead of an LED. The negative lead of the
// LED goes to a 220 Ohm resistor. The other lead of the resistor goes
// to ground (P9_1 or P9_2).
// Wire P8_19 to P9_16 to produce the 'ring' circuit.
// A Switch goes to P8_19 and 3.3V (P9_3 or P9_4).
// Setup: config_pin P9_16 pruout and config_pin P8_19 to pruin
// See: prugpio.h to see which pins attach to R30
// PRU: pru0
#include <stdint.h>
#include <pru_cfg.h>
#include <pru_ctrl.h>
#include <stddef.h>
#include <rsc_types.h>
#include "resource_table_empty.h"
#include "prugpio.h"
volatile register unsigned int __R30;
volatile register unsigned int __R31;
void main(void) {
/* Read GPIO input P9_25 and invert to GPIO output P9_29 */
while(1) {
if(__R31 & P8_19)
__R30 = 0;
else
__R30 = P9_16;
}
}
GPIO输入输出
root@beaglebone:~# cd /sys/class/gpio
root@beaglebone:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:00 export
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/virtual/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/virtual/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/virtual/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@beaglebone:/sys/class/gpio# echo 44 > export
root@beaglebone:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:03 export
lrwxrwxrwx 1 root root 0 Jan 1 00:03 gpio44 -> ../../devices/virtual/gpio/gpio44
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/virtual/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/virtual/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/virtual/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@beaglebone:/sys/class/gpio# cd gpio44
root@beaglebone:/sys/class/gpio/gpio44# ls -l
total 0
-rw-r--r-- 1 root root 4096 Jan 1 00:03 active_low
-rw-r--r-- 1 root root 4096 Jan 1 00:03 direction
-rw-r--r-- 1 root root 4096 Jan 1 00:03 edge
drwxr-xr-x 2 root root 0 Jan 1 00:03 power
lrwxrwxrwx 1 root root 0 Jan 1 00:03 subsystem -> ../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jan 1 00:03 uevent
-rw-r--r-- 1 root root 4096 Jan 1 00:03 value
root@beaglebone:/sys/class/gpio/gpio44# cat direction
in
root@beaglebone:/sys/class/gpio/gpio44# echo out > direction
root@beaglebone:/sys/class/gpio/gpio44# cat direction
out
root@beaglebone:/sys/class/gpio/gpio44# cat value
0
root@beaglebone:/sys/class/gpio/gpio44# echo 1 > value
root@beaglebone:/sys/class/gpio/gpio44# cat value
1
—
解释一下,首先要把某个(本例中是第44个,即P8_12)gpio export一下,变成用户可用的状态,然后目录里就会多出来一个gpio44目录,进入它对相应文件进行读写就可以操作io口了。输入输出是一样的道理。读的话Linux会自动实时更新value文件里的数据,但更新速度有多快暂时还不清楚,高速io操作的话用这种方法感觉不靠谱。不过速度不敏感的话是没问题的。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h> //define O_WRONLY and O_RDONLY
#define SYSFS_GPIO_DIR "/sys/class/gpio"
#define MAX_BUF 64
void main()
{
int fd, len;
char buf[MAX_BUF];
char ch;
int i;
//export gpio44
fd = open(SYSFS_GPIO_DIR "/export", O_WRONLY);
len = snprintf(buf,sizeof(buf),"44");
write(fd,buf,len);
close(fd);
//set direction
snprintf(buf,sizeof(buf),SYSFS_GPIO_DIR"/gpio44/direction");
fd = open(buf, O_WRONLY);
write(fd, "in", 3);
close(fd);
//read and print value 10 times
for(i=0;i<10;i++)
{
snprintf(buf,sizeof(buf),SYSFS_GPIO_DIR"/gpio44/value");
fd = open(buf, O_RDONLY);
read(fd,&ch,1);
printf("%c\n",ch);
close(fd);
usleep(1000000);
}
}
查看引脚输入状态(空闲高电平3.3V输出1, 接GND输出 0)
root@beaglebone:/sys/class/gpio# cd gpio44/
root@beaglebone:/sys/class/gpio/gpio44# ls
active_low device direction edge label power subsystem uevent value
root@beaglebone:/sys/class/gpio/gpio44# cat direction
in
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44# echo out > direction
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44# cat direction
out
root@beaglebone:/sys/class/gpio/gpio44# cat value
0
root@beaglebone:/sys/class/gpio/gpio44#
root@beaglebone:/sys/class/gpio/gpio44# echo 1 > value
root@beaglebone:/sys/class/gpio/gpio44# echo 0 > value
root@beaglebone:/sys/class/gpio/gpio44# cd ../gpio6
gpio60/ gpio61/ gpio62/ gpio63/ gpio65/ gpio66/ gpio67/ gpio68/ gpio69/
root@beaglebone:/sys/class/gpio/gpio44# cd ../gpio68/
root@beaglebone:/sys/class/gpio/gpio68# cat value
1
root@beaglebone:/sys/class/gpio/gpio68# cat direction
in
root@beaglebone:/sys/class/gpio/gpio68# cat direction
in
root@beaglebone:/sys/class/gpio/gpio68# cat value
0
root@beaglebone:/sys/class/gpio/gpio68# cat value
1