禁用引脚偏置是否不应用内部电阻或完全断开引脚?

Does disabling the pin bias not apply an internal resistor or disconnect the pins altogether?

我正在查看 I2C 线路的设备树配置。以前 bias-disable 用于无法正常工作的 I2C,我的自然倾向是使用 bias-pull-up 进行测试(但有外部 4k 上拉电阻)。我的问题是,bias-disable 到底是什么意思?

禁用引脚偏置是否不应用内部电阻或完全断开引脚?

https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt

TL;DR

正确答案似乎是:

disabling the pin bias not apply an internal resistor

详情如下。

调查

来自 pinctrl 绑定的文档 (Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt):

bias-pull-up, -down and -pin-default take as optional argument on hardware supporting it the pull strength in Ohm. bias-disable will disable the pull.

如果文档还不够,是时候查看代码了。

drivers/pinctrl/pinconf-generic.c中:

static const struct pinconf_generic_params dt_params[] = {
    { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },

include/linux/pinctrl/pinconf-generic.h中:

/**
 * enum pin_config_param - possible pin configuration parameters
 * @PIN_CONFIG_BIAS_DISABLE: disable any pin bias on the pin, a
 *  transition from say pull-up to pull-down implies that you disable
 *  pull-up in the process, this setting disables all biasing.

接下来你可以做的是查看这个 PIN_CONFIG_BIAS_DISABLE 在你的特定硬件的驱动程序中是如何处理的。在你的情况下,我相信驱动程序位于 drivers/pinctrl/bcm/pinctrl-bcm281xx.c.

herebcm281xx_i2c_pin_update()函数):

    case PIN_CONFIG_BIAS_DISABLE:
        bcm281xx_pin_update(val, mask, 0,
            BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR),
            BCM281XX_PIN_MASK(I2C, PULL_UP_STR));
        break;

如您所见,bcm281xx_pin_update()(即value)的第三个参数为0。因此接下来的值将用于设置相应的寄存器:

#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK   0x0070
#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT  4

现在,有了 BCM281XX 的数据表或 TRM,您应该能够找出设置为 0 的确切寄存器,并且从该数据表中您可以找出将其设置为 0 时到底发生了什么. 不幸的是,我在互联网上找不到这个数据表,所以我只能假设这个 "bias-disable" 只是断开你 SoC 中的上拉和下拉内部电阻。不过还是要用SoC的文档来肯定的说。

此外,也许它会有用:这是添加此驱动程序的第一个提交:54b1aa5a5b16