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
echo 101 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio101/direction
echo 1 > /sys/class/gpio/gpio101/value
echo 0 > /sys/class/gpio/gpio101/value
echo in > /sys/class/gpio/gpio101/direction
cat sys/class/gpio/gpio101/value
echo 101 > /sys/class/gpio/unexport
# mkdir /mnt/usb
# mount /dev/block/sda1 /mnt/usb
# cd /mnt/usb
# ls
Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准。内核里面使用8250串口通用驱动,因此能够支持Linux下的标准串口编程。
板上有三路通用串口,还有一路调试串口,建议不要把调试串口用于其他用途。
这三路通用串口的序号分别是5、7、9(如果9号串口复用了i2c,就不要在使用了),在Linux下对应的设备节点分别是 /dev/ttyS5 /dev/ttyS7 (/dev/ttyS9) 。下面以 ttyS7 为例介绍其用法,其他几路串口也是类似的。
硬件上,使用串口模块连接ttyS7的TX 和RX,波特率:9600,接线图如下:
发送数据:
echo "youyeetoo" > /dev/ttyS7
执行效果:
# i2cdetect -l
# i2cdetect -F 2
# i2cdetect -a -y 2
图中出现'UU'表示该地址上面有设备并且设备与驱动程序匹配
图中出现'--'表示该地址上面没设备
图中出现'数字'表示该地址有设备但设备与驱动程序不匹配
# i2cget -f -y 2 0x42 0x01
回环测试
dmesg -C
echo setspeed 0 1000000 > /dev/spi_misc_test
echo loop 0 10 255 > /dev/spi_misc_test
dmesg
硬件连接
测试 PWM7 为例,执行如下命令:
# cd /sys/class/pwm/pwmchip0/
# echo 0 > export
# cd pwm0
# echo 10000 > period
# echo 5000 > duty_cycle
# echo 1 > enable
CAN(Controller Area Network)控制器局域网,是一种高效、可靠的通信协议,用于实时控制和数据交换。它最初是由德国的BOSCH公司开发的,现在已经成为国际标准ISO 11898。CAN总线采用多主竞争式总线结构,支持多节点同时发送和接收数据,具有错误检测和自动重发功能,能够有效地提高系统的可靠性和实时性。CAN广泛应用于汽车、工业自动化、机器人等领域,是现代电子系统中不可或缺的一部分。
ifconfig -a
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
cansend can0 -v -i 12 13 12 12
candump can0
cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw