4.3.6. IO-Domain 调试指南
4.3.6.1. IO-Domain 概述
在
注意:
电压
域 配置:如果 硬件 设计 外接 电压 域 为 3.3V, IO-Domain 需要 配置 为 3.3V;如果 外接 电压 域 为 1.8V, IO-Domain 需要 配置 为 1.8V。 电压
不 匹配 问题:外接 电压 域 为 3.3V,而 IO-Domain 配置 为 1.8V,可能 会 对 芯片 造成 损伤;如果 外接 电压 域 为 1.8V,而 IO-Domain 配置 为 3.3V,相关 模块 可能 无法 正常 工作。
4.3.6.2. IO-Domain 特点
在
AON (Always On) Power Domain:该
电源 域 负责 总是 处于 活动状态 的 电源 管理,保证 即使 在 设备 休眠 时 也 能 保持 某些 基本功能(例如,唤醒 和 时间 跟踪)正常 工作。 DSP (DSP Subsystem) Power Domain:负责
数字 信号处理器( DSP)子系统 的 电源 管理。 DSP 是 处理 数字信号(如 音频、视频、语音 识别 等)的 专用 硬件 模块,通常 在 特定 的 多媒体 应用 中 使用。 SOC (System on Chip) Power Domain:包括
整个 芯片 的 管理,负责 与 芯片 的 主要 控制器、总线 以及 其他 基本 功能模块 相关 的 电源 供应。 CPU (CPU Subsystem) Power Domain:该
电源 域 管理 CPU 子系统 的 电源, CPU 是 执行 大部分 计算 任务 的 核心 单元。 BPU (BPU Subsystem) Power Domain: BPU(即
神经网络 处理单元 或 智能 处理单元)负责 处理 与 人工智能( AI)、机器 学习( ML)等 相关 的 任务。 DDR (DDR Subsystem) Power Domain:负责
动态随机 访问 内存( DDR)的 电源 管理。 DDR 存储器 用于 系统 数据 存取,在 大部分 应用 中 占用 较大 功耗。 VIDEO (Video Subsystem) Power Domain:该
电源 域 负责 视频 处理 模块 的 电源 供应,包括 视频 解码、编码、显示 等 功能。 GPU (GPU Subsystem) Power Domain:负责
图形 处理单元( GPU)的 电源 管理。 GPU 主要 用于 图形 渲染、图像处理、计算 加速 等 任务,在 图形 密集型 应用 中 发挥 重要 作用。 ISP (ISP Subsystem) Power Domain:该
电源 域 管理 图像 信号处理器( ISP)的 电源 供应。 ISP 通常 用于 处理 从 相机 传感器 获取 的 原始 图像 数据,执行 图像 的 滤波、降噪、白平衡 等 处理。
4.3.6.3. 功能描述
IO-Domain 典型应用
在

设备树
/* AON_GPIO 0-7 */
aon_gpio_0: aon_gpio_0 {
horizon,pins = <
AON_GPIO0_PIN0 INVALID_PINMUX BIT_OFFSET0 MUX_ALT0 &pconf_input_en_1v8
>;
};
aon_gpio_1: aon_gpio_1 {
horizon,pins = <
AON_GPIO0_PIN1 INVALID_PINMUX BIT_OFFSET0 MUX_ALT0 &pconf_input_en_1v8
>;
};
pconf_input_en_1v8: pconf-input-en-1v8 {
input-enable;
power-source = <HORIZON_IO_PAD_VOLTAGE_1V8>;
drive-strength = <3>;
};
这
aon_gpio_0和aon_gpio_1是为 两个 GPIO 引脚 设置 的 别名。它们 分别 描述 了 两个 物理 GPIO 引脚, aon_gpio_0 和 aon_gpio_1 ,对应 的 是 AON_GPIO0_PIN0 和 AON_GPIO0_PIN1 。 `horizon,pins 是
一个 属性,定义 了 每个 引脚 的 配置 信息。 AON_GPIO0_PIN0和AON_GPIO0_PIN1:这些是 设备树 中 定义 的 物理 GPIO 引脚 标识符。 INVALID_PINMUX:表示该 引脚 的 默认 引脚 复用( Pin Muxing)配置 无效 或 没有 被 设置。通常, Pin Muxing 用于 设置 一个 引脚 的 功能,例如 作为 输入、输出、或者 特定 功能(如 UART、 SPI 等)的 引脚。 BIT_OFFSET0:这个字 段 可能 是 指定 该 引脚 的 位 偏移量。位 偏移 用于 指示 该 引脚 在 寄存器 或 内存 中 的 位置,通常 用于 位 掩码 操作。 MUX_ALT0:表示引脚 复用 的 选择。 MUX_ALT0 指该 引脚 被 配置 为 某个 特定 的 备用 功能。 &pconf_input_en_1v8:这个是 一个 引用,指向 在 设备树 中 定义 的 另 一个 节点 pconf-input-en-1v8 ,它 表示 此 引脚 的 电源 配置 1.8V 输入 启用。
其中 pinmux-func 中 pconf_input_en_1v8 节点
input-enable:这个属性 表示 启用 了 输入 功能,即该 引脚 将 作为 输入 引脚 工作 power-source= <HORIZON_IO_PAD_VOLTAGE_1V8>:指定该 引脚 的 电源 电压 为 1.8V,表明 该 引脚 需要 一个 1.8V 的 电源 电压 来 正常 工作。 drive-strength= <3>:表示驱动 强度 的 设置。驱动 强度 指 的 是 引脚 在 驱动 信号 时 能够 提供 的 电流,其中 高 低电平 输出 电流 对应 驱动 级 如下 表:
IOL Low Level Output Current @VOL (max) = 0.125*VDDIO
| DS (Drive Strength) | Typical Current | Unit |
|---|---|---|
| 0b0000 | 3.8 | mA |
| 0b0001 | 5.7 | mA |
| 0b0010 | 7.5 | mA |
| 0b0011 | 9.4 | mA |
| 0b0100 | 11.3 | mA |
| 0b0101 | 13.2 | mA |
| 0b0110 | 15.0 | mA |
| 0b0111 | 16.9 | mA |
| 0b1000 | 18.8 | mA |
| 0b1001 | 20.7 | mA |
| 0b1010 | 22.6 | mA |
| 0b1011 | 24.4 | mA |
| 0b1100 | 26.3 | mA |
| 0b1101 | 28.2 | mA |
| 0b1110 | 30.0 | mA |
| 0b1111 | 31.9 | mA |
IOH High Level Output Current @VOH (min) = 0.75*VDDIO
| DS (Drive Strength) | Typical Current | Unit |
|---|---|---|
| 0b0000 | 5.3 | mA |
| 0b0001 | 7.9 | mA |
| 0b0010 | 10.6 | mA |
| 0b0011 | 13.2 | mA |
| 0b0100 | 15.8 | mA |
| 0b0101 | 18.5 | mA |
| 0b0110 | 21.1 | mA |
| 0b0111 | 23.7 | mA |
| 0b1000 | 26.3 | mA |
| 0b1001 | 29.0 | mA |
| 0b1010 | 31.6 | mA |
| 0b1011 | 34.2 | mA |
| 0b1100 | 36.9 | mA |
| 0b1101 | 39.5 | mA |
| 0b1110 | 42.1 | mA |
| 0b1111 | 44.7 | mA |
IO-Domain 功能原理
设备树Pinctrl_select_state 中 使用 pinconf_apply_setting 来

IO-Domain 工作方式
在
1. 引脚
通过
硬件 原理图 编写 设备树,驱动程序 能够 读取 引脚 配置。每个 引脚 都 有 一组 与 之 相关 的 配置 参数,包括 复用 功能(如 GPIO、 UART、 SPI 等)、电压 配置(如 1.8V、 3.3V)以及 其他 电气 特性。
horizon,pins = < AON_GPIO0_PIN0 INVALID_PINMUX BIT_OFFSET0 MUX_ALT0 &pconf_input_en_1v8 >;
上述
2. IO Domain 的
在
驱动 中, horizon_pinctrl_probe 函数 会 读取 设备树 的 配置,并 将 相关 的 引脚 和 硬件资源 进行 初始化。此时,驱动 会为 每个 引脚 分配资源、配置 寄存器 以及 设置 相应 的 电气 参数。
ret = horizon_pinctrl_parse_gpio_bank(pdev, ipctl);
3. 电源
驱动程序
通过 对 IO Domain 控制 寄存器 的 操作,管理 引脚 的 电气 特性(例如 电压 和 电流)。 horizon_pin_power_source 函数 会 根据 传入 的 标志 位 设置 相应 的 电压 源:
if (flags == HORIZON_IO_PAD_VOLTAGE_IP_CTRL) {
val |= MS_BIT_CTRL;
}
4. 引脚
在
配置 完 引脚 的 电气 特性 后,驱动程序 还会 根据 需要 设置 引脚 的 输入 或 输出 方向。 horizon_gpio_set_direction 用于 控制 引脚 的 工作 模式:
ret = horizon_gpio_set_direction(pctldev, pin, true, arg);
5. 引脚
通过
设备树 和 驱动 的 配置,系统 能够 将 一个 引脚 分配 给 不同 的 外设 功能。多路复用 配置 会 根据 需求 切换 引脚 的 功能。例如,某个 引脚 可能 同时 支持 GPIO 和 UART 功能,通过 设置 MUX_ALT 复用 寄存器 来 进行 切换。
pinmux_enable_setting(const struct pinctrl_setting *setting)
4.3.6.4. 驱动代码
Kernel Space
代码位置
drivers/pinctrl/hobot/ # pinctrl 驱动代码源文件所在文件夹
include/linux/platform_data/pinctrl-single.h # pinctrl 驱动代码头文件
IO-Domain 的 DTS
Pinctrl 功能arch/arm64/boot/dts/hobot/pinmux-func.dtsi 文件
由于 IO-Domain 在 pinctrl-single 的
pconf_bias_disabled_ds2_1v8: pconf-bias-disabled-ds2-1v8 {
bias-disable;
power-source = <HORIZON_IO_PAD_VOLTAGE_1V8>;
drive-strength = <2>;
};
pinctrl_enet: enetgrp {
horizon,pins = <
HSIO_ENET_MDC HSIO_PINMUX_1 BIT_OFFSET30 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_MDIO HSIO_PINMUX_1 BIT_OFFSET28 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TXD_0 HSIO_PINMUX_1 BIT_OFFSET26 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TXD_1 HSIO_PINMUX_1 BIT_OFFSET24 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TXD_2 HSIO_PINMUX_1 BIT_OFFSET22 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TXD_3 HSIO_PINMUX_1 BIT_OFFSET20 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TXEN HSIO_PINMUX_1 BIT_OFFSET18 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_TX_CLK HSIO_PINMUX_1 BIT_OFFSET16 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RX_CLK HSIO_PINMUX_1 BIT_OFFSET14 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RXD_0 HSIO_PINMUX_1 BIT_OFFSET12 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RXD_1 HSIO_PINMUX_1 BIT_OFFSET10 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RXD_2 HSIO_PINMUX_1 BIT_OFFSET8 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RXD_3 HSIO_PINMUX_1 BIT_OFFSET6 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_RXDV HSIO_PINMUX_1 BIT_OFFSET4 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
HSIO_ENET_PHY_CLK HSIO_PINMUX_1 BIT_OFFSET2 MUX_ALT0 &pconf_bias_disabled_ds2_1v8
>;
};
pinctrl_enet: enetgrp
pinctrl_enet 是
一个 引脚 控制 配置 组, enetgrp 是 该 配置 组 的 名称。这个 组 主要 用于 定义 与 以太网( Ethernet)相关 的 引脚 设置。 horizon,pins = < … >:
引脚
名称 :(例如 HSIO_ENET_MDC、 HSIO_ENET_MDIO、 HSIO_ENET_TXD_0 等)。复用
组 :(例如 HSIO_PINMUX_1 )表示引脚 复用 的 硬件资源 组,决定 该 引脚 的 具体 用途。 位
偏移 :(例如 BIT_OFFSET30 )引脚控制 寄存器 的 偏移 值,指定 引脚 在 寄存器 中 的 位置。 复用
模式 :(如 MUX_ALT0 )指引脚 的 复用 模式,例如 使用 MUX_ALT0 来 表示 该 引脚 的 特定 功能。 配置
参数 :(例如 &pconf_bias_disabled_ds2_1v8 ) 引脚引用 的 电气 特性 配置,通过 引用 其他 的 配置 结构 来 设置,比如 禁用 偏置 电流、设定 驱动 能力 等。
这里pconf_bias_disabled_ds2_1v8) 详细信息
pconf_bias_disabled_ds2_1v8: pconf-bias-disabled-ds2-1v8 {
bias-disable;
power-source = <HORIZON_IO_PAD_VOLTAGE_1V8>;
drive-strength = <2>;
};
pconf_bias_disabled_ds2_1v8:这是
设备树 中 的 一个 节点 名称,用于 定义 与 某些 硬件 引脚 相关 的 电源 配置 和 驱动 特性。这个 名称 可能 是 一个 通用 配置,用于 多个 引脚 或 设备 模块 的 电气 特性 设置。 bias-disable:此
属性 表示 禁用 该 引脚 的 电气 偏置( bias)。在 许多 硬件 设计 中,某些 引脚 可能 需要 使用 偏置(例如 上拉 电阻 或 下 拉 电阻),用于 确保 引脚 处于 稳定 状态。禁用 偏置 意味着 该 引脚 不会 使用 上 拉 或 下 拉 电阻,而是 保持 无 偏置 的 状态,通常 用于 需要 高 阻抗 或 浮空 状态 的 情况。 power-source:此
属性 指定 了 该 引脚 的 电源 电压。 HORIZON_IO_PAD_VOLTAGE_1V8 表示 该 引脚 的 电源 电压 为 1.8V, drive-strength:此
属性 定义 了 引脚 的 驱动 强度,表示 引脚 能够 提供 的 电流 大小 或 驱动 能力。
备注:
电气
| RW | [30] | hsio_enet_rxd_3_pu | 0x0 | hsio_enet_rxd_3 pull up enable: 1: pull up enable; 0: pull up disable; |
|---|---|---|---|---|
| RW | [29] | hsio_enet_rxd_3_pd | 0x0 | hsio_enet_rxd_3 pull down enable: 1: pull down enable; 0: pull down disable; |
| RW | [28:25] | hsio_enet_rxd_3_ds | 0x8 | hsio_enet_rxd_3 driving selector; |
| RW | [24] | hsio_enet_rxd_3_st | 0x0 | hsio_enet_rxd_3; Schmitt trigger enable. 1: enables Schmitt trigger input function; 0: no Schmitt trigger input function; |
该
访问
类型 (RW/RSV):表示 该 位 是 可 读写 的( Read/Write)。 位
宽 或位 范围 [ 起始 : 结束 ]: 指明 了 该 配置 项 在 寄存器 中 的 具体位置。例如,[6] 表示 第 6 位,[4:1] 表示 从 第 4 位到 第 1 位 的 一组 位。 配置
项 名称 : 描述 了 该 位 或 位组 的 功能,如 hsio_enet_rx_clk_pu 表示 以太网 接收 时钟 线上 拉 使 能。 默认值 (Default Value): 显示
了 在 寄存器 复位 或 初始化 时该 位 或 位组 的 值 提供
了 关于 该 位 或 位组 功能 的 详细描述,包括 它们 如何 影响 硬件 的 行为,例如,上 拉 或 下拉使 能,施密特 触发,电流 驱动 能力 等。
驱动调用示例代码
和 pinctrl 调用
static int hobot_pinctrl_probe(struct platform_device *pdev)
{
...
g_xxx_dev->pinctrl = devm_pinctrl_get(&pdev->dev);
if (IS_ERR(g_xxx_dev->pinctrl)) {
dev_warn(&pdev->dev, "pinctrl get none\n");
g_xxx_dev->pins_voltage = NULL;
}
...
/* 按照 pinctrl-names lookup state */
g_xxx_dev->pins_voltage = pinctrl_lookup_state(g_xxx_dev->pinctrl,
"xxx_voltage_func");
if (IS_ERR(g_xxx_dev->pins_voltage)) {
dev_info(&pdev->dev, "xxx_voltage_func get error %ld\n",
PTR_ERR(g_xxx_dev->pins_voltage));
g_xxx_dev->pins_voltage = NULL;
}
...
/* select state */
if (g_xxx_dev->pins_voltage) {
ret = pinctrl_select_state(g_xxx_dev->pinctrl, g_xxx_dev->pins_voltage);
if (ret) {
dev_info(&pdev->dev, "xxx_voltage_func set error %d\n", ret);
}
}
...
}
4.3.6.5. 功能使用
User Space
根据 《X5 PIN SW Reg.xlsx》 文档,举例
1. 设置 HSIO_GPIO0_PIN08 为
读取
寄存器 GPIO_SWPORTA_DDR(地址 0x35060004 )的 值 将
寄存器 GPIO_SWPORTA_DDR 的 bit8 设置 为 1 ,以 将 引脚 配置 为 输出 模式。
devmem 0x35060004 # 读取寄存器 0x35060004
devmem 0x35060004 32 0xxxxxxxxx # 写寄存器 0x35060004 ,将 bit8 设置为 0x1
2. 设置 HSIO_ENET_RX_CLK 输出
读取
寄存器 GPIO_SWPORTA_DR(地址 0x35060000 )的 值。 将
寄存器 GPIO_SWPORTA_DR 的 bit8 设置 为 1 ,将 输出 电平 设置 为 1 ;或者 将 其 设置 为 0 ,将 输出 电平 设置 为 0 。
devmem 0x35060000 # 读取寄存器 0x35060000
devmem 0x35060000 32 0xxxxxxxxx # 写寄存器 0x35060000 ,将 bit8 设置为所需电平( 0 或 1 )
3. 设置 HSIO_ENET_RX_CLK 输出
读取
寄存器 hsio_pin_ctrl_1 (地址 0x35050018 )的 值。 将
寄存器 hsio_pin_ctrl_1 的 bit[4:1] 设置 为 0x2 ,以 设置 驱动 强度 为 7.5mA/10.6mA(具体 驱动 强度 与 硬件 文档 中 的 映射 有关)。
devmem 0x35050018 # 读取寄存器 0x35050018
devmem 0x35050018 32 0xxxxxxxxx # 写寄存器 0x35050018 ,将 bit[4:1] 设置为 0x2
4. 设置
读取
寄存器 hsio_pinmux_ctl_1 (地址 0x3505005c)的 值。 将
寄存器 hsio_pinmux_ctl_1 的 bit[15:14] 设置 为 0x2 ,以 将 引脚 设置 为 GPIO 功能 模式。
devmem 0x3505005c # 读取寄存器 0x3505005c
devmem 0x3505005c 32 0xxxxxxxxx # 写寄存器 0x3505005c,将 bit[15:14] 设置为 0x2
Uboot Space
Uboot 内
代码位置
/uboot/arch/arm/dts/pinmux-func.dtsi # uboot 设备树 pinctrl 复用关系位置
/uboot/arch/arm/dts/x5.dtsi # uboot 设备树引用节点位置
IO-Domain 的 DTS
配置
...
pconf_drv_pu_3v3_max: pconf-dev-pu-max-high {
bias-pull-up;
power-source = <HORIZON_IO_PAD_VOLTAGE_3V3>;
drive-strength = <15>;
};
pconf_drv_pu_1v8_max: pconf-dev-pu-max-low {
bias-pull-up;
power-source = <HORIZON_IO_PAD_VOLTAGE_1V8>;
drive-strength = <15>;
};
...
pinctrl_uart7: uart7grp {
horizon,pins = <
LSIO_UART7_RX LSIO_PINMUX_3 BIT_OFFSET4 MUX_ALT0 &pconf_drv_pu_1v8_max
LSIO_UART7_TX LSIO_PINMUX_3 BIT_OFFSET6 MUX_ALT0 &pconf_drv_pu_1v8_max
LSIO_UART7_CTS LSIO_PINMUX_3 BIT_OFFSET8 MUX_ALT0 &pconf_drv_pu_1v8_max
LSIO_UART7_RTS LSIO_PINMUX_3 BIT_OFFSET10 MUX_ALT0 &pconf_drv_pu_1v8_max
>;
};
...
驱动调用时 DTS 配置
首先,在 DTS 内
pinctrl_i2c1: i2c1grp {
horizon,pins = <
LSIO_I2C1_SCL LSIO_PINMUX_2 BIT_OFFSET20 MUX_ALT0 &pconf_drv_pu_1v8_max
LSIO_I2C1_SDA LSIO_PINMUX_2 BIT_OFFSET22 MUX_ALT0 &pconf_drv_pu_1v8_max
>;
};
UBOOT 中
horizon,pins:这个
属性 定义 了 与 I2C1 相关 的 引脚 配置。这里 的 每个 项 都 是 一个 特定 引脚 的 设置。 LSIO_I2C1_SCL:代表 I2C1 的
时钟 引脚( SCL)。 LSIO_I2C1_SDA:代表 I2C1 的
数据 引脚( SDA)。 LSIO_PINMUX_2:指定
了 一个 特定 的 引脚 复用 组,用来 配置 这些 引脚 的 功能。 BIT_OFFSET20 和 BIT_OFFSET22:这些
指定 了 具体 引脚 在 寄存器 中 的 位置 偏移。 MUX_ALT0:设置
引脚 的 复用 功能 为 I2C,即将 引脚 配置 为 I2C 通信。 &pconf_drv_pu_1v8_max:引用
外部 的 配置 节点,通常 定义 了 与 引脚 相关 的 电气 特性,比如 上拉 电阻 和 驱动 电压。
和 pinctrl 的
i2c1: i2c@340c0000 {
compatible = "snps,designware-i2c";
status = "okay";
reg = <0x340c0000 0x10000>;
#address-cells = <1>;
#size-cells = <0>;
#clock-names = "i2c-clk";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1>;
};
这个
i2c@340c0000:节点
的 名称,标识 了 I2C1 外 设在 系统 中 的 位置。地址 0x340c0000 是 该 外 设在 内存 中 的 起始 地址。 compatible = “snps,designware-i2c”:这个
属性 指定 了 与 该 外设 兼容 的 驱动程序。 snps,designware-i2c 是 一个 常见 的 I2C 控制器 IP 核 的 兼容 标识,表示 这个 I2C 外设 使用 Synopsys 的 设计。 status = “okay”:启用
该 外设 的 状态。”okay” 表示 启用 该 I2C 外设, U-Boot 会为 此外 设 加载 相应 的 驱动程序。 reg = <0x340c0000 0x10000>:指定
该 外设 的 物理地址 范围。 0x340c0000 是 外设 的 起始 地址, 0x10000 是 外设 的 地址 范围( 16KB)。 #address-cells = <1> 和 #size-cells = <0>:这
两个 属性 定义 了 地址 和 大小 单元 的 数量。#address-cells = <1> 表示 外设 的 地址 由 一个 单元( 32 位)表示,#size-cells = <0> 表示 没有 额外 的 大小 信息。 #clock-names = “i2c-clk”:指定
与 该 外设 相关 的 时钟 名称,通常 用来 引用 系统 时钟。 pinctrl-names = “default”:指定
使用 默认 的 引脚 控制 配置。 pinctrl-0 = <&pinctrl_i2c1>:将
前面 定义 的 pinctrl_i2c1 引脚 配置 应用 于 此 I2C 外设,确保 该 外设 的 引脚 配置 为 I2C1 引脚。
命令查询与使用方式
进入 UBOOT 时I2C BUS 命令
Hobot>i2c bus
Bus 0: i2c@340d0000
Bus 1: i2c@340c0000
可以0X340C 0000 ,说明 Uboot 中MD 命令
Hobot>md 0x34180080 1
34180080: 50555555
通过MD 输出
| PinName | Default IO Domain | IO Domain Reg | Reg Offset | Reg Value |
|---|---|---|---|---|
| LSIO_I2C1_SCL | 3.3v | 0x34180080 | 21:20 | 1: 1.8V |
| LSIO_I2C1_SDA | 3.3v | 0x34180080 | 23:22 | 0: 3.3V |
注意:
以上 I2C 电源
域 修改 仅为 示例,实际 电压 域 修改 需要 和 实际 硬件 需求 来 修改 对应 的 dts 配置
4.3.6.6. FAQ
1、为什么 pinmux-func.dtsi 中 pinctrl_sd 和 pinctrl_sdio 中pconf_sd_sdio_pu_ds3_ipctrl , 没有
pconf_sd_sdio_pu_ds3_ipctrl: pconf-sd-sdio-pu-ds3-ipctrl {
bias-pull-up;
drive-strength = <3>;
power-source = <HORIZON_IO_PAD_VOLTAGE_IP_CTRL>;
};
答:在 pinmux-func.dtsi 中,只有 pinctrl_sd 和 pinctrl_sdio 节点HORIZON_IO_PAD_VOLTAGE_IP_CTRL 代表
2、SDIO 设备
&sdio_0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sd &hsio_gpio0_26 &hsio_gpio1_1>;
power-gpios = <&hs_gpio0_porta 26 GPIO_ACTIVE_HIGH>;
/* Drive voltage gpio to 0 to switch to 1.8V */
voltage-gpios = <&hs_gpio1_porta 1 GPIO_ACTIVE_LOW>;
};

答:在 硬件power-gpios 和 voltage-gpios ,其hsio_gpio0_26 用来hsio_gpio1_1 默认
| 引脚 |
电压 |
偏移 |
|---|---|---|
| HSIO_SD_SDCLK | 3.3V | 1 |
| HSIO_SD_CMD | 3.3V | 1 |
| HSIO_SD_CDN | 3.3V | 1 |
| HSIO_SD_DATA_0 | 3.3V | 1 |
| HSIO_SD_DATA_1 | 3.3V | 1 |
| HSIO_SD_DATA_2 | 3.3V | 1 |
| HSIO_SD_DATA_3 | 3.3V | 1 |
| HSIO_SDIO_WP | 3.3V | 1 |
| HSIO_SDIO_SDCLK | 3.3V | 1 |
| HSIO_SDIO_CMD | 3.3V | 1 |
| HSIO_SDIO_CDN | 3.3V | 1 |
| HSIO_SDIO_DATA_0 | 3.3V | 1 |
| HSIO_SDIO_DATA_1 | 3.3V | 1 |
| HSIO_SDIO_DATA_2 | 3.3V | 1 |
| HSIO_SDIO_DATA_3 | 3.3V | 1 |
在horizon_pin_power_source 添加
[ 2.236243] horizon-hsio-pinctrl 35050000.hsio_iomuxc: Read value from register: 0xd
[ 2.248841] horizon-hsio-pinctrl 35050000.hsio_iomuxc: ms_bits_offset: 0x2
[ 2.261723] horizon-hsio-pinctrl 35050000.hsio_iomuxc: flags: 0x2
[ 2.277303] horizon-hsio-pinctrl 35050000.hsio_iomuxc: Read value from register: 0xf
[ 3.915439] horizon-hsio-pinctrl 35050000.hsio_iomuxc: Modified value for register: 0xf
[ 3.930253] horizon-hsio-pinctrl 35050000.hsio_iomuxc: ms_bits_offset: 0x2
[ 3.930258] horizon-hsio-pinctrl 35050000.hsio_iomuxc: flags: 0x2
[ 3.930262] horizon-hsio-pinctrl 35050000.hsio_iomuxc: Read value from register: 0xf
Read value from register: 代表
读 当前 电压 域 地址 的 值。 ms_bits_offset:代表
电压 域 地址 的 偏移。 flags:代表
设备树 中 电压 域 使用 的 是 power-source = <HORIZON_IO_PAD_VOLTAGE_IP_CTRL>。 HORIZON_IO_PAD_VOLTAGE_3V3 : 0
HORIZON_IO_PAD_VOLTAGE_1V8 : 1
HORIZON_IO_PAD_CTRL_VOLTAGE_1V8 : 3
HORIZON_IO_PAD_CTRL_VOLTAGE_3V3 : 4
Modified value for register: 代表
位操作 后 电压 域 地址 的 值。
通过 dmesg 打印信息