Pinctrl 调试指南
Pinctrl 使用
S100芯片中3个 sys 包含可软件控制的 pin 脚,根据用户的需要,可以对 pin 脚进行功能复用,属性设置和电压域设置。
S600芯片中3个 sys 包含可软件控制的 pin 脚,根据用户的需要,可以对 pin 脚进行功能复用,属性设置和电压域设置。
Pinmux 功能
soc 中的 pin 脚可以被设置为不同的功能,通过 pinmux 设置可以根据用户需要配置为相应的功能,每个引脚有四种复用功能可选。
Pinconf 功能
soc 中的 pin 脚可以被设置为不同的状态,共包含以下几种属性:
- 上下拉设置
- 驱动强度设置
- 电压模式设置
- 输入使能设置
- 施密特设置
- 压摆率选择
io-domain 功能
S100中共存在两种电压域,分别为1.8v 和3.3v,不同的 pin 脚需要工作在合适的电压域中。手册中将 pin 脚划分入 power group 中,在手册中可以看到每个 power group 控制着一组 pin 脚。
S600中共存在两种电压域,分别为1.8v 和3.3v,不同的 pin 脚需要工作在合适的电压域中。手册中将 pin 脚划分入 power group 中,在手册中可以看到每个 power group 控制着一组 pin 脚。
源码说明
pinctrl-hobot.c 文件中包含了 S100/S600共用的 pinctrl 主逻辑代码,向 pinctrl 子系统注册设备,并向下提供 SoC 数据的初始化入口。 pinctrl-hobot-s100.c 文件中包含 S100的 pin、pin group、function 定义和设备匹配信息。
/* 路径 */
hobot-drivers/pinctrl/pinctrl-hobot.c # pinctrl 公共主逻辑
hobot-drivers/pinctrl/pinctrl-hobot.h # pinctrl 公共头文件
hobot-drivers/pinctrl/pinctrl-hobot-s100.c # S100 驱动数据代码
hobot-drivers/kernel-dts/drobot-s100-pinctrl.dtsi # S100 pinctrl 设备树
pinctrl-hobot.c 文件中包含 S100/S600共用的 pinctrl 主逻辑代码。
pinctrl-hobot-s600.c 文件中包含 S600的 pin、pin group、function 定义和设备匹配信息(compatible = "drobot,s600-pinctrl")。
/* 路径 */
hobot-drivers/pinctrl/pinctrl-hobot.c # pinctrl 公共主逻辑
hobot-drivers/pinctrl/pinctrl-hobot.h # pinctrl 公共头文件
hobot-drivers/pinctrl/pinctrl-hobot-s600.c # S600 驱动数据代码
hobot-drivers/kernel-dts/drobot-s600-pinctrl.dtsi # S600 pinctrl 设备树
Pinctrl 驱动使用说明
Pinmux 和 pinconf 的设置
pinmux 和 pinconf 一般是在设备 dts 里配置,具体如下:
&pinctrl_peri {
pinctrl_test_default: pinctrl_test_default {
/* pinmux 的设置, 将peri_i2c5_scl和peri_i2c5_sda两个引脚复用为peri_i2c5的功能*/
pinmux {
function = "peri_i2c5";
pins = "peri_i2c5_scl", "peri_i2c5_sda";
};
/* pinconf 的设置, 为peri_i2c5_scl和peri_i2c5_sda两个引脚配置驱动电流,上下拉,输入使能,电压模式,压摆率,输入施密特等电器属性配置*/
pinconf {
/* 两个引脚 */
pins = "peri_i2c5_scl", "peri_i2c5_sda";
/* 驱动电流配置 */
drive-strength = <7>;
/* 配置为下拉 */
bias-pull-down;
/* 禁用输入 */
input-disable;
/* 禁用低电压模式 */
low-power-disable;
/* 压摆率设置为1 */
slew-rate = <1>;
/* 禁用输入施密特 */
input-schmitt-disable;
};
};
pinctrl_test_sleep: pinctrl_test_sleep {
pinmux {
function = "peri_i2c5";
pins = "peri_i2c5_scl", "peri_i2c5_sda";
};
pinconf {
pins = "peri_i2c5_scl", "peri_i2c5_sda";
drive-strength = <1>;
bias-pull-up;
input-enable;
low-power-enable;
slew-rate = <0>;
input-schmitt-enable;
};
};
};
Pinconf 支持设置的属性与设置树中对应关键字
| 关键字 | 属性 |
|---|---|
| bias-pull-up | 上拉设置 |
| bias-pull-down | 下拉设置 |
| bias-disable | 悬空设置 |
| drive-strength | 驱动强度 |
| low-power-disable | 高电压模式(3.3v) |
| low-power-enable | 低电压模式(1.8v) |
| input-disable | 输入不使能 |
| input-enable | 输入使能 |
| input-schmitt-enable | 施密特触发使能 |
| input-schmitt-disable | 施密特触发不使能 |