本章节介绍 Pico-G1 扩展板上的 ADC 采集应用示例 —— adc_display。该应用演示了如何使用芯片内置的 LSADC(12-bit SAR ADC)进行模拟电压采样,并在 TFT 屏幕上实时显示电压值。这是学习模拟信号采集的基础示例。
应用源码位于 SDK 目录 source/app/04_adc_display/,提供了完整的 ADC 字符设备操作实现。
| 参数 | 值 |
|---|---|
ADC 分辨率 |
12-bit(0~4095) |
采样通道 |
CH1(GPIO1_1) |
VREF 电压 |
1.8V(默认,可配置) |
输入范围 |
0~VREF(≤ 3.3V) |
采样模式 |
CONTINUOUS(连续采样) |
刷新频率 |
100ms(可配置) |
| 信号 | 板上 GPIO | 物理 pad | 说明 |
|---|---|---|---|
| AO | GPIO1_1 | iocfg_reg21 @ 0x12090004 | ADC 输入通道1 |
| VCC | 1.8V | — | 参考电压(必须 ≤ 3.3V) |
| GND | GND | — | 地线 |
export PATH=$PATH:<SDK>/tools/linux/toolchains/arm-gcc12.2.0-linux-uclibceabi/bin
cd <SDK>/source/app/04_adc_display
make
scp adc_display root@<板端IP>:/usr/bin/
ssh root@<板端IP} '/usr/bin/adc_display'
/mnt # ./adc_display
[adc] pad 0x12090004 -> 0x00001004
[spi] pad 0x100C0028 -> 0x00001004
[spi] pad 0x100C002C -> 0x00001004
[spi] pad 0x100C0030 -> 0x00001000
[spi] pad 0x100C0020 -> 0x00001005
[spi] pad 0x100C001C -> 0x00001005
[spi] opening /dev/spidev2.0 ...
[spi] spidev opened, fd=3
[spi] spidev mode/bits/speed set (MODE3/8b/24MHz)
[spi] chardev request DC @ /dev/gpiochip4 line 5 ...
[spi] chardev request RES @ /dev/gpiochip4 line 4 ...
[spi] chardev request CS @ /dev/gpiochip5 line 1 ...
[spi] chardev-verify: DC=0(expect0) RES=1(expect1) CS=1(expect1) ==> OK(chardev 真驱动了引脚)
[spi] spi_hal_init done
[tft] init: SLPOUT
[tft] init: SLPOUT +120ms ok
[tft] init: config cmds ok
[tft] init: DISPON
[tft] init: DISPON ok
[tft] init: clear-flush start
[tft] flush #1 start
[tft] flush #1 done
[tft] init: clear-flush done
[adc] /dev/lsadc 不存在,自动 insmod xm_lsadc.ko ...
raw=4095 V=3.300
[tft] flush #2 start
[tft] flush #2 done

| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| /dev/lsadc 不存在 | LSADC 驱动未加载 | 程序会自动加载 xm_lsadc.ko |
| 读数异常 | VREF 配置错误 | 修改 ADC_VREF_MV 参数 |
| 数值跳动 | 输入信号不稳定 | 增加滤波电路 |