0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

北京迅为电子 2025-03-06 11:23 次阅读

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE图形处理器。RK3568支持4K解码和1080P编码,支持SATA/PCIE/USB3.0外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568支持安卓11和linux系统,主要面向物联网网关、NVR存储、工控平板、工业检测、工控盒、卡拉OK、云终端、车载中控等行业。

wKgZPGfJFRCAVVF2AAD8foavbSM335.png

【本文摘自】【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发

【相关视频】OpenHarmony学习开发系列教程(第1期 北向基础篇一)

OpenHarmony学习开发系列教程(第2期 南向基础篇一)

实战:第一篇OpenHarmony配置HDF驱动控制LED

第1章GPIO基础知识

1.1什么是GPIO

GPIO意为通用输入/输出接口,GPIO端口可以配置为输入或输出状态,用于产生或读取高低电平信号。其高低电平的数量、波形组合及变化方式没有任何协议限制,用户可以根据需求自由设定。GPIO广泛应用于驱动简单外设,如LED、按键、开关等,不需要复杂的协议支持。

与GPIO不同,专用IO端口通常是为特定通信协议设计的,具有更严格的协议要求。它们的高低电平数量、波形组合以及波形的持续时间必须严格遵循相应协议的规范。常见的专用IO协议包括I2C、SPI、UART和PWM等。这些接口通常用于数据传输或信号控制,如在传感器、显示模块、通信设备等应用中,要求精确的时序和信号格式。

芯片通常需要提供丰富的功能和外部接口,以满足各种应用需求。然而,由于芯片的管脚(pin)数量有限,为了最大化资源的利用,许多IO管脚支持多功能设计,并通过软件配置实现管脚的分时复用。也就是说,同一个管脚可以根据需求在不同的功能模式之间切换。需要注意的是,并非所有IO管脚都可以用作GPIO。某些管脚被专门设计用于支持特定的专用接口(例如用于连接外部存储芯片或通信模块),这些管脚的功能是固定的,无法配置为GPIO。而另一些管脚则可以自由配置为GPIO,供用户根据实际需求灵活使用。

1.2 GPIO引脚计算

为了更高效地管理数量众多的GPIO,通常会将GPIO管脚按照一定规则进行分组管理。每个GPIO管脚都会被分配一个组号和组内偏移(offset)值,后者表示该管脚在所在组中的位置。通过这种分组方式,可以简化GPIO的访问和配置。

不同的芯片,其GPIO的分组数量和每组内包含的管脚数量可能有所不同。这些设计差异通常取决于芯片的架构和应用需求。例如,在RK3568芯片中有5组GPIO bank:GPIO0~GPIO4,每组又以A0~A7, B0~B7, C0~C7, D0~D7作为编号区分,常用以下公式计算引脚:

GPIO pin脚计算公式:pin = bank * 32 + number //bank为组号,number为小组编号

GPIO小组编号计算公式:number = group * 8 + X

引脚编号=控制寄存器的寄存器基数+控制引脚寄存器位数。 在rk3568中,GPIO_number的计算方法为:n*32 + (K-A)*8 + x;括号里面的A、B、C、D分别代表数值0、1、2、3, 在计算时候分别对应即可。

下面演示LED9用户LED灯的GPIO0_PB7 pin脚计算方法:

bank = 0; //GPIO0_B7=> 0, bank∈[0,4]

group = 1; //GPIO0_B7 => 1, group∈{(A=0), (B=1), (C=2), (D=3)}

X = 7; //GPIO4_D7 => 5, X∈[0,7]

number = group * 8 + X = 1 * 8 + 7 =15

pin = bank*32 + number= 0 * 32 + 15 = 15;

1.3 GPIO用户态测试

sysfs控制接口为/sys/class/gpio/export和/sys/class/gpio/unexport。如下图所示:

wKgZO2fJFPGAWB8XAACO5vQx5yg904.png

/sys/class/gpio/export用于将GPIO控制从内核空间导出到用户空间。/sys/class/gpio/unexport用于取消GPIO控制从内核空间到用户空间的导出。export和unexport,他们都是只写的。GpiochipX代表GPIO控制器

export:用于将指定编号的GPIO引脚导出。在使用GPIO引脚之前,需要将其导出,导出成功之后才能使用它。注意export文件是只写文件,不能读取,将一个指定的编号写入到export文件中即可将对应的GPIO引脚导出,以GPIO0_PB7为例(pin计算值为15)使用export文件进行导出,导出成功如下图所示:

echo 15 > export

wKgZPGfJFPGAXOUZAACHkWLfpEo325.png

会发现在/sys/class/gpio目录下生成了一个名为gpio15的文件夹(gpioX,X表示对应的编 号),该文件夹就是导出来的GPIO引脚对应的文件夹,用于管理、控制该GPIO引脚。

unexport:将导出的GPIO引脚删除。当使用完GPIO引脚之后,需要将导出的引脚删除,同样该文件也是只写文件、不可读,使用unexport文件进行删除GPIO0_PB7,删除成功如下图所示:

echo 15 > unexport

wKgZPGfJFPGAUI8fAACjwgNBZuQ504.png

可以看到之前生成的 gpio15文件夹就会消失!

需要注意的是,并不是所有 GPIO引脚都可以成功导出,如果对应的GPIO已经被导出或者在内核中被使用了,那便无法成功导出,导出失败如下图所示:

wKgZPGfJFPGAVSdXAABHiKbLLb4780.png

出现上图报错的原因是该GPIO已经被其他GPIO使用,需要在内核中找到使用GPIO的驱动,并取消该驱动才可以正常使用GPIO。在使用GPIO15时,需要取消Linux内核源码中LED灯的配置,如下所示:

wKgZO2fJFPGADsugAADGUcqd5B0951.png

再次使用以下命令导出GPIO0_PB7引脚,导出成功之后进入gpio15文件夹如下图所示:

echo 15 > export

wKgZO2fJFPGAZ2VpAAB8PVVI_Hc818.png

可以看到gpio15文件夹下分别有active_low、device、direction、edge、power、subsystem、uevent、value八个文件,需要关心的文件是active_low、direction、edge以及value这四个属性文件,接下来分别介绍这四个属性文件的作用:

direction:配置GPIO引脚为输入或输出模式。该文件可读、可写,读表示查看GPIO当前是输入还是输出模式,写表示将GPIO配置为输入或输出模式;读取或写入操作可取的值为"out"(输出模式)和"in"(输入模式)。

在“/sys/class/gpio/gpio15”目录下使用cat命令查看direction输入输出模式,如下图所示:

cat direction

wKgZPGfJFPKAX5RxAABGACzzLIA517.png

默认状态下的输入输出状态为“in”,由于direction为可读可写,可以使用以下命令将模式配置为输出,配置完成如下图所示

echo out > direction

cat direction

wKgZPGfJFPKAM4VXAABT9eIKw94721.png

active_low:用于控制极性得属性文件,可读可写,默认情况下为0,使用cat命令进行文件内容的查看,如下图所示 :

cat active_low

当 active_low等于0时,value值若为1则引脚输出高电平,value值若为0则引脚输出低电平。当active_low等于1时 ,value值若为0则引脚输出高电平,value值若为1则引脚输出低电平。

edge:控制中断的触发模式,该文件可读可写。在配置GPIO引脚的中断触发模式之前,需将其设置为输入模式,四种触发模式的设置如下所示:

非中断引脚:echo "none" > edge

上升沿触发:echo "rising" > edge

下降沿触发:echo "falling" > edge

边沿触发: echo "both" > edge

value:设置高低电平,如果我们要把这个管脚设置成高电平,我们只需要给value设置成1即可,反之,则设置成0。使用命令

echo 1 > value

反之,把GPIO设置成低电平,使用命令

echo 0 > value

wKgZO2fJFPKAL707AAEfrd_mLb4205.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GPIO
    +关注

    关注

    16

    文章

    1247

    浏览量

    53388
  • 驱动开发
    +关注

    关注

    0

    文章

    133

    浏览量

    12228
  • OpenHarmony
    +关注

    关注

    26

    文章

    3806

    浏览量

    17971
  • RK3568
    +关注

    关注

    5

    文章

    563

    浏览量

    5970
收藏 人收藏

    评论

    相关推荐
    热点推荐

    RK3568开发驱动指南Linux中通用SPI设备驱动

    RK3568开发驱动指南Linux中通用SPI设备驱动
    的头像 发表于 01-23 11:02 2399次阅读
    <b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>驱动</b>指南Linux中通用SPI设备<b class='flag-5'>驱动</b>

    北京RK3568开发OpenHarmony系统南向驱动开发内核HDF驱动框架架构

    北京RK3568开发OpenHarmony系统
    的头像 发表于 03-11 14:13 907次阅读
    <b class='flag-5'>北京</b><b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b><b class='flag-5'>南向</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>内核HDF<b class='flag-5'>驱动</b>框架架构

    鸿蒙OpenHarmony南向/北向快速开发教程-RK3568开发

    -修改产品信息 P20_源码定制-关闭自动息屏 P21_源码定制-修改开机logo和动画 P22_新建运行北向应用 RK3568开发板同时也支持更多
    发表于 07-23 10:44

    RK3568开发板鸿蒙OpenHarmony系统固件烧写步骤

    1、RK3568开发板鸿蒙OpenHarmony系统固件烧写首先拷贝烧写器(烧写器在光盘资料
    发表于 08-26 17:45

    系统升级 | RK3568体验 OpenHarmony 3.2

    iTOP -RK3568开发板使用手册上新,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。北京
    发表于 03-29 10:21

    RK3568开发板2800页手册+220集视频

    itop-3568ubuntu使用手册 itop-3568开发板c应用编程手册 itop-3568开发
    发表于 06-01 10:25

    【教程上新】基于iTOP-RK3568开发板的OpenCV开发手册

    【教程上新】基于iTOP-RK3568开发板的OpenCV开发手册
    的头像 发表于 02-08 15:22 1416次阅读
    【教程上新】基于<b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>iTOP-RK3568</b><b class='flag-5'>开发</b>板的OpenCV<b class='flag-5'>开发</b>手册

    RK3568开发GPIO之外接模块

    RK3568开发GPIO之外接模块
    的头像 发表于 08-24 17:41 1668次阅读
    <b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>GPIO</b>之外接模块

    itop-rk3568指导手册v3

    itop-rk3568指导手册,专为RK3568编写!拒绝网络拼凑!持续更新中.
    发表于 09-06 14:09 39次下载

    RK3568开发驱动开发指南-输入子系统

    RK3568开发驱动开发指南-输入子系统
    的头像 发表于 02-23 15:11 1400次阅读
    <b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>指南-输入子<b class='flag-5'>系统</b>

    北京RK3568开发板嵌入式学习之Linux驱动全新更新-CAN+

    北京RK3568开发板嵌入式学习之Linux驱动全新更新-CAN+
    的头像 发表于 09-04 15:29 855次阅读
    <b class='flag-5'>北京</b><b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板嵌入式学习之Linux<b class='flag-5'>驱动</b>全新更新-CAN+

    iTOP-RK3568/RK3588开发板获麒麟软件适配认证

    iTOP-RK3568/RK3588开发板获麒麟软件适配认证
    的头像 发表于 10-18 14:56 985次阅读
    <b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>iTOP-RK3568</b>/<b class='flag-5'>RK</b>3588<b class='flag-5'>开发</b>板获麒麟软件适配认证

    北京iTOP-RK3568开发OpenHarmony系统南向驱动开发实操-HDF驱动配置LED

    北京iTOP-RK3568开发OpenHarmony
    的头像 发表于 03-14 14:41 421次阅读
    <b class='flag-5'>北京</b><b class='flag-5'>迅</b><b class='flag-5'>为</b><b class='flag-5'>iTOP-RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b><b class='flag-5'>南向</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实操-HDF<b class='flag-5'>驱动</b>配置LED

    北京iTOP-RK3568开发OpenHarmony系统南向驱动开发-第4章 UART基础知识

    北京iTOP-RK3568开发OpenHarmony
    的头像 发表于 03-17 15:50 326次阅读
    【<b class='flag-5'>北京</b><b class='flag-5'>迅</b><b class='flag-5'>为</b>】<b class='flag-5'>iTOP-RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b><b class='flag-5'>南向</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-第4章 UART<b class='flag-5'>基础知识</b>

    北京iTOP-RK3568开发板鸿蒙OpenHarmony系统南向驱动开发实操-HDF驱动配置UART

    北京iTOP-RK3568开发板鸿蒙OpenHarmony
    的头像 发表于 03-25 11:02 479次阅读
    【<b class='flag-5'>北京</b><b class='flag-5'>迅</b><b class='flag-5'>为</b>】<b class='flag-5'>iTOP-RK3568</b><b class='flag-5'>开发</b>板鸿蒙<b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b><b class='flag-5'>南向</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实操-HDF<b class='flag-5'>驱动</b>配置UART