Pinctrl调试指南
Pinctrl使用
S100芯片中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脚。
源码说明
pinctrl-hobot.c文件中包含了所有S100系列pinctrl的主逻辑代码,向pinctrl注册S100的pinctrl设备,并向下提供S100 pinctrl设备的注册。
/* 路径 */
hobot-drivers/pinctrl/pinctrl-hobot.c #pinctrl 驱动代码源文件
hobot-drivers/pinctrl/pinctrl-hobot.h #pinctrl 驱动代码头文件
pinctrl-hobot-s100.c文件中包含了所有s100的pin,pin group,pin function信息。
/* 路径 */
hobot-drivers/pinctrl/pinctrl-hobot-s100.c # S100 驱动数据代码
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;
};
};
};