SSD_SAR使用参考


1. Sar简介

逐次逼近寄存器型(SAR)模数转换器(ADC)是采样速率低于5Msps的中高分辨率ADC应用的常见结构,SAR式ADC的分辨率一般为8-16位。具有低功耗,小尺寸等特点。

SAR为英文successive approximation register的缩写


2. 平台概述

在SSD20X平台上,提供了3个SAR口使用(SSD203只有2个sar口),精度是10bit(实际有效数据是8bit),对应的pin分别是:

pin SAR MODE Channel Note
PAD_SAR_GPIO0 MDRV_PUSE_SAR_GPIO0 0
PAD_SAR_GPIO1 MDRV_PUSE_CPUFREQ_VID1 1 该pin硬件已经规定用法,用来调整Core Power
PAD_SAR_GPIO2 MDRV_PUSE_SAR_GPIO0 2 SSD203这个pin不是sar口

3. 平台配置说明

3.1 kernel下的配置

config:CONFIG_MS_SAR

对应会生成节点:/dev/sar


3.2 padmux配置


4. SAR的使用

4.1 SAR IOCTL参数说明

IOCTL 接口 参数说 说明
IOCTL_SAR_INIT NULL 初始化
IOCTL_SAR_SET_CHANNEL_READ_VALUE typedef struct
获取adc value

4.2 Demo code演示

SAR_ADC_CONFIG_READ adcCfg;
adcCfg.channel_value = 0;            //输入参数,注意:PAD_SAR_GPIO0 = 0 PAD_SAR_GPIO1 = 1 PAD_SAR_GPIO2 = 2
int fd = open("/dev/sar", O_WRONLY);
if(fd == -1) {
        return -1;
}
if (ioctl(fd, IOCTL_SAR_INIT, NULL) < 0) {
        int err = errno;
        printf("\n!!! IOCTL_SAR_INIT FAILED, errno: %d, %s\n", err, strerror(err));
}
if (ioctl(fd, IOCTL_SAR_SET_CHANNEL_READ_VALUE, &adcCfg) < 0) {
        int err = errno;
        printf("\n!!! IOCTL_SAR_SET_CHANNEL_READ_VALUE FAILED, errno: %d, %s\n", err, strerror(err));
}
else {
        printf("SAR: get value %d", adcCfg.adc_value);
}

4.3 获取的结果转化

如下图,获取的value值是1023,前面说了SSD20X平台的Sar口采样精度是10bit的(也就是总value值是2^10=1024,3.3/1024=0.00322 V/每点),总供电是3.3V,那么这里

1023对应的电压就是:1023/1024*3.3=3.29

注:平台采样精度虽然是10bit,但是实际有效应该是在8bit(2^8 = 256),采样精度:3.3/256 = 0.0129 V/每点(也就是说我们获取的value值是有这个误差范围的)