技术文章—操纵MCU SPI接口以访问非标准SPI ADC

发布者:EEWorld资讯最新更新时间:2020-01-02 来源: EEWORLD关键字:MCU  SPI 手机看文章 扫描二维码
随时随地手机看文章

问题:能否用MCU访问非标准SPI接口?

 

 

答案:可以,但可能需要做一些额外的努力。

 

简介

 

当前许多精密模数转换器(ADC)具有串行外设接口(SPI)或某种串行接口,用以与包括微控制器单元(MCU)、DSP和FPGA在内的控制器进行通信。控制器写入或读取ADC内部寄存器并读取转换码。SPI的印刷电路板(PCB)布线简单,并且有比并行接口更快的时钟速率,因而越来越受欢迎。而且,使用标准SPI很容易将ADC连接到控制器。

 

一些新型ADC具有SPI,但有些ADC具有非标准的3线或4线SPI作为从机,因为它们希望实现更快的吞吐速率。例如,AD7616、AD7606和AD7606B系列有两条或四条SDO线,在串行模式下可提供更快的吞吐速率。AD7768、AD7779和AD7134系列有多条SDO线,用作SPI主机。用户在设计微控制器SPI以配置ADC和读取代码时往往会遇到困难。

 

 

图1.AD7768用作串行主机,具有两个数据输出引脚(14001-193)。

 

与ADC的标准MCU SPI连接

 

SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。图2显示了典型的4线MCU SPI接口连接。

 

图2.与ADC从机的标准MCU SPI连接

 

要开始SPI通信,控制器必须发送时钟信号,并通过使能信号(通常是低电平有效信号)来选择ADC。SPI是全双工接口,因此控制器和ADC可以分别通过MOSI/DIN和MISO/DOUT线同时输出数据。控制器SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。为了在主机和从机之间进行可靠的通信,用户必须遵守微控制器和ADC芯片的数字接口时序规范。

 

如果微控制器SPI和ADC串行接口具有标准SPI时序模式,那么用户设计PCB布线和开发驱动器固件不成问题。但是,有些新型ADC的串行接口端口不是典型的SPI时序模式。MCU或DSP似乎不可能通过AD7768串行端口(一种非标准时序SPI端口)读取数据,如图4所示。

 

本文将介绍操纵标准微控制器SPI以便与具有非标准SPI端口的ADC接口的方法。


本文会给出四种通过串行接口读取ADC码的解决方案:

 

解决方案1:MCU作为SPI从机,通过一条DOUT线与作为SPI主机的ADC接口。

解决方案2:MCU作为SPI从机,通过两条DOUT线与作为SPI主机的ADC接口。

解决方案3:MCU作为SPI从机,通过DMA与作为SPI主机的ADC接口。

解决方案4:MCU作为SPI主机和SPI从机,通过两条DOUT线读取数据。

 

图3.SPI数据时钟时序图示例

 

图4.AD7768 FORMATx = 1×时序图,仅通过DOUT0输出。


STM32F429微控制器SPI通过一条DOUT线读取AD7768代码

 

如图4所示,当FORMATx = 11或10时,通道0至通道7仅通过DOUT0输出数据。在标准工作模式下,AD7768/AD7768-4作为主机工作,数据流入MCU、DSP或FPGA。AD7768/AD7768-4向从机提供数据、数据时钟(DCLK)和下降沿帧使能信号(DRDY)。

STM32Fxxx系列微控制器广泛用于很多不同的应用中。该MCU有多个SPI端口,可以使用典型的SPI时序模式将其配置为SPI主机或从机。下文中介绍的方法也可应用于其他具有8位、16位或32位帧的微控制器。

 

AD7768/AD7768-4分别为8通道和4通道同步采样Σ-Δ型ADC,每通道均有Σ-Δ型调制器和数字滤波器,支持交流和直流信号的同步采样。这些器件在110.8 kHz的最大输入带宽下实现了108 dB动态范围,具备±2 ppm INL、±50 µV偏置误差和±30 ppm增益误差的典型性能。AD7768/AD7768-4用户可在输入带宽、输出数据速率和功耗之间进行权衡,并选择三种功耗模式之一以优化噪声目标和功耗。AD7768/AD7768-4的灵活性使其成为适合低功耗直流和高性能交流测量模块的可重复使用平台。遗憾的是,AD7768的串行接口不是典型SPI时序模式,而且AD7768充当串行接口主机。一般而言,用户必须使用FPGA/CPLD作为其控制器,

 

例如,使用32F429IDISCOVERY和AD7768评估板。变通SPI线的连接如图5所示。在这种设置下,AD7768的所有八通道数据仅通过DOUT0输出。

 

 

图5.AD7768通过DOUT0将数据输出到STM32F429 MCU SPI连接


需要解决的问题:

 

AD7768用作SPI主机,故必须将STM32F429I SPI配置为SPI从机。

 高电平脉冲只持续一个DCLK周期,这不是典型的。

完成所有通道数据位的输出之后,DCLK继续输出,为低电平。

 

解决方案1:MCU SPI作为从机,通过一条DOUT线与SPI主机ADC接口


将STM32F429的一个SPI端口(如SPI4)配置为从机,以DCLK速率接收MOSI上的数据位。


将AD7768 连接到STM32F429外部中断输入引脚EXTI0和NSS (SPI )引脚。 的上升沿将触发EXTI0处理例程,以使SPI从机能够在变为低电平之后的第一个DCLK下降沿开始接收数据位。时序设计在这里至关重要。


接收到通道0至通道7的所有数据后,应禁用SPI以防止读取额外的无效数据,因为会使SPI从机变为低电平,并且DCLK保持切换。

 

图6.时序解决方案中的AD7768数据位读取

 

MCU固件开发注意事项


当软件处于中断模式时,DCLK运行速率可以高达4 MHz,实现8 kSPS的ODR。软件应进入中断处理程序,在一个半DCLK周期(375 ns)内启动SPI。为使软件更轻松地进入中断例程,MCU可以在DCLK上升沿读取数据,从而提供额外的半个DCLK周期时间。但是,t5 DCLK上升到DOUTx无效最小值为–3 ns(IOVDD = 1.8 V时为–4 ns),因此DOUTx上的传播延迟(>|t5| + MCU保持时间)应通过PCB布线或缓冲增加。

 

图7.配置SPI4外设

 

解决方案2:MCU SPI作为从机,通过两条DOUT线与SPI主机ADC接口


在第一种解决方案中,仅使用DOUT0来输出所有8通道数据。因此,数据读取将ADC吞吐速率限制为8 kSPS。如图1所示,在DOUT0上输出通道0至通道3,在DOUT1上输出通道4至通道7,可以减少数据传输时间。串行线的连接如图7所示。通过这种改进,在DCLK为4 MHz时,ODR可以轻松达到16 kSPS。

 

图8.AD7768通过DOUT0和DOUT1将数据输出到STM32F429 MCU SPI连接


固件可以不使用中断模式,而使用轮询模式,以减少从上升沿触发到使能SPI接收数据的时间延迟。这样可以在DCLK为8 MHz时实现32 kSPS的ODR。

 

解决方案3:MCU SPI作为从机,通过DMA与SPI主机ADC接口


直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。DMA可以迅速移动数据而不需要任何MCU操作,这样可以腾出MCU资源用于执行其他操作。下面是MCU SPI用作从机通过DMA接收数据的设计说明。

 

解决方案4:MCU SPI作为主机和从机,通过两条DOUT线读取数据


高吞吐量或多通道精密ADC为SPI端口提供两条、四条甚至八条SDO线,以在串行模式下更快地读取代码。对于具有两个或更多个SPI端口的微控制器,这些SPI端口可以同时运行以加快代码的读取。

 

图9.EXTI0处于轮询模式,SPI4和SPI5通过DOUT0和DOUT1接收AD7768数据位。

 

图10.EXTI0处于轮询模式,SPI4 DMA通过DOUT0接收AD7768数据位。


在以下使用案例中,32F429IDISCOVERY使用SPI4作为SPI主机,SPI5作为SPI从机,通过DOUTA和DOUTB接收EVAL-AD7606B-FMCZ数据,如图8所示。

 

AD7606B是一款16位同步采样模数转换数据采集系统(DAS),具有八个通道,每个通道均包含模拟输入箝位保护、可编程增益放大器(PGA)、低通滤波器和16位逐次逼近寄存器(SAR)型ADC。AD7606B还内置灵活的数字滤波器、低漂移2.5 V精密基准电压源和基准电压缓冲器,可驱动ADC及灵活的并行和串行接口。AD7606B采用5 V单电源供电,支持±10 V、±5 V和±2.5 V真双极性输入范围,所有通道均能以800 kSPS的吞吐速率采样。

 

图11.在主从模式下使用MCU SPI通过DOUTA和DOUTB接收数据

 

图12.SPI4配置为主机,SPI5配置为从机。

 

图13显示了AD7606B以240 kSPS运行时BUSY、SCLK、DOUTA和DOUB的数字接口截图。

 

图13.AD7606B BUSY、SCLK以及DOUTA和DOUTB上的数据的示波器截图

 

结论


本文讨论了使用微控制器SPI访问具有非标准SPI接口的ADC的方法。这些方法可以直接使用,也可以稍加调整即可控制ADC SPI;其可作为SPI主机使用,也可以与多条DOUT线配合使用以提高吞吐速率。



关键字:MCU  SPI 引用地址:技术文章—操纵MCU SPI接口以访问非标准SPI ADC

上一篇:技术文章—精密数据采集信号链的噪声分析
下一篇:兼具优化功率搜索和多种安全特性的100mA无线充电解决方案

推荐阅读最新更新时间:2024-10-25 14:25

STM32单片机SPI的使用原理解析
1、SPI使用原理 以数据交换实现数据传输,第一个跳变沿实现数据输出,第二个跳变沿实现采样。如下图 2、GPIO的配置 GPIO_InitTypeDef GPIO_InitStructure; //配置SPI2管脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_ Pi n = GPIO_Pin_13 |GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStru
[单片机]
STM32<font color='red'>单片机</font><font color='red'>SPI</font>的使用原理解析
STM32单片机一般有几种调试方式(stm32与TDC SPI通信调试)
STM32单片机介绍 STM32单片机是由意法半导体(STMicroelectronics)公司开发和生产的一系列32位ARM Cortex-M内核的微控制器。它们广泛应用于工业自动化、消费电子、通信、汽车电子和物联网等领域。 STM32单片机系列涵盖了多个系列和型号,以满足不同应用需求和性能要求。常见的系列包括: 1. STM32F系列:基于ARM Cortex-M4或Cortex-M7内核,具有强大的处理能力和丰富的外设资源,适用于高性能应用。 2. STM32L系列:基于ARM Cortex-M0+或Cortex-M3内核,具有低功耗特性和优异的能效表现,适用于电池供电和低功耗应用。 3. STM32H系列:基于ARM
[单片机]
STM32<font color='red'>单片机</font>一般有几种调试方式(stm32与TDC <font color='red'>SPI</font>通信调试)
单片机外扩专用SPI SRAM存储芯片
ST内核M3的32位MCU产品STM32F1xxx这一系列的MCU内置SRAM资源非常有限,在应用中如果遇到数据需要扩容的情况下,需要外扩SRAM器件,一个并行接口的SRAM或SDRAM需要30~40个封装管脚,在一些方案中MCU可用于外扩SRAM的管脚数量有限,如果考虑SPI SRAM(串行SRAM)是一种不错的解决方案。 如果是从降低成本的方向考虑,这里介绍一种伪静态的SPI SRAM,只需要SPI接口或者QPI接口,就可以简简单单实现单线、4线和8线的方式操作SRAM。这种产品的速度快20MHz~200MHz,功耗也低,更重要的是在价格上有也较传6晶体的SRAM优势很多,同时产品的容量范围广16Mb,32Mb,
[单片机]
如何采用STM32单片机实现SPI的驱动
前言:每学一个新知识,都会出现很多出错的情况,百度也查不出来,耗费很多时间,主要是不理解底层原理,没太多时间去理解,催得紧。SPI嘛,是人都知道干嘛用的,我一时半会也不知道怎么表达,百度最不缺的就是定义。缺的是实现过程,本少爷花了几十个积分搞了n多个实例,终于总结了要成功实现SPI要哪些奇葩的步骤。 正文: ---------------------------------------------配置SPI1的时钟------------------------------------ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); //SPI1初始化 //RCC_APB
[单片机]
如何采用STM32<font color='red'>单片机</font>实现<font color='red'>SPI</font>的驱动
STM32单片机SPI主从通信解析
今天讲解“STM32F103 SPI主从通信”,原本计划将这部分内容定在后面(第二阶段)来讲解,满足一位网友的问题“关于两块MCU的SPI通讯”,所以今天特地提前讲解了。 今天提供并讲解的软件工程,基于昨天的软件工程“SPI读写Flash”修改而来。 测试原理及现象:主机间隔500ms发送10个字符(0-9),从机开启SPI中断接收数据,接收满10字节数据,置标志位gSPI_FlagOver有效,并变化LED,通过串口打印接收到的数据。 关于“STM32F103SPI通信从机部分”我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。 一、RCC时钟配置 该函数位于在bs
[单片机]
STM32<font color='red'>单片机</font><font color='red'>SPI</font>主从通信解析
STM32单片机SPI总线与FPGA的通信设计
最近在研究SPI总线,至于协议和硬件描述就不多说了 四线包括时钟、片选、接收、发送 初始化SP SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //16bit宽度 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2E
[单片机]
用于8051兼容微控制器的高效位敲击SPI端口
快速 SPI 端口可通过 GPIO 引脚进行位冲击,并作为具有 SPI 端口的 8051 兼容微控制器的低成本替代方案。本应用笔记所示的代码利用8051特有的特性,使用最少的额外代码创建快速SPI端口。 虽然可以使用带有SPI端口的8051兼容微控制器,但具有SPI端口通过GPIO引脚位敲击的低成本器件通常足以满足许多应用的需求。此处显示的代码利用特定于 8051 内核的功能,以最小的工作量创建快速 SPI 端口。#define语句中的 CPHA、CPOL 和CS_TOGGLE_BETWEEN_BYTES常量初始化宏,这些宏根据正在实现的 SPI 端口类型定制代码。 预处理器在编译时而不是运行时执行此代码定制,从而节省了宝贵的
[单片机]
用于8051兼容<font color='red'>微控制器</font>的高效位敲击<font color='red'>SPI</font>端口
STM32单片机SPI极性和相位的设置方法
SPI分主设备和从设备,两者通过SPI协议通讯。而设置SPI的模式,是从设备的模式,决定了主设备的模式。所以要先去搞懂从设备的SPI是何种模式,然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。对于从设备的SPI是什么模式,有两种:(1)固定的,有SPI从设备硬件决定的SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算出CPHA是0还是1了。举例1:CC2500-Low
[单片机]
STM32<font color='red'>单片机</font><font color='red'>SPI</font>极性和相位的设置方法
小广播
最新模拟电子文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved