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

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

在通用的Linux框架下面,所有GPIO都是用数字编号的。对于RK平台的芯片,其编号计算方式为
(gpio控制器号-0)*32+(端口号-‘A’)*8+索引序号
GPIO1_D6的控制器号为1,端口号为D,索引序号6,故编号为
(1-0)32+38+6=62
echo 62 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio62/direction
echo 1 > /sys/class/gpio/gpio62/value
echo 0 > /sys/class/gpio/gpio62/value
echo in > /sys/class/gpio/gpio62/direction
cat sys/class/gpio/gpio62/value
echo 62 > /sys/class/gpio/unexport

# mkdir /mnt/usb
# mount /dev/block/sda1 /mnt/usb
# cd /mnt/usb
# ls



# mkdir /mnt/usb
# mount /dev/block/sda1 /mnt/usb
# cd /mnt/usb
# ls

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

这三路通用串口的序号分别是6、7、9(如果9号串口复用了i2c,就不要在使用了),在Linux下对应的设备节点分别是 /dev/ttyS6 /dev/ttyS7 (/dev/ttyS9) 。下面以 ttyS7 为例介绍其用法,其他几路串口也是类似的。
硬件上,使用串口模块连接ttyS7的TX 和RX,波特率:9600,接线图如下:

发送数据:
echo "youyeetoo" > /dev/ttyS6
执行效果:

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


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
脉宽调制(PWM,Pulse Width Modulation)功能在嵌入式系统中非常常见,它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
Rockchip PWM 能够支持Linux下的标准PWM接口编程。
板上引出一路PWM用于自定义用途,其余还有用于屏幕背光的PWM,已被其它驱动独占,不能用作其它功能。

# find /sys -name "*pwmchip*"
/sys/class/pwm/pwmchip2
/sys/class/pwm/pwmchip0
/sys/class/pwm/pwmchip1
/sys/devices/platform/fd8b0020.pwm/pwm/pwmchip0
/sys/devices/platform/febf0030.pwm/pwm/pwmchip2
/sys/devices/platform/fd8b0030.pwm/pwm/pwmchip1
通过查询设备树可以得知 febf0030 分别为 pwm15 的寄存器首地址,因此 pwmchip3 为pwm15的节点。
# cd /sys/class/pwm/pwmchip2/
# echo 0 > export
# cd pwm0
# echo 10000 > period
# echo 5000 > duty_cycle
# echo 1 > enable
