ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用

这篇具有很好参考价值的文章主要介绍了ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. GPIO简介​

GPIO,全称 General-Purpose Input/Output(通用输入输出),是一种在计算机和嵌入式系统中常见的数字输入输出接口。它允许软件控制硬件的数字输入和输出,例如开关、传感器、LED灯等。GPIO通常由一个芯片或处理器上的引脚提供支持,通过编程可以配置这些引脚为输入或输出,并且可以通过相应的软件命令来读取输入状态或控制输出状态。

2. GPIO引脚编号计算方法​

RK3588共 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:

 GPIO pin脚计算公式:pin = bank * 32 + number

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

例如: GPIO3_B5的计算方式 : 32 3 + 1 8 + 5 = 109 ---> 也就是说,GPIO3_B5对应的是GPIO的编号是gpio-109。

3. 复用​

GPIO口除了通用输入输出功能外,还可能有其它复用功能

rockchip maskrom引脚,单片机,嵌入式硬件

从原理图中看出:以GPIO1_C0为例,就有如下几个功能:

func0 func1 func2 func3
GPIO1_C0 I2C3_SDA_M0 UART3_RX_M0 SPI4_MISO_M0

在系统DTS配置中GPIO1_C0默认是I2C3_SDA_M0功能。如果我们想将GPIO1_C0复用为UART3_RX_M0功能,该怎么做呢?

  1. 首先打开uart3 节点,将pinctrl配置为uart3m0_xfer。pinctrl配置是GPIO复用的最关键的配置,在这里就是将GPIO1_C0复用做了uart3功能。
&uart3 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart3m0_xfer>;
    status = "okay";
};

&pinctrl {
    uart3 {
        /omit-if-no-ref/
        uart3m0_xfer: uart3m0-xfer {
            rockchip,pins =
                /* uart3_rx_m0 */
                <1 RK_PC0 10 &pcfg_pull_up>,   # 将GPIO1_C0复用为uart3_rx_m0 
                /* uart3_tx_m0 */
                <1 RK_PC1 10 &pcfg_pull_up>;   # 将GPIO1_C1复用为uart3_tx_m0 
        };
    };
};

  1. 如果发现GPIO1_C0被复用为I2c3,则在dts中关闭它。
&i2c3 {
    status = "disabled";
};

这样,我们就将GPIO1_C0复用为了UART3_RX_M0功能

4. GPIO调试方法​

4.1 读取GPIO状态信息​

Debugfs 文件系统目的是为开发人员提供更多内核数据,方便调试。 这里 GPIO 的调试也可以用 Debugfs 文件系统,获得更多的内核信息。GPIO 在 Debugfs 文件系统中的接口为 /sys/kernel/debug/gpio,可以这样读取该接口的信息:

armsom@armsom:~$ sudo cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/fd8a0000.gpio, gpio0:
 gpio-15  (                    |led_rgb_b           ) out lo
 gpio-20  (                    |reset               ) out lo ACTIVE LOW
 gpio-21  (                    |bt_default_wake_host) in  hi

gpiochip1: GPIOs 32-63, parent: platform/fec20000.gpio, gpio1:
 gpio-34  (                    |bt_default_rts      ) in  hi
 gpio-36  (                    |vcc3v3-pcie30       ) out lo
 gpio-40  (                    |camera-pwdn-gpio    ) out hi
 gpio-54  (                    |hdmirx-det          ) in  lo ACTIVE LOW
 gpio-58  (                    |vcc3v3-pcie2x1l0    ) out hi
 gpio-61  (                    |headset_gpio        ) in  hi

gpiochip2: GPIOs 64-95, parent: platform/fec30000.gpio, gpio2:
 gpio-78  (                    |vbus5v0-typec       ) out lo

gpiochip3: GPIOs 96-127, parent: platform/fec40000.gpio, gpio3:
 gpio-101 (                    |vcc-5v0-gpio-regulat) out hi
 gpio-102 (                    |bt_default_reset    ) out lo
 gpio-104 (                    |reset               ) out hi
 gpio-125 (                    |bt-wake-gpio-regulat) out hi

gpiochip4: GPIOs 128-159, parent: platform/fec50000.gpio, gpio4:
 gpio-130 (                    |wifi-diable-gpio-reg) out hi
 gpio-134 (                    |sbu1-dc             ) out lo
 gpio-135 (                    |sbu2-dc             ) out lo
 gpio-136 (                    |vcc5v0-host-regulato) out hi
 gpio-149 (                    |led_rgb_r           ) out lo

gpiochip5: GPIOs 509-511, parent: platform/rk806-pinctrl.9.auto, rk806-gpio, can sleep:

从读取到的信息中可以知道,内核把 GPIO 当前的状态都列出来了,以 GPIO0组为例,gpio-15(GPIO0_B7) 对应的dts节点是led_rgb_b,输出低电平 (out lo)。

4.2 查看 pinmux-pins​

armsom@armsom:~$ sudo cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
Pinmux settings per pin
Format: pin (name): mux_owner gpio_owner hog?
pin 0 (gpio0-0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 1 (gpio0-1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 2 (gpio0-2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 3 (gpio0-3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 4 (gpio0-4): fe2c0000.mmc (GPIO UNCLAIMED) function sdmmc group sdmmc-det
pin 5 (gpio0-5): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 6 (gpio0-6): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 7 (gpio0-7): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 8 (gpio0-8): 6-0051 (GPIO UNCLAIMED) function hym8563 group rtc-int
pin 9 (gpio0-9): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-cs0
pin 10 (gpio0-10): wireless-wlan (GPIO UNCLAIMED) function wireless-wlan group wifi-host-wake-irq
pin 11 (gpio0-11): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 12 (gpio0-12): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 13 (gpio0-13): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer
pin 14 (gpio0-14): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer
pin 15 (gpio0-15): leds gpio0:15 function leds group led-rgb-b
pin 16 (gpio0-16): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 17 (gpio0-17): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 18 (gpio0-18): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 19 (gpio0-19): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 20 (gpio0-20): sdio-pwrseq gpio0:20 function sdio-pwrseq group wifi-enable-h
pin 21 (gpio0-21): (MUX UNCLAIMED) gpio0:21
...

我们以pin 13 (gpio0-13): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer作为解析:

gpio0-13对应的节点名是 fiq-debugger,此节点使用pinctrl配置复用为debug串口功能,pinctrl的值是uart2m0-xfer。

5. GPIO控制​

这里介绍一下在用户空间基于sysfs控制gpio的方式: sysfs控制gpio的方式主要是基于内核提供的gpio控制接口文件。也就是通过读写/sys/class/gpio目录下的文件来控制对应的gpio接口。

echo 109 > /sys/class/gpio/export                  # 申请导出相应的gpio
echo out > /sys/class/gpio/gpio109/direction       # 设置相应gpio为输出方向
echo 1 > /sys/class/gpio/gpio109/value             # 设置输出高电平
cat /sys/class/gpio/gpio109/value                  # 获取gpio当前状态值,是高电平还是低电平
echo 109 > /sys/class/gpio/unexport                # 释放申请的gpio

注意:只有当GPIO3_B5脚没有被其它外设复用时, 我们才可以通过export导出该引脚去使用文章来源地址https://www.toymoban.com/news/detail-860571.html

到了这里,关于ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 玩转 PI 系列-如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?

    618 买了几个便宜的 Purple PI OH 开发板 (500 块多一点买了 3 个🤑), 这个开发板类似树莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片。如下: 买来是用作家庭服务器或家庭实验室的。主要考虑就是: 便宜 可玩性高 功耗低 散热小,运行安静 Arm64 现在生态还凑活 其配置如下

    2024年02月17日
    浏览(115)
  • ROCKCHIP ~ Camera 闪光灯

    Camera flash led分flash和torch两种模式。 flash: 拍照时上光灯瞬间亮一下,电流比较大,目前是1000mA,最大电流不能超过led最大承受能力 torch: 只用于录video或者拿led当手电筒的情况,电流不能太大, flash开启需要先从torch过渡,这样电流可以慢慢增大,减少冲击。 sgm3141总体来说

    2024年02月07日
    浏览(38)
  • Rockchip linux USB 驱动开发

    Linux USB 协议栈是一个分层的架构,如下图 5-1 所示,左边是 USB Device 驱动,右边是 USB Host 驱动,最底层是 Rockchip 系列芯片不同 USB 控制器和 PHY 的驱动。                                               Linux USB 驱动架构 Rockchip 系列芯片,主要使用两种 USB 2.0 PHY IP:Innosi

    2024年01月25日
    浏览(46)
  • Rockchip | FIQ-Debugger调试工具

    fiq debugger是集成到内核中的一种系统调试手段。 FIQ在arm架构中相当于nmi中断,fiq debugger把串口注册成fiq中断,在串口fiq中断服务程序中集成了一些系统调试命令。 一般情况下串口是普通的console模式,在串口工具下键盘输入 fiq,串口会切换到fiq debugger模式。 因为FIQ是不可屏

    2024年01月21日
    浏览(33)
  • Rockchip Android13 GKI开发指南

    1.1 什么是GKI GKI:Generic Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像,是google为了解决内核碎片化的问题,而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加载模块中。核心内核为驱动模块提供了稳

    2024年02月02日
    浏览(75)
  • Rockchip RK3399 - 移植uboot 2023.04

    ---------------------------------------------------------------------------------------------------------------------------- 开发板   :NanoPC-T4开发板 eMMC   :16GB LPDDR3:4GB 显示屏   :15.6 HDMI接口显示屏 u-boot    :2023.04 linux      :6.3 -----------------------------------------------------------------------------------

    2024年02月06日
    浏览(47)
  • Android相机-HAL-Rockchip-hal3

    对于Android相机的 HAL层而言 对上实现一套Framework的API接口,对下通过V4L2框架实现与kernel的交互。 不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的? hardware/rockchip/camera/ hardware/rockchip/camera_engine_rkisp/   3A控制则是通过control loop接

    2024年02月11日
    浏览(31)
  • rockchip linux Vendor storage 及SN添加

    在产品开发过程中,最后都会为产品编辑一个产品编号方便于管理和维护,而 SN (Series Number)就是用于产品的生产编号。但是在linux中,并没有专门管理串码的驱动。 是rockchip 被设计用来存储 SN,MAC,LAN,BT 等 vendor data。特征如下: 他的数据结构如下: 在如图中可知晓,在

    2024年02月16日
    浏览(37)
  • Rockchip官方开发板的Android固件下载地址汇总

    这里汇总Rockchip官方开发板的Android固件地址 注:开发板丝印一般在板子的正面或者背面有印硬件版本号和板型 Android版本开发板丝印 RK_EVB1_RK3588_LP4XD200P232SD10H1_V11_20211215YWQ_final Android12 链接:https://pan.baidu.com/s/1LXwnlsRjrioUo1YERyiF3g 提取码:mn2v Android版本开发板丝印 RK_EVB1_RK3588

    2024年02月04日
    浏览(44)
  • Rockchip平台rk3588源码下载编译(基于Android13)

    下载地址 服务器镜像下载 需要向RK申请SDK使用权限。 由于AOSP使用的repo管理源码仓库,所以为了方便开发者获取repo工具,RK也提供了repo工具的下载 本文介绍了如何使用Markdown撰写一篇关于搭建自己的repo代码服务器的文章。以下是详细的步骤和指导。 环境准备 在开始之前,

    2024年02月03日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包