4.5.17. ADC 测试

4.5.17.1. 测试原理

ADC(Analog-to-Digital Converter)测试用于验证芯片 ADC 模块功能正确性采样精度。X5 芯片内置 10-bit ADC,支持 8 个采样通道(channel 0-7),通过 Linux IIO(Industrial I/O)子系统对外提供 sysfs 和字符设备接口。

ADC 测试脚本 adc_test.sh 支持两种采样模式:

  • 单次采样(Single):通过 sysfs 接口逐次读取指定通道原始值,适用低频采样场景。每次读取 in_voltageN_raw 获取当前 ADC 原始值。

  • 连续采样(Continuous):通过 IIO buffer 机制实现高速连续采样。启用指定通道的 buffer 后,从字符设备 /dev/iio:device0 读取连续数据流,适用高频采样压力测试场景。

电压换算公式:

电压(mV) = raw × vol_scale

其中 vol_scalein_voltage_scale 读取(单位 mV/LSB),由驱动根据参考电压(vref)和分辨率计算得出。例如 vref = 1.8V、10-bit 分辨率时,vol_scale = 1800 / 1024 1.7578 mV/LSB

4.5.17.2. 准备工作

脚本使用说明

adc_test.sh 支持通过 -h 参数查看帮助信息:

# ./adc_test.sh -h
usage: ./adc_test.sh <channel{3-7}> [-m mode] [-n count] [-i interval]
  channel      ADC channel number (3-7)
  -m mode      sample mode: single (default) / continuous
  -n count     sample count, 0=infinite (default: 0)
  -i interval  sample interval in seconds for single mode (default: 1)

参数说明

参数 说明 默认值
channel ADC 通道号,范围 3-7 必填
-m mode 采样模式:single(单次采样)/ continuous(连续采样) single
-n count 采样次数,0 表示无限循环 0
-i interval 采样间隔(秒),仅 single 模式有效 1

注意事项

  1. 确认 IIO 设备文件存在:

    # ls /sys/bus/iio/devices/iio:device0/
    

    包含 in_voltageN_rawin_voltage_scale节点。

  2. 连续采样模式需要 IIO buffer 和字符设备支持,确认以下路径存在:

    /sys/bus/iio/devices/iio:device0/buffer0/
    /dev/iio:device0
    
  3. 测试确认待测通道对应引脚位置,参考 X5 EVB 原理图找到 ADC 通道引脚连接器位置,并接入待测电压信号。

  4. ADC 输入电压范围取决于参考电压(vref),请勿超过量程,否则可能损坏芯片。

4.5.17.3. 测试步骤

单次采样测试

单次采样模式通过 sysfs 接口逐次读取 ADC 原始值,适合基本功能验证。

基本用法(无限循环,按 Ctrl+C 停止):

# ./adc_test.sh 3

输出示例:

========================================
ADC Test Info
========================================
Channel     : 3
Mode        : single
IIO Device  : 34190000.adc
Scale       : 1.757812500
ADC Clock   : 9523810 Hz
ADC APB Clk : 200000000 Hz
Count       : infinite
Interval    : 1s
========================================
Press Ctrl+C for quit

[0] vol_raw:500 vol:878.90 mV
[1] vol_raw:501 vol:880.66 mV
[2] vol_raw:500 vol:878.90 mV
^C
=== Statistics ===
Samples: 3
Raw   - min: 500  max: 501  avg: 500
Volt  - min: 878.90  max: 880.66  avg: 879.48 mV

指定采样次数间隔

# ./adc_test.sh 3 -n 10 -i 0.5

采样 10 次后自动停止,每次间隔 0.5 秒,结束输出统计信息。

连续采样测试

连续采样模式通过 IIO buffer 实现高速数据采集,适合压力测试信号分析。

指定采样次数

# ./adc_test.sh 3 -m continuous -n 100

输出示例:

========================================
ADC Test Info
========================================
Channel     : 3
Mode        : continuous
IIO Device  : 34190000.adc
Scale       : 1.757812500
ADC Clock   : 9523810 Hz
ADC APB Clk : 200000000 Hz
Count       : 100
========================================
Press Ctrl+C for quit

[0] vol_raw:500 vol:878.90 mV
[1] vol_raw:501 vol:880.66 mV
[2] vol_raw:500 vol:878.90 mV
...
[99] vol_raw:500 vol:878.90 mV
=== Statistics ===
Samples: 100
Raw   - min: 498  max: 502  avg: 500
Volt  - min: 875.38  max: 882.42  avg: 878.90 mV

无限循环采样(按 Ctrl+C 停止输出统计):

# ./adc_test.sh 3 -m continuous

采样持续进行,按下 Ctrl+C 后自动关闭 IIO buffer 并输出统计信息。

4.5.17.4. 测试指标

输出信息说明

测试脚本开始采样前会打印 ADC 系统信息,包含以下内容:

说明
Channel 当前测试的 ADC 通道
Mode 采样模式(single / continuous)
IIO Device IIO 设备名称
Scale 电压比例系数(mV/LSB)
ADC Clock ADC 主时钟频率
ADC APB Clk ADC APB 时钟频率
Count 采样次数(infinite 表示无限循环)
Interval 采样间隔(仅 single 模式显示)

采样结束输出统计信息:

说明
Samples 实际采样次数
Raw min/max/avg 原始最小值、最大值、平均值
Volt min/max/avg 电压值(mV)的最小值、最大值、平均值

结果判定

  1. 功能正常:脚本能够正常打印采样统计信息,采样预期范围内(根据输入电压计算)。

  2. 精度正常:统计信息中 raw 值波动范围(max - min)应较小(通常 ≤ 10 LSB),表明 ADC 采样稳定。

  3. 异常判定

    • 若脚本报退出(如设备文件存在),检查驱动是否正常加载、设备树是否使能 ADC 节点。

    • 采样持续为 0 或满量程(1023),检查通道引脚连接是否正确、输入信号是否量程范围内。

    • 连续采样模式报错,检查 IIO buffer 和 /dev/iio:device0 字符设备是否可用。