基于16位SPI接口读取20位及以上高精度ADC结果的方案咨询
问题解答
方案可行性说明
完全可以通过纯软件方案实现16位SPI接口读取20位及以上外置ADC的采样结果,无需额外增加硬件。
具体实现逻辑
F2837xD的SPI接口支持连续多帧传输,可通过配置SPISTE(片选)引脚为连续有效模式,在多帧传输过程中保持片选信号不释放,避免传输中断。你可以根据ADC的输出规则选择两种拆分传输方式:
- 配置SPI字长为8位:20位采样数据拆分为3次连续8位传输,读取完成后通过移位拼接得到完整采样值,示例代码逻辑为
full_sample = (uint32_t)first_byte << 16 | (uint32_t)second_byte << 8 | third_byte,最后根据ADC有效位长度屏蔽无效低位即可。 - 配置SPI字长为16位:20位采样数据拆分为2次连续16位传输,第一次读取高16位有效数据,第二次读取低4位有效数据(剩余12位为无效填充位),拼接逻辑为
full_sample = (uint32_t)first_16bit << 4 | (second_16bit >> 12)。
精度保留说明
SPI为同步串行传输协议,只要将SPI时钟频率配置在ADC接口支持的阈值范围内,传输过程无误码的前提下,ADC的有效精度可以100%保留,拆分传输不会引入精度损失。
你需要额外注意的精度损失来源为以下环节,和SPI传输无关:
- 外置ADC的实际有效位(ENOB),标称20位以上的ADC实际有效位通常会比标称值低1~3位,选型时可优先选有效位参数≥20位的型号
- 模拟前端信号链噪声、参考源精度、ADC电源纹波抑制能力,这是测量极小纹波场景下的主要误差来源
- ADC输出编码格式的处理错误,需注意区分补码、原码输出的符号位处理逻辑
内容的提问来源于stack exchange,提问作者jvnlendm
相关产品推荐
相关产品推荐

