rockchip_pin_group 概述

rockchip_pin_group 是 Rockchip SoC 引脚控制(pinctrl)子系统中用于描述一组引脚配置的核心数据结构,用于管理芯片引脚的功能复用、电气特性等参数。以下是其关键概述:


1. 核心作用

  • 引脚分组配置:将一组逻辑相关的引脚(如 I2C 的 SDA/SCL、SPI 的 SCK/MOSI/MISO/CS)封装为一个配置单元,简化外设初始化。
  • 硬件抽象:通过统一的接口描述引脚功能(如复用模式、驱动强度、上下拉电阻),隐藏底层寄存器细节。
  • 设备树集成:与设备树(Device Tree)配合,定义外设所需的引脚配置,实现硬件描述与驱动解耦。

2. 结构体定义(简化版)

在 Linux 内核的 Rockchip pinctrl 驱动中,rockchip_pin_group 通常定义为:

struct rockchip_pin_group {
    const char *name;          // 引脚组名称(如 "i2c0_pins")
    const char **pins;         // 引脚名称数组(如 "gpio0_a0", "gpio0_a1")
    unsigned int num_pins;     // 引脚数量
    const char **functions;    // 功能模式数组(如 "i2c0", "gpio")
    const struct rockchip_pin_conf *configs; // 引脚配置参数
};

3. 关键字段解析

  • name
    引脚组的唯一标识符,在设备树中通过 pinctrl-names 和 pinctrl-0 等属性引用。

  • pins
    字符串数组,列出该组包含的所有引脚名称(格式通常为 "gpioX_Y",如 "gpio0_a0" 对应 GPIO0 组的 A0 引脚)。

  • functions
    功能模式数组,指定每个引脚在此组中的复用功能(如 "i2c0" 表示配置为 I2C0 控制器,"gpio" 表示通用 GPIO 模式)。

  • configs
    引脚级配置参数(如驱动强度、上下拉电阻),通过 rockchip_pin_conf 结构定义:

    struct rockchip_pin_conf {
        u32 type;    // 配置类型(如驱动强度、上下拉)
        u32 conf;    // 配置值(如 0=2mA, 1=4mA)
    };

4. 工作流程

  1. 设备树定义
    在设备树节点中,通过 pinctrl-X 属性引用引脚组:

    i2c0: i2c@ff150000 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c0_pins>;
        // ...
    };
    
    i2c0_pins: i2c0-pins {
        rockchip,pins = <0 1 RK_FUNC_I2C 0>; // 对应 gpio0_a0, gpio0_a1
    };
  2. 驱动解析
    Rockchip pinctrl 驱动解析设备树,将 i2c0-pins 映射到 rockchip_pin_group 结构,配置引脚功能为 I2C0。

  3. 硬件配置
    驱动根据 rockchip_pin_group 中的 pinsfunctions 和 configs,编程 SoC 的引脚控制寄存器(如复用选择寄存器、驱动强度寄存器)。


5. 典型应用场景

  • 外设初始化:配置 SPI、I2C、UART 等外设的引脚复用和电气参数。
  • 动态切换:在运行时切换引脚功能(如从 GPIO 切换为 PWM 输出)。
  • 电源管理:在低功耗模式下关闭未使用的引脚,降低功耗。

6. 示例代码片段

// 定义一个 I2C 引脚组
static const char *i2c0_pins[] = { "gpio0_a0", "gpio0_a1" };
static const char *i2c0_funcs[] = { "i2c0", "gpio" };
static const struct rockchip_pin_conf i2c0_configs[] = {
    { PIN_CONFIG_BIAS_DISABLE, 0 },  // 禁用上下拉
    { PIN_CONFIG_DRIVE_STRENGTH, 3 }, // 驱动强度 4mA
};

struct rockchip_pin_group i2c0_group = {
    .name = "i2c0_pins",
    .pins = i2c0_pins,
    .num_pins = ARRAY_SIZE(i2c0_pins),
    .functions = i2c0_funcs,
    .configs = i2c0_configs,
};

7. 总结

rockchip_pin_group 是 Rockchip SoC 引脚控制的核心抽象,通过定义引脚组、功能模式和配置参数,实现了引脚资源的灵活管理和硬件描述与驱动的解耦。开发者通过设备树配置引脚组,驱动自动完成硬件初始化,简化了外设适配过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值