找回密码
 立即注册
搜索
热搜: 飞腾 龙芯 固件
查看: 2105|回复: 0

飞腾平台Linux系统下GPIO驱动使用参考

[复制链接]

21

主题

0

回帖

128

积分

超级版主

积分
128
发表于 2024-5-13 17:41:49 | 显示全部楼层 |阅读模式
本帖最后由 alittle 于 2025-3-25 18:06 编辑

1:驱动使用概要

        在大多数 Linux 系统中,GPIO 驱动默认加载,并通过 /sys/class/gpio/ 目录提供用户空间接口。该目录下包含多个以 gpiochip 开头的文件夹,每个文件夹代表一个 GPIO 控制器,例如 gpiochip504、gpiochip496 等。通过查看这些文件夹中的 label 和 ngpio 文件,可以获取以下关键信息:

        -> label:标识该GPIO控制器对应的硬件芯片或模块。
        -> ngpio:表示该控制器支持的GPIO引脚数量。


常见使用流程

       -> 确认硬件 GPIO 管脚对应的节点号:
                -> 查看 /sys/class/gpio/ 下的 gpiochip 文件夹,通过 label 和 ngpio 文件确定硬件 GPIO 组与节点号的对应关系。

        -> 注册 GPIO 节点号:
                -> 使用 echo 命令将节点号写入 /sys/class/gpio/export 文件,使该 GPIO 引脚可供用户空间访问。

        -> 配置 GPIO 输入输出模式:
                -> 通过向 /sys/class/gpio/gpioN/direction 文件写入 in 或 out,将 GPIO 引脚配置为输入或输出模式。

        -> 配置输出或查询输入:
                -> 对于输出模式,向 /sys/class/gpio/gpioN/value 文件写入 0 或 1,控制 GPIO 引脚输出低电平或高电平。
                -> 对于输入模式,读取 /sys/class/gpio/gpioN/value 文件,获取 GPIO 引脚的当前电平状态。


注意事项:

        -> 驱动节点号与 GPIO 硬件管脚的对应关系并非固定:
                -> 这种对应关系取决于 BIOS 中的 ACPI 配置。如果默认的对应关系不正确,需要 BIOS 工程师协助确认正确的对应关系。

        -> 并非所有可供注册的 GPIO 节点都可以使用:
                -> 前提是该 GPIO 引脚已复用为 GPIO 功能,并且未被注册为特殊功能管脚(如电源管理触发管脚)。某些 GPIO 引脚可能被系统或硬件设计保留用于其他功能,因此在使用前需要确认其可用性。

2:驱动节点号与硬件管脚对应关系
        
        以 FT2004 和 D2000 平台为例,GPIO 引脚分为以下四组:


                -> GPIO0_A0~A7
                -> GPIO0_B0~B7
                -> GPIO1_A0~A7
                -> GPIO1_B0~B7


        每组 GPIO 包含 8 个引脚。


        -> 确认 GPIO 组是否启用
                首先,需要确认 BIOS 中是否启用了这些 GPIO 组。假设 BIOS 工程师确认已启用 GPIO0_A0~A7、GPIO1_A0~A7 和 GPIO1_B0~B7 三组。



       -> 确定节点号与 GPIO 组的对应关系
                ->查看最大节点号的芯片组:
               找到 /sys/class/gpio/ 下节点号最大的芯片组,通常是 gpiochip504
               查看该芯片组的 ngpio 文件:
  1. cat /sys/class/gpio/gpiochip504/ngpio
复制代码

               如果 ngpio 的值为 8,则该芯片组对应 GPIO0_A0~A7。
               如果 ngpio 的值为 16,则该芯片组对应 GPIO0_A0~A7 和 GPIO0_A0~A7。
               ->查看次大节点号的芯片组:
               找到节点号次大的芯片组,假设为 gpiochip496
               查看该芯片组的 ngpio 文件:
  1. cat /sys/class/gpio/gpiochip496/ngpio
复制代码

              如果 ngpio 的值为 8,则该芯片组对应 GPIO1_A0~A7。
              如果 ngpio 的值为 16,则该芯片组对应 GPIO1_A0~A7 和 GPIO1_B0~B7。


        总结:
                -> 节点号分配原则
               优先分配节点号最大的芯片组。常见的最大节点号芯片组为 gpiochip504
               硬件 GPIO 组按 GPIO0_A0~A7、GPIO0_B0~B7、GPIO1_A0~A7、GPIO1_B0~B7 的顺序依次分配(BIOS 中未启用的节点不参与分配)。


3:GPIO管脚注册(用root权限操作)
        
        假设通过上述步骤确认 gpiochip504ngpio 值为 8,则节点号 504~511 均可注册。以注册节点号 506(默认对应 GPIO0_A2)为例:
  1. cd /sys/class/gpio
  2. echo "506" > export
复制代码

4:配置GPIO管脚
        
        4.1、配置输出模式输出高电平:
  1. cd /sys/class/gpio/gpio506
  2. echo "out" > direction
  3. echo "1" > value
复制代码
      
        4.2、配置输入模式检测管脚电平:
  1. cd /sys/class/gpio/gpio506
  2. echo "in" > direction
  3. cat value
复制代码








您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|锋微固件

GMT+8, 2025-6-16 23:14 , Processed in 0.057777 second(s), 21 queries .

快速回复 返回顶部 返回列表