Skip to main content

GPIO

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

YY3568上接了两个LED灯,分别为GPIO3_A4和GPIO02_B2,如下图所示:
led11.jpg

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

命令行操作GPIO

将GPIO 100设置为用户态操作

echo 100 > /sys/class/gpio/export

将GPIO 100设置为输出

echo out > /sys/class/gpio/gpio100/direction

在GPIO 100为输出的情形下,设置电平
高电平

echo 1 > /sys/class/gpio/gpio100/value

led11.jpg

低电平

echo 0 > /sys/class/gpio/gpio100/value

led11.jpg

将GPIO 100设置为输入

echo in > /sys/class/gpio/gpio100/direction

在GPIO 100为输入的情形下,读取其电平,1为高,0为低

cat sys/class/gpio/gpio100/value

取消GPIO 100用户态操作

echo 100 > /sys/class/gpio/unexport

USB

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

usb-3.png

usb-3.png

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

usb-3.png

UART

  • YY3568开发板引出5个uart接口,分别是uart2,uart3,uart4,uart8和uart9。
  • UART2是板子的调试串口,波特率1500000,使用串口模块的 tx 管脚连接 开发板的 rx 管脚,串口模块的 rx 管脚连接开发板的 tx 管脚。再将串口模块的GND接到板子GND上(GND一定要接上)。

  • 在串口终端中查看已存在的串口设备,执行如下命令:
ls /dev/ttyS*

uart_list.png

  • 在windows上打开sscom工具,连接usb转ttl模块的串口:

sscom.png

UART3验证

  1. 如下图,USB转TTL的模块接在UART3端子上:
    uart3_line.jpg
  2. 串口3的设备文件:/dev/ttyS3
  3. 在调试串口中输出如下命令,并且在sscom工具中查看(注意串口的波特率为9600):
    uart4_cmd.png

UART4验证

  1. 如下图,USB转TTL的模块接在UART4端子上:
    uart4_line.jpg
  2. 串口4的设备文件:/dev/ttyS4
  3. 在调试串口中输出如下命令,并且在sscom工具中查看(注意串口的波特率为1500000):
    uart4_cmd.png

UART8验证

  1. 如下图,USB转TTL的模块接在UART8端子上:
    uart8_line.jpg
  2. 串口8的设备文件:/dev/ttyS8
  3. 在调试串口中输出如下命令,并且在sscom工具中查看(注意串口的波特率为9600):
    uart4_cmd.png

I2C

  • YY3568开发板引出两个I2C接口,分别是I2C1和I2C5。
  • 验证i2c我们可以利用强大的工具i2c-tools,它是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以读写I2C设备寄存器。
  • UART2是板子的调试串口,波特率1500000,使用串口模块的 tx 管脚连接 开发板的 rx 管脚,串口模块的 rx 管脚连接开发板的 tx 管脚。再将串口模块的GND接到板子GND上(GND一定要接上)。

  • 以下使用MPU6050传感器进行测试:

I2C1验证

  1. 如下图,MPU6050接在I2C1端子上:
    i2c1_line.jpg
  2. 在调试串口终端中,使用“i2cdetect -y 1”扫描i2c1上挂载的设别
  3. 在调试串口终端中,使用“i2cdump -f -y 1 0x68” 查看器件所有寄存器的值
  4. 在调试串口终端中,使用“i2cget -f -y 1 0x68 0x75” 查看器件0x75寄存器的值
    i2c1_cmd.jpg

I2C5验证

  1. 如下图,MPU6050接在I2C5端子上:
    i2c5_line.jpg
  2. 在调试串口终端中,使用“i2cdetect -y 5”扫描i2c1上挂载的设别
  3. 在调试串口终端中,使用“i2cdump -f -y 5 0x68” 查看器件所有寄存器的值
  4. 在调试串口终端中,使用“i2cget -f -y 5 0x68 0x75” 查看器件0x75寄存器的值
    i2c5_cmd.jpg

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