跳转至

IDAC使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 05/08/2025

    1. 概述

    DAC(数模转换器)是把数字信号转变成模拟信号的电子器件。通常我们用DAC指代电压输出型DAC(即输出的模拟信号是电压),用IDAC指代电流输出型DAC(即输出的模拟信号是电流)。

    2. 关键字说明

    • DAC

      (Digital-to-Analog Converter,数模转换器)是一种将数字信号转换为模拟信号的电子器件。

    • IDAC

      (Current Digital-to-Analog Converter,电流输出型数模转换器)是一种以电流作为输出模拟信号的数模转换器。

    3. 功能描述

    支持两种调压方式:VID和IDAC。VID调压是通过控制12根GPIO来调节电压,只有24个电压档位可供调节,不同档位之间的精度在50mV左右。而IDAC调压能更精细地调节电压(调节精度为10mV或20mV),且仅需一根专用的GPIO即可控制最多30个电压档位。

    4. 硬件连接介绍

    IDAC硬件模块集成在SoC内部。需要将开发板上对应的跳帽切换成IDAC mode来开启IDAC调压功能。

    5. Uboot用法介绍

    uboot 下使用 set 命令修改Power Scheme,命令的使用说明如下:

    Usage:
    set overdrive 0 - change power scheme to 'Low Drive - LD'
    set overdrive 1 - change power scheme to 'None Overdrive - NOD'
    set overdrive 2 - change power scheme to 'Over Drive - OD'
    set overdrive 3 - change power scheme to 'Turn Off'
    

    6. Kernel用法介绍

    IDAC调压的对象包括Core Power(VDD_CORE),CPU Power(VDD_CPU),IPU Power(VDD_IPU),DSP Power(VDD_DSP)等。不同平台支持的调压对象会有所不同,下面以IFORD平台用IDAC调节CPU Power为例进行说明。

    6.1. Kernel Config配置

    1. Enable 对应的驱动模块:

      在编译kernel时需要选择的配置如下:

      Device Drivers  --->
          [*] Sstar SoC platform drivers  --->
              [*] Sstar Voltage IDAC Control
      

    6.2. Dts配置

    IDAC控制CPU Power的相关设定在dts里的cpu_power节点中。节点中的参数如下:

    1.    cpu_power {
    2.        compatible = "sstar,voltage-idac-ctrl";
    3.        vid_gpio = <PAD_PM_GPIO5>;
    4.        base_voltage = <900>;
    5.        status = "okay";
    6.    };
    

    cpu_power节点中的属性含义分别为:

    属性 描述 设定值 备注
    compatible 匹配驱动进行驱动注册 "sstar,voltage-idac-ctrl" 禁止修改
    vid_gpio 配置所使用的GPIO 硬件决定 禁止修改
    base_voltage 基准电压(单位mV) 硬件决定 禁止修改
    status 选择是否使能该节点 "okay" or "disabled" 可根据需要修改

    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         1300
      

      Set 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