成为拥有核心技术的半导体元器件供应商和解决方案商
电话咨询(微信同号): +86 18926567115

新闻资讯

知识专栏

通过优化MCU SPI驱动来提高ADC吞吐量

作者: 浮思特科技2024-04-19 15:25:53

  随着技术的进步,低功耗物联网(IoT)和边缘/云计算需要传输更精确的数据。无线传感系统是一个带有24位模数转换器(ADC)的高精度数据采集系统。在这种情况下,微控制器单元(MCU)能否负担得起数据转换器的串行高速接口是一个需要解决的问题。

  本文介绍了设计 MCU 和 ADC 之间的高速串行外设接口 (SPI) 数据事务驱动程序的过程。以下部分将简要描述优化 SPI 驱动程序的不同方法以及 ADC 和 MCU 上所需的配置。在简要说明之后将提供 SPI 和直接存储器存取 (DMA) 数据事务的示例代码的详细描述。

单片机MCU

  通用SPI驱动简介

  顾名思义,MCU 供应商以示例代码的形式向每个 MCU 提供通用 SPI 驱动程序/API。通用的SPI驱动程序/API通常可以覆盖大多数用户的应用程序,这些应用程序可能会完成许多配置或确定语句。在一些特定场景下,例如ADC数据采集,通用SPI驱动程序无法满足ADC数据的全速吞吐量,因为通用驱动程序中实现了太多不同的配置。应用程序中未使用的配置会产生额外的开销并导致时间延迟。

  框架

  为了通过SPI提取ADC的输出数据,我们会选择MCU作为主要器件,因为它具有低功耗和高速性能。然而,当数据事务基于 ADI SPI 驱动程序时,速度可能会由于 ADC 至 MCU 应用中不起作用的命令而降低。为了充分发挥 ADC 的潜在速度,我们对 ADuCM4050 和AD7768-1进行了实验,并尝试了可能的解决方案。尽管 ADuCM4050 的最大输出数据速率为 256 kHz(在默认滤波器下),但目前仅限于 8 kHz。加速输出速率的潜在解决方案包括删除不必要的命令和激活 DMA 控制器。这些想法将在以下部分中实现。

API配置

  MCU为主

  ADuCM4050 MCU 是一款超低功耗微控制器系统,主时钟速率为 26 MHz。该系统由 Arm ® Cortex ® -M4F 处理器驱动。ADuCM4050 配备三个 SPI,每个 SPI 包含两个 DMA 通道(接收和发送),用于与 DMA 控制器连接。DMA 控制器和 DMA 通道提供了在内存和外设之间传输数据的方法。这是一种有效的数据分配方式,可以释放核心来处理其他任务。

  数据流连接图

  ADuCM4050 和 AD7768-1 用作数据事务示例模型。引脚连接如图所示。

  它们的复位信号从 MCU GPIO28 发送到 ADC RST_1 引脚,数据就绪信号从 ADC DRDY_1 发送到 MCU GPIO27。其余引脚连接为通用 SPI 配置,其中 MCU 为主,ADC 为节点。SDI_1接收来自MCU的ADC寄存器读/写命令,DOUT_1将输出数据发送到MCU。

ODR

  数据交易的实现

  中断数据事务

  为了实现连续的数据传输,我们使用GPIO27(连接到DRDY)作为中断触发器。当 ADC 向 GPIO27 发送数据就绪信号时,MCU 运行回调函数,其中包含数据事务命令。如所示,数据采集必须在中断A和中断B之间的时间间隔内进行。

  借助ADI SPI驱动程序,我们可以轻松实现ADC和MCU之间的数据交互。然而,由于驱动器中的冗余命令,ADC ODR 将被限制为 8 kHz。为了加快这个过程,我们将代码修剪到最精简。我们介绍两种 DMA 数据传输方法:基本模式 DMA 传输和乒乓模式 DMA 传输。

  中断处理程序优化

  数据就绪信号之间的时间间隔不仅包括回调函数中命令的执行时间,还包括 ADI GPIO 中断处理程序中命令的执行时间。

  MCU 激活时,CPU 运行启动文件(即startup.s)。所有事件处理程序都在该文件中定义,包括 GPIO 中断处理程序。一旦触发GPIO中断,就会执行中断处理函数(即ADI GPIO驱动程序中的GPIO_A_INT_HANDLER和GPIO_B_INT_HANDLER)。在一般的中断处理函数中,CPU 会在所有 GPIO 引脚中搜索触发的引脚,清除其中断状态,并运行注册的回调函数。在所使用的ADC-MCU应用中,DRDY是唯一的中断信号。因此,我们希望修剪该函数以加快该过程。可能的解决方案包括(1)在启动文件中重定向以及(2)修改原始中断处理程序。

  另一方面,修改则需要自定义GPIO驱动。我们采用后一种选项并修改该函数,其中它仅清除连接到 DRDY 的引脚的中断状态并直接进入回调函数。请注意,需要通过取消选中包含在构建目标中的框来阻止原始 GPIO 驱动程序。

  使用所选的ADC(AD7768-1)和MCU(ADuCM4050或MAX32660),我们可以通过SPI实现高速数据传输。为了达到速度优化的目标,我们根据ADI SPI驱动程序进行数据传输,但扣除了冗余命令。此外,DMA 控制器的激活可以释放内核并加速连续数据传输。浮思特科技专注在新能源汽车、电力新能源、家用电器、触控显示,4大领域,为客户提供单片机(MCU)产品选型采购的一站式服务,是一家拥有核心技术的电子元器件供应商和解决方案商。