0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

analog_devices 来源:未知 2023-12-23 12:25 次阅读

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

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

wKgaomWGYk2AHJwHAACJBVac8Q4874.jpg

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

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

wKgaomWGYk2AG25hAADOjXXLSzI241.png

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

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

wKgaomWGYk2AVw8YAAFXra3zBOs417.jpg

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

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

wKgaomWGYk6AA0e0AADK23wAW18972.png

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

本文将介绍操纵标准微控制器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线读取数据。

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.8kHz的最大输入带宽下实现了108dB动态范围,具备±2ppm INL、±50µV偏置误差和±30ppm增益误差的典型性能。AD7768/AD7768-4用户可在输入带宽、输出数据速率和功耗之间进行权衡,并选择三种功耗模式之一以优化噪声目标和功耗。AD7768/AD7768-4的灵活性使其 成为适合低功耗直流和高性能交流测量模块的可重复使用平台。遗憾的是,AD7768的串行接口不是典型SPI时序模式,而且AD7768充当串行接口主机。一般而言,用户必须使用FPGA/CPLD作为其控制器。例如,使用32F429IDISCOVERY和AD7768评估板。变通SPI线的连接如图5所示。在这种设置下,AD7768的所有八通道数据仅通过DOUT0输出。

wKgaomWGYk6AM3TxAAEapZqH4Js813.png

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

需要解决的问题:

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

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

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

wKgaomWGYk6AGJJsAADmnNozpBg968.png

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

解决方案1:MCU SPI作为从机
通过一条DOUT线与SPI主机ADC接口
  • 将STM32F429的一个SPI端口(如SPI4)配置为从机,以DCLK速率接收MOSI上的数据位。

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

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

MCU固件开发注意事项

wKgaomWGYk6AaXWaAAIlqiOhk2o251.jpg

图7. 配置SPI4外设。

当软件处于中断模式时,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布线或缓冲增加。

解决方案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。

wKgaomWGYk6AG50JAAFKHAGqrbg103.png

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

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

wKgaomWGYk6AeLO2AAEGDMJhCGU592.jpg

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

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

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

wKgaomWGYk6AdiT3AAEB8TxuoMw186.jpg

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

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

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

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

AD7606B是一款16位同步采样模数转换数据采集系统(DAS),具有八个通道,每个通道均包含模拟输入箝位保护、可编程增益放大器(PGA)、低通滤波器和16位逐次逼近寄存器(SAR)型ADC。

AD7606B还内置灵活的数字滤波器、低漂移2.5V精密基准电压源和基准电压缓冲器,可驱动ADC及灵活的并行和串行接口。AD7606B采用5V单电源供电,支持±10V、±5V和±2.5V真双极性输入范围,所有通道均能以800 kSPS的吞吐速率采样。

wKgaomWGYk6AHi6nAACHAjkff5c552.jpg

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

wKgaomWGYk-AbiUfAAHrQ4tORZg020.jpg

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

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

wKgaomWGYk-ATXFsAAGRjCi5aCA377.jpg

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

wKgaomWGYk-AXDHkAAASTM-su2U017.gif

总结

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

wKgaomWGYk-AfGZTAACKAR9sZ48815.gif    查看往期内容↓↓↓


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

文章出处:【微信公众号:analog_devices】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 亚德诺
    +关注

    关注

    6

    文章

    4680

    浏览量

    16098

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

文章出处:【微信号:analog_devices,微信公众号:analog_devices】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ADS8556使用SPI接口通信时,FS/CS管脚与RANGE管脚通过MCU如何控制?

    ADS8556使用SPI接口通信时,FS/CS管脚与RANGE管脚通过MCU如何控制?
    发表于 02-13 07:00

    纳祥科技NX8615,带SPI接口的独立局域网(CAN)控制器芯片,功能覆盖MCP2515

    NX8615 具有 2 个接收掩码和 6 个接收过滤寄存器,用于过滤掉不需要的消息,从而减少了主机MCU 的负载。NX8615与 MCU的连接是通过工业标准 SPI
    的头像 发表于 02-05 17:29 175次阅读
    纳祥科技NX8615,带<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的独立局域网(CAN)控制器芯片,功能覆盖MCP2515

    DDC112U的数据输出接口能否MCUSPI接口进行连接?

    看了DDC112的Datasheet,关于它的数据的输出,Datasheet好像并未明确说明其数据输出接口(主要是这几个信号:/DXMIT、DCLK、DOUT)是否能够与MCUSPI接口
    发表于 01-23 06:40

    为什么DATACLK的是LVDS电平标准接口呢?

    你好,请问DAC的DACCLKLVPECL电平标准接口,为什么DATACLK的是LVDS电平标准
    发表于 01-21 07:56

    使用MCUSPI模块进行通讯时,DAC80501无法响应MCU输出的指令,怎么解决?

    无法响应MCU输出的指令,示波器看波形上MOSI输出到SDIN的VIL大约在0.5V,大于手册中的0.45V,貌似可能是这个原因,但是不清楚为什么MOSI的低电平那么高,如果MCU确实如此,你们
    发表于 12-02 07:54

    【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(8)SPI 模块介绍

    串行外设接口(Serial Peripheral Interface,缩写为 SPI) 提供了基于SPI 协议的数据发送和接收功能, 可以工作于主机或从机模式。 SPI
    的头像 发表于 08-17 09:36 921次阅读
    【GD32 <b class='flag-5'>MCU</b> 入门教程】GD32 <b class='flag-5'>MCU</b> 常见外设介绍(8)<b class='flag-5'>SPI</b> 模块介绍

    请问如何通过MCU讯号来控制OPA2990S SHDN PIN?

    由于OPA2990S SHDN PIN并非标准的逻辑讯号控制接脚,请问有什么简单的转换电路,可以让MCU讯号控制此SHDN PIN?
    发表于 08-14 08:07

    spi_flash_read接口访问SPI外挂的FLASH,无法返回是怎么回事?

    _EXT3(HSPI), 0x3); SET_PERI_REG_MASK(SPI_USER(HSPI), BIT(5)); 做了以上初始化后,spi_flash_read这个接口
    发表于 07-18 06:40

    ESP32-S3能否直接DMA通过SPI读取ADC数据?

    项目中需从SPI的ADC中读取数据。目前是ADC的DRDY信号触发GPIO中断,在中断中读取SPI数据,这样会占用较多内核时间,无法提高ADC更新速度。能否直接
    发表于 06-06 06:51

    STM32H743 DMA接收固定长度数据后,并未立即进入DMA传输完成中断,为什么?

    743 单工只接收SPI做从接收AD7768非标准SPI口数据时发现,DMA接收固定长度数据后,并未立即进入DMA传输完成中断,而是在SPI的CS拉高后才进入了DMA传输完成中断。从现
    发表于 05-30 08:21

    请问可以FX3作为SPI的Master,通过GPIF II接口实现SPI通信吗?

    GPIF II接口实现SPI通信吗? 2.请问FX3的GPIF II接口输出是什么电平标准呢?TTL or CMOS or 485 or 422? 我的外设是422电平,如果要用FX3
    发表于 05-29 07:46

    STM32L051来设计一款变送器模块,MCUSPI接口接收中断标志位就是不置位,为什么?

    我们现在用STM32L051来设计一款变送器模块。4~20mA 接口MCU通过ADC(SPI接口) 采集传感器输出 的信号。因为我们要求ADC的采样率达到50ksps,因此对
    发表于 05-16 06:48

    STM32H7的Octo-SPI或者Quad-SPI能否支持读取ADC的数据?

    ADC使用的AD7380.2通道4M的同步ADC。 SPI接口需要使用2个数据接收引脚 和一个数据输出引脚。等于是三根数据线。 普通的SPI只有两根线。Quad-SPI看描述说一般用
    发表于 04-01 06:10

    stm32mp157在linux系统下,串口的波特率如何使用非标准波特率?

    请问stm32mp157在linux系统下,串口的波特率如何使用非标准波特率153600。内核或者设备树里需要怎么改动? 麻烦答复一下,最好能给个详细的更改示例,谢谢!
    发表于 03-14 06:21

    询问2.2V的非标准ttl电平转3.3V的cmos电平转换器

    我想实现2.2V的非标准ttl电平转3.3V的cmos电平,请问有什么合适的电平转换器或者是电压比较器推荐吗?
    发表于 03-11 09:30