跳到主要内容

GPIO

GPIO全称: General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。在RK平台上,除了部分有专门用途的pin(比如DDR、MIPI等),其他的pin,如果不配置复用的话,默认复用状态都是GPIO。RK的GPIO驱动,对上提供的是Linux下标准的GPIO接口。Linux下有一组用户态操作GPIO的sysfs节点。应用层对GPIO编程主要就是通过操作这几个节点来实现。

下面以操作GPIO3_A5为例进行介绍。此GPIO位置如下

在通用的Linux框架下面,所有GPIO都是用数字编号的。对于RK平台的芯片,其编号计算方式为
(gpio控制器号-0)*32+(端口号-‘A’)*8+索引序号
GPIO3_A5的控制器号为3,端口号为A,索引序号5,故编号为
(3-0)32+08+5=101

命令行操作GPIO

  • 将GPIO 101设置为用户态操作
echo 101 > /sys/class/gpio/export
  • 将GPIO 101设置为输出
echo out > /sys/class/gpio/gpio101/direction
  • 在GPIO 101为输出的情形下,设置电平
  1. 高电平
echo 1 > /sys/class/gpio/gpio101/value
  1. 低电平
echo 0 > /sys/class/gpio/gpio101/value
  • 将GPIO 101设置为输入
echo in > /sys/class/gpio/gpio101/direction
  • 在GPIO 101为输入的情形下,读取其电平,1为高,0为低
cat sys/class/gpio/gpio101/value
  • 取消GPIO 101用户态操作
echo 101 > /sys/class/gpio/unexport
  • 执行效果

4.png

USB

  • 将U盘通过USB挂载到系统上,操作如下:

# mkdir /mnt/usb
# mount /dev/block/sda1 /mnt/usb
# cd /mnt/usb
# ls
  • 执行效果:

4.png

UART

Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准。内核里面使用8250串口通用驱动,因此能够支持Linux下的标准串口编程。

  • 板上有三路通用串口,还有一路调试串口,建议不要把调试串口用于其他用途。
    9.jpg
  • 这三路通用串口的序号分别是5、7、9(如果9号串口复用了i2c,就不要在使用了),在Linux下对应的设备节点分别是 /dev/ttyS5 /dev/ttyS7 (/dev/ttyS9) 。下面以 ttyS7 为例介绍其用法,其他几路串口也是类似的。
  • 硬件上,使用串口模块连接ttyS7的TX 和RX,波特率:9600,接线图如下:
    8.png
  • 发送数据:
echo "youyeetoo" > /dev/ttyS7

执行效果:
7.png

I2C

  • i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以读写I2C设备寄存器。
  • i2c-tools使用方法:
  1. 查看所有的 i2c 总线。
# i2cdetect -l
  1. 查看指定i2c总线支持的功能
# i2cdetect -F 2
  1. 查看 i2c-2 总线上挂载的设备
# i2cdetect -a -y 2

图中出现'UU'表示该地址上面有设备并且设备与驱动程序匹配
图中出现'--'表示该地址上面没设备
图中出现'数字'表示该地址有设备但设备与驱动程序不匹配

  1. 查看 i2c-2 地址为0x42设备寄存器0x01的值
# i2cget -f -y 2 0x42 0x01
  • 执行效果:

SPI

  • 硬件连接

r1_硬件连接_spi_002.jpg

  • 注意:测试spi总线是,需要打开对应的设备节点,,修改设备树如下:rk3588s-evb4-lp4x-yyt.dtsi

43.png

  • 将开发板上电之后,进行 回环测试
dmesg -C
echo setspeed 0 1000000 > /dev/spi_misc_test
echo loop 0 10 255 > /dev/spi_misc_test
dmesg
  • 执行效果:

21.png

PWM

  • 硬件连接
    pwm7-fixed.png
  • 测试 PWM7 为例,执行如下命令:
# cd /sys/class/pwm/pwmchip0/
# echo 0 > export
# cd pwm0
# echo 10000 > period
# echo 5000 > duty_cycle
# echo 1 > enable
  • 执行结果:

24.png

24.png

CAN

CAN(Controller Area Network)控制器局域网,是一种高效、可靠的通信协议,用于实时控制和数据交换。它最初是由德国的BOSCH公司开发的,现在已经成为国际标准ISO 11898。CAN总线采用多主竞争式总线结构,支持多节点同时发送和接收数据,具有错误检测和自动重发功能,能够有效地提高系统的可靠性和实时性。CAN广泛应用于汽车、工业自动化、机器人等领域,是现代电子系统中不可或缺的一部分。

  • can的使用
  1. 查询当前网络设备
ifconfig -a
  1. 设置can
canconfig can0 down
canconfig can0 type can bitrate 1000000 dbitrate 3000000 on
canconfig can0 up
canconfig can0 start
//或者
canconfig can0 down
canconfig can0 type can bitrate 1000000 loopback on
canconfig can0 up
canconfig can0 start
  1. can收发
cansend can0 -v -i 12 13 12 12
candump can0

ADC

  • ADC(模数转换器)将模拟信号转换为数字信号,常用于电子设备中,如音频、视频处理和传感器应用。
  • r1 开发板是12位的adc。
  • r1开发板一共有两个adc通道,这里以通道4为例。使用命令
cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw
  • 测试接VCC:

r1_adc_001-硬件连接vcc.jpg

  • 执行效果:

22.png

  • 测试接GND:

r1_adc_002-硬件连接gnd.jpg

  • 执行效果:

22.png