在继电保护、电能计量、电网监测、工业录波这类场景里,"采得准、采得同步、采得及时"是硬指标:电压电流信号要双通道同步采样,工频一周波内要抓到足够多的点,采样间隔抖动要小到不影响谐波分析与故障判定。过去这套链路往往要挂一颗FPGA或专用MCU才能跑起来,成本与开发门槛都下不来。
触觉智能基于旗下RK3506核心板/开发板打造了一套64路高速ADC采集方案:
用 RK3506内置的FlexBus高速并行总线直连AD7616,配合AMP多核异构系统,把"硬件时序+DMA搬运"的采集链路做进了主控本身,实测50Hz工频信号采集精准对应、采样抖动低至1.029µs,同时省掉了外挂FPGA/MCU。对测试感兴趣的朋友们还可点击下方视频进一步了解:
https://www.bilibili.com/video/BV1BZDYBJEyJ
本篇(上篇)先讲清楚这套方案"为什么做、做成什么样"------从工业采集的三条老路与它们的痛点、整体方案架构,以及64路是怎么堆出来的;下篇再进入"怎么做到、效果如何":驱动实现拆解、关键配置与调试要点、实测数据与方案对比,以及落地经验总结。
项目背景
RK3506内置FlexBus可编程高速并行总线,最高支持200MHz时钟速率,可配置为 ADC/DAC专用工作模式,原生适配高速并行外设,是对接并行ADC的最优总线方案,带宽与实时性远优于 SPI、I2C 等低速串行总线。
AD7616是ADI 面向工业测控的16位双通道同步采样 ADC。它有串行和并行两种读取模式,其中并行硬件模式具备三个关键优势:双通道同步采样、吞吐速率更高、时序容错性更强,是工业高速采集的首选工作模式。
问题在于:RK3506 的原厂内核长期缺少AD7616并行硬件模式专用驱动。开发者要么走SPI低速读取,要么用软件模拟------两条路都不好走。
在本次方案落地前,工业现场做64路这个量级的同步采集,通常只有三种选择:
|------------|-------------------|----------------------------------------------|
| 实现路线 | 典型结构 | 核心痛点 |
| 传统FPGA方案 | ARM+FPGA+AD7616 | 需要外挂 FPGA 做时序与缓存,整体物料成本高,开发门槛高、迭代周期长 |
| 传统MCU方案 | ARM+MCU+AD7616 | 需要外挂 MCU 做采集,多一颗芯片多一层通信,数据搬运链路长、同步性难保证 |
| RK3506折中方案 | RK3506+SPI/软件模拟时序 | 采样率低、CPU 占用高、时序不稳定、数据丢包,精度依赖 CPU 调度,稳定性差 |
具体到 RK3506 折中方案的短板,可以归纳为四点:
- 无硬件时序驱动:仅支持软件模拟时序,采样精度依赖 CPU 调度,稳定性差;
- 无 DMA 硬件传输:数据读取全程占用 CPU,高频率采样下系统负载飙升;
- 无异常容错机制:超时、数据溢出、传输错误无检测,极易出现数据异常;
- 无可配置采样参数:无法动态调节采样频率,适配场景受限。
本次方案要解决的,正是"用主控本身替代外挂芯片"这件事:让RK3506通过 FlexBus直连AD7616,用硬件时序+DMA完成整条采集链路。
- ADC采集的关键需求
结合行业需求与触觉智能方案经验,总结了以下需求,涵盖实时性、精度 与抗干扰,并针对现场严苛环境增加了宽温需求维度。

硬件方面,触觉智能RK3506核心板 ±8KV接触放电与±15KV空气放电的工业 标准。
- 电力行业ADC采集系统连接示意图

触觉智能RK3506 FlexBus直连AD7616方案架构
- 方案说明
整套测试与演示链路可以拆成四段:
-
信号端
高精度信号发生器输出模拟电网的纯净 50Hz 信号(正弦波/方波),配合示波器观察原始波形(模拟电网的电压、电流信号);
-
采集端
64路ADC采集拓展板 ,板载4颗AD7616BSTZ,负责高精度、高抗扰的模拟信号采样与数字化;
-
主控端
触觉智能 RK3506 核心板 / 开发板 ,通过FlexBus总线控制 ADC、读取数据并进行算法处理与通信;
-
显示端
MIPI DSI 接口显示屏,实时呈现采集波形。

这是本方案区别于普通 Linux 单系统采集的关键设计------多核异构(AMP)双系统:
-
OneOS侧
触觉智能与中移物联合作推出了配套RK3506 OneOS实时系统,负责FlexBus时序输出、DMA 触发、中断响应、数据落盘,保证采集周期与抖动指标;
-
Linux(BuildRoot+QT)侧
跑业务逻辑与界面,负责波形显示、参数配置、数据导出;
-
双系统通过
RPMsg通信实时侧采完的数据经共享内存/消息通道交给应用侧,互不抢占。
这样做的好处是"各司其职":实时采集不被Linux调度抖动干扰,界面与应用也不必为采集让路,一套主控同时满足实时性与交互需求。
- 采集端:64 路是怎么来的
AD7616单颗为16通道、16位、双通道同步采样 结构,采集板用4颗 AD7616BSTZ并联 ,组成64路(4×16)同步采集能力。
- 关键改动
方案在内核侧的核心改动分为两部分,代码精简、逻辑闭环,完全贴合Linux IIO子系统规范,可直接合入RK3506原厂内核:
①新增核心驱动文件
drivers/iio/adc/rockchip-flexbus-ad7616-par-hw.c
基于Linux标准 IIO ADC子系统开发,实现AD7616并行硬件模式的时序配置、DMA传输、中断处理、参数读写、GPIO控制、异常容错全功能适配。
② 内核头文件修正
include/linux/mfd/rockchip-flexbus.h
新增FLEXBUS_CCI中断清除位定义(BIT(31)),补齐FlexBus中断寄存器配置缺失,为驱动中断回调、异常复位提供底层寄存器支撑,解决硬件中断无法清除的底层BUG。
以上是这套方案的整体框架。驱动内部到底怎么把时序、DMA、中断串起来?64 路、1.029µs 的实测数据经不经得起推敲?下篇继续拆解,敬请关注。