瑞芯微RK3568开发:GPIO实践篇
Posted 青龙战
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瑞芯微RK3568开发:GPIO实践篇相关的知识,希望对你有一定的参考价值。
SOC平台各类GPIO构建原理是大道一统的,在各个诸如状态、数据、中断和屏蔽等寄存器具体含义用法,有少许差异。玩好RK的GPIO,需要先理解这类通用接口的框架。
介绍RK3568的GPIO,认为讲2类重要地址和记录几种编程实践方法即可。
一、2类地址
RK3568的MUX复用配置地址和通用寄存器类地址。
1、MUX功能复用配置类寄存器,基址:0xFDC20000(GPIO0 Bank)、0xFDC60000(GPIO1-GPIO4 Banks)。
2、GPIO通用类数据、状态、中断、MASK类寄存器,基址:0xFDD60000(GPIO0)、0x0xFE740000(GPIO1)、0xFE750000(GPIO2)、0xFE760000(GPIO3)、0xFE770000(GPIO4)。
二、几种操作方式
1、io tool
io -4 -w 0xFDD6000C 0xffff4000
io -4 -w 0xFDD60004 0xffff4081
io -4 -r 0xFDD6000C
io也可以单字节操作,参考io -h
2、用户态类调用
内核注册了gpio接口操作命令行,
查看以注册gpio端口:cat /sys/kernel/debug/gpio;
申请和释放:echo n > /sys/class/gpio/export,echo n > /sys/class/gpio/unexport;
3、uboot或kernel编程
裸机直接对寄存器物理地址进行读写操作,如writel和readl;
上系统接口的话,有标准的gpio接口,dts和of_xxx那一套;
宁远电子瑞芯微RK3399开发板DLT3399A底层接口调用
GPIO口控制
在DLT3399A板卡正面写有GPIO和UART4_1V8丝印的接口,并看到板子反面对应的引脚gpio丝印,选择相对应的gpio控制节点,接口位置如下图所示:
1、dlt3399a上有6个gpio控制节点(板卡正面GPIO丝印):
高电平为3.0V:
"/dev/gpio4_c5"
"/dev/gpio4_c6"
"/dev/gpio4_d5"
"/dev/gpio4_d6"
高电平为1.8V:
"/dev/gpio1_b1"
"/dev/gpio1_b2"
读写方法:
(1)使用read函数读gpio输入状态:
读取到数值 1,代表输入为高电平;
读取到数值 0,代表输入为低电平;
(2)使用write函数控制gpio输出:
写入‘1‘,代表gpio输出高电平;
写入‘0‘,代表gpio输出低电平;
2、测试用例
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
int main (void)
int fd;
char gpio_in = -1;
char gpio_out=‘0‘;
fd = open ("/dev/gpio4_c5", O_RDWR); //打开设备节点
if (fd < 0)
exit(0);
/* read */
read (fd, &gpio_in, sizeof(char)); //读取GPIO输入状态
printf("gpio_in value = %d\\n", gpio_in);
/* write */
printf("gpio_out value: %d\\n", gpio_out);
if (write(fd, &gpio_out, sizeof(char)) < 0) //输出GPIO状态
perror("fail to write");
close (fd);
return 0;
二 串口(TTL)
串口接口位置如下图所示:
设备节点:”/dev/ttyS4”
串口自测方法:短接UART4_RX和UART4_TX两个管脚(可看板卡丝印),Android系统中打开ComAssistant串口软件,采用自发自收的测试方式,发的内容是能正确的接收回来显示,说明数据通信正常;
三 散热风扇控制接口
风扇接口位置如果所示:
1、系统自动控制:读取CPU温度,如果CPU温度超过60℃,散热风扇接口会输出12V电压,开启风扇。温度低于40℃以下,散热风扇接口会关闭风扇。
2、如果客户需要控制风扇的开启和关闭,方法如下:
温度获取节点:”/sys/devices/virtual/thermal/thermal_zone0/temp”
如果读取的到的温度值为:48750,换算温度为48750/1000=48.75℃;
控制散热风扇开启和关闭的控制节点:”/dev/fan”
使用write函数控制gpio输出:
写入’1’,代表开启散热风扇;
写入’0’,代表关闭散热风扇;
写入’2’, 代表客户不进行控制,用底层默认自动控制;
测试代码用例,可参考GPIO口控制测试用例;
以上是关于瑞芯微RK3568开发:GPIO实践篇的主要内容,如果未能解决你的问题,请参考以下文章