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值是有这个误差范围的)