IDAC使用参考¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 05/08/2025 | |
| 1.1 | 08/19/2026 |
1. 概述¶
DAC(数模转换器)是把数字信号转变成模拟信号的电子器件。通常我们用DAC指代电压输出型DAC(即输出的模拟信号是电压),用IDAC指代电流输出型DAC(即输出的模拟信号是电流)。
2. 关键字说明¶
-
DAC
(Digital-to-Analog Converter,数模转换器)是一种将数字信号转换为模拟信号的电子器件。
-
IDAC
(Current Digital-to-Analog Converter,电流输出型数模转换器)是一种以电流作为输出模拟信号的数模转换器。
3. 功能描述¶
SGS有两种调压方式:DIV和IDAC。DIV调压是通过控制12根GPIO来调节电压,只有24个电压档位可供调节,不同档位之间的精度在50mV左右。而IDAC调压能更精细地调节电压(调节精度为10mV或20mV),且仅需一根专用的GPIO即可控制最多30个电压档位。
4. 硬件连接介绍¶
IDAC硬件模块集成在SoC内部。需要将开发板上对应的跳帽切换成IDAC mode来开启IDAC调压功能。
5. Uboot用法介绍¶
目前uboot下未实现IDAC驱动。
6. Kernel用法介绍¶
IDAC调压的对象包括Core Power(VDD_CORE),CPU Power(VDD_CPU),IPU Power(VDD_IPU),DSP Power(VDD_DSP)等。不同平台支持的调压对象会有所不同,下面以PCUPID平台用IDAC调节CPU Power为例进行说明。
6.1. Kernel Config配置¶
-
Enable 对应的驱动模块:
在编译kernel时需要选择的配置如下:
Device Drivers ---> [*] Sgs SoC platform drivers ---> [*] SGS Voltage Controller Driver Voltage Regulator Type (IDAC) --->
6.2. Dts配置¶
IDAC控制CPU Power的相关设定在dts里的cpu_power节点中。节点中的参数如下:
1. cpu_power {
2. compatible = "sgs,voltage-idac-ctrl";
3. vid_gpio = <PAD_PM_GPIO5>;
4. base_voltage = <1000>;
5. status = "okay";
6. };
cpu_power节点中的属性含义分别为:
| 属性 | 描述 | 设定值 | 备注 |
|---|---|---|---|
| compatible | 匹配驱动进行驱动注册 | "sgs,voltage-idac-ctrl" | 禁止修改 |
| vid_gpio | 配置所使用的GPIO | 硬件决定 | 禁止修改 |
| base_voltage | 基准电压(单位mV) | 硬件决定 | 禁止修改 |
| status | 选择是否使能该节点 | "okay" or "disabled" | 可根据需要修改 |
core_power节点支持通过init-voltage从OPP配置项中选择开机电压,节点中的参数如下:
1. core_power {
2. regulator-name = "core_power";
3. regulator-min-microvolt = <700000>;
4. regulator-max-microvolt = <1300000>;
5. regulator-ramp-delay = <10>;
6. regulator-always-on;
7. compatible = "sgs,regulator-idac";
8. gpio = <PAD_PM_GPIO4>;
9. base-voltage = <1000000>; // uV
10. sample-resistor = <20000>; // ohm
11. opp0 = <920000 860000 0x0>;
12. opp1 = <970000 900000 0x1>;
13. init-voltage = "opp1";
14. status = "okay";
15. };
core_power节点中的属性含义分别为:
| 属性 | 描述 | 设定值 | 备注 |
|---|---|---|---|
| compatible | 匹配驱动进行驱动注册 | "sgs,regulator-idac" | 禁止修改 |
| regulator-* | 标准regulator属性(名称、电压范围、ramp delay等) | 硬件决定 | 参考kernel regulator文档 |
| gpio | IDAC调压所使用的GPIO | 硬件决定 | 禁止修改 |
| base-voltage | 基准电压(单位uV) | 硬件决定 | 禁止修改 |
| sample-resistor | 采样电阻阻值(单位ohm) | 硬件决定 | 禁止修改 |
opp<name> |
开机电压的OPP配置项 | 由SGS提供 | 禁止修改 |
| init-voltage | 开机时下发的初始电压 | OPP属性名字符串(如"opp1"),或固定的u32值(单位uV) | 选择开机时下发的OPP配置项 |
| status | 选择是否使能该节点 | "okay" or "disabled" | 可根据需要修改 |
init-voltage为OPP属性名时,驱动开机时下发该OPP配置项的电压;为u32值时,开机时直接下发该固定电压(单位uV)。若未配置init-voltage,驱动在开机时不会下发初始电压。
6.3. Padmux配置¶
NA
6.4. 模块使用介绍¶
6.4.1. SYSFS 使用方法¶
kernel下使用sysfs查询/修改cpu power,使用说明如下:
-
CPU Power
Dump current cpu power
cat /sys/devices/system/voltage/cpu_power/voltage_current 1070 VOLTAGE_DEMANDER_INIT - VOLTAGE_DEMANDER_CPUFREQ 1070 VOLTAGE_DEMANDER_TEMPERATURE - VOLTAGE_DEMANDER_USER -Query available cpu power
cat /sys/devices/system/voltage/cpu_power/voltage_available Vmin(mV) Vmax(mV) 700 1300Set cpu power to 900mV
echo 900 > /sys/devices/system/voltage/cpu_power/voltage_current
6.4.2. ioctl使用方法¶
NA
6.5. Sample code¶
NA
6.6. UT case¶
NA
7. API参考¶
该功能模块提供以下接口:
| API名称 | 功能 |
|---|---|
| set_core_voltage | 设置电压值 |
| get_core_voltage | 查询电压值 |
7.1. set_core_voltage¶
-
功能
设置电压值
-
语法
int set_core_voltage(const char *name, VOLTAGE_DEMANDER_E demander, u32 mV) -
参数
参数名称 描述 name 调压对象的名字,例如core_power,cpu_power,ipu_power demander 请求者的标签 mV 电压值(单位mV) -
返回值
返回值 描述 0 成功 other 失败
7.2. get_core_voltage¶
-
功能
查询电压值
-
语法
int get_core_voltage(const char *name, u32 *mV) -
参数
参数名称 描述 name 查询的调压对象的名字,例如core_power,cpu_power,ipu_power mV 查询到的电压值保存在该变量中 -
返回值
返回值 描述 0 成功 other 失败
8. FAQ¶
NA