之前的文章呢,解读了一下华为的ADC,后面又拿到了最新的手册,我觉得里面有意思的东西还是很多的,感觉可以写一点小文章(也算是学习之余的娱乐了)

事实上,现在除了超级快的接口使用LVDS或者是JD什么什么,现在绝大多数都是使用了SPI,或者是相关的一些衍生版本:

接口

重启必须有,参考我以前的确定事件的论述,剩下就是一个SPI的标配,接着是数据这里,8个就是一个字节嘛,后面又是时钟和中断线。

你别说,这焊盘挺有小心机,数据线正好是对称的,方便拉线

芯片上电后默认处于 寄存器配置模式

切换至转换模式:向 寄存器地址 0x002 写入 0xA5A5

切换回配置模式:向 0x002 写入 ≠ 0xA5A5 的任意值

模式
寄存器可访问性
数据可读性
配置模式
所有寄存器可写/读
不可读取 ADC 数据
转换模式
仅地址 0x002 可写
可读取 ADC 数据

整个过程是这样的:

配置阶段(SPI配置模式):

上电 → 等待稳定 → 硬复位(RSTN);写入寄存器完成参数配置(增益、输出格式、Lane数等)。

启动转换(转换模式):写 0xA5A5 至 0x002;配置 CNV 上升沿 → 启动一次采样;等待 BUSY 下降或 tCONV 时间后开始读取

读取数据:拉低 CSN;主控提供 SCK(SPI模式)或等待 SCKOUT(回波/主时钟);按 Lane 数读取数据位宽(如 4 Lane × 8bit = 32bit)。

华为叫这个是QSPI,这对吗?

以前的QSPI都是储存,但是这里并非用于存储访问,而是用于高速 ADC 数据回读,每次转换输出数据位宽 24bit/32bit;可用 SDO0~SDO7 多 Lane 并行输出,提高吞吐;主控只需拉低 CSN + 提供时钟(或等待时钟输出)即可读取;

实际最大吞吐可达:

吞吐速率数时钟频率

从 华为AC9610D-24 看 SPI 的时钟

这是所有的引脚

引脚
作用
SCK
SPI 串行时钟
CSN
片选(低有效)
SDI
数据输入(主 → 从)
SDO0~7
数据输出(从 → 主)最多 8 路
BUSY_SCKOUT
复用功能:Busy 状态输出 或 SCK 输出

另外AC9610D-24 支持3 种 SPI 时钟模式,可用于不同的系统主控架构和隔离要求:

模式
时钟源
数据发送方式
BUSY 管脚功能
适合场景
SPI 时钟模式
外部 SCK
SDR(下降沿)
输出 BUSY 状态
MCU 控制,常规系统
回波时钟模式
外部 SCK
SDR/DDR
输出 SCKOUT
隔离系统时钟同步
主时钟模式
芯片内部 OSC
SDR/DDR
输出 SCKOUT
主控资源紧张或隔离系统

看个随笔的版本:

模式
谁提供时钟
谁掌控节奏
主控是否省心
适用场景
SPI 模式
主控
主控控制
一般(需时序控制)
MCU + SPI 外设
回波模式
主控
ADC 反馈节奏
稍省心(同步稳)
有隔离器、长线传输系统
主时钟模式
ADC 内部
ADC 主导
最省心(无需控制)
主控弱、简化设计场景

这片子的场景肯定是很精密的场景,所以需要做很好的隔离,但是这个时钟在隔离器件这里就有不少头疼的地方,所以这也是文章有意思的地方。

都在这里

SPI 时钟模式(默认)

外部主控提供 SCK;SCK 下降沿输出(SDR 模式);

BUSY_SCKOUT 引脚:用于输出 BUSY 信号(可用于同步转换完成);

数据输出格式:1、2、4 Lane 可选,默认 1-Lane。

这样就可以使用SAI 外设来采集芯片的数据,至少FPGA我又可以不碰了
这个是最简单的面条代码
回波模式下的数据是ADC的时钟输出的
感觉也是很费电的,不说了,给哥上个充电宝

可通过 BUSY 引脚判定数据转换完成;最简单对接 MCU(简单nm)。


回波时钟模式(Echo Clock Mode)

在这里,新知识

外部 SCK;芯片内部复制 SCK → 输出到 SCKOUT(BUSY_SCKOUT 引脚)数据输出同步 SCKOUT 上升沿(SDR)或双边沿(DDR)BUSY 信号失效(SCKOUT 用作时钟)

(主控)打拍子,但 ADC 不直接听,而是“学着主控”的节奏自己再拍一遍(ADC 复制 SCK 为 SCKOUT)。然后我们就按照 ADC 的回拍节奏来收它的数据。

主控提供原始时钟 SCK;ADC 回传一个节奏 SCKOUT,主控听它的再读数据。

我觉得可以叫:节奏“回声反馈”模式 更加的通俗,适合中间有“墙”(比如光耦隔离器)——你拍了它回给你,确保节奏没偏;但你看不到它是不是“还在写”(BUSY 信号被占用)。

这种模式适用于数字隔离器系统;保证数据输出同步性,无需 MCU 时钟与采样精准对齐。


主时钟模式(Host Clock Mode)

芯片内置振荡器 + 分频器;SCKOUT 由芯片内部提供(无需外部时钟);数据同步 SCKOUT 输出,支持 SDR / DDRBUSY 无法使用主机无需控制时钟,仅需拉低 CSN → 自动输出数据;极简设计,适合主控能力弱、超低功耗主控系统;可通过 OSC_DIV 选择分频因子(如 ÷1、÷2、÷4、÷8)控制时钟频率。我称为到访天罡!

数据总线宽度

模式
ADC0 输出管脚
ADC1 输出管脚
1-Lane
SDO0
SDO4
2-Lane
SDO0, SDO1
SDO4, SDO5
4-Lane
SDO0~SDO3
SDO4~SDO7
Interleaved
SDO0(先 ADC0 后 ADC1)
无其他 SDO 使用

使用多 Lane 可降低单路 SCK 频率 → 降低 EMI;配合回波/主时钟模式效果更优,适合高速隔离数据系统。


采样控制 & 数据读取时序(CNV 控制)

CNV

CNV 管脚上升沿启动一次采样 + 转换过程;转换完成时间(tCONV)约为 430 ns;CSN 拉低时输出当前采样值(必须等待 BUSY 拉低或 tCONV 时间后);推荐读取窗口避免 CSN 穿越 CNV 上升沿);

image-20250514222433739

CNV 信号需具备低抖动特性,否则会影响 ADC 精度;如果使用外部隔离,建议使用回波/主时钟模式保证同步性;


状态同步 & 控制机制引脚

功能
管脚/模式
说明
BUSY 指示
BUSY_SCKOUT(仅 SPI 模式)
转换期间为高电平
数据准备完毕
读取 BUSY 或等待 tCONV
准确控制采数节奏
数据输出时序
支持 SDR 或 DDR,0/1/2/4 Lane
兼顾吞吐与简洁布线需求

如何连接这颗芯片

应用场景
推荐时钟模式
Lane 配置
备注
常规 MCU + SPI
SPI 时钟模式
1-Lane
简单可靠
MCU + 隔离器
回波时钟模式
2/4-Lane
自动校准同步
高速 FPGA 系统
主时钟 + DDR
4-Lane
提升吞吐
超低功耗单片机
主时钟 + SDR
1-Lane
芯片自控采样
双通道交替采样
Interleaved 模式
1-Lane
节省引脚,需解包
交织模式

最后我要说一点的是 :在回波模式下ADC 内部用这个 SCK 驱动输出数据 → 然后自己再吐回一份延时匹配好的时钟(SCKOUT)主控用这份 “同步对齐”的时钟 采数据 → 保证可靠

信号线
方向
接线说明
SCK
主控 → ADC
仍然是输入时钟
SCKOUT
ADC → 主控
回送时钟,主控必须接来采样
SDO
ADC → 主控
数据输出线
CSN
主控 → ADC
SPI 芯片选中信号

因为在实际高速/隔离系统中,主控 → ADC 的 SCK 信号:经过光耦、PCB trace、驱动器等,可能会产生 延时、失配、抖动,主控如果用原始 SCK 采 ADC 的输出数据(SDO),有可能出现 setup/hold time 不满足