STM32 SPI NSS 功能的灵活应用案例

2024-04-15 15:36

本文主要是介绍STM32 SPI NSS 功能的灵活应用案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前言

某客户开发一款高精度工业测量仪器,打算使用 STM32H7+外置高精度 ADC 采样的分离方案来实现。客户选取了一款所属行业内比较通用的 ADC 采样芯片。

在读取该 ADC芯片手册后,客户发现该款 ADC 采样芯片使用 MCU 标准 SPI 与之通信存在问题,手册里面也推荐使用 DSP/FPGA 的来实现,客户一下就犯难了。为了降低成本和开发周期,客户想使用 MCU 来替代 DSP/FPGA 与 ADC 采样芯片的高速通信。

2. 现场调研与问题分析

根据客户提供的信号采集板上使用的 ADC 数据手册及现场反馈:

  1. 该 ADC 转换芯片 DataSheet 提供的通信接口参考设计如下:
    在这里插入图片描述
  2. 该 ADC 采样芯片工作于 Master 模式,DSP/FPGA 工作于 Slave 模式,其通信时序如下图所示。在 DRDY 信号的下降沿通过 DOUT0~DOUT7 引脚将数据输出到 DSP/FPGA。

客户使用STM32H7 的 SPI Slave 模式与该 IC 进行通信,采用 Software NSS 工作模式来接收 Master 的数据。
在这里插入图片描述
在连续采样模式下(Master 不间断采样),STM32H7 接收数据正常,其通信时序如下图所示。
在这里插入图片描述
但是,当 Master 停止采样时,DCLK 仍然会一直工作发出工作时钟。此时,STM32H7 的 SPI 做Slave 在 Stop 期间仍然会收到数据(无效干扰数据)。此数据会造成 Slave 端接收数据失序,
如下图所示。
在这里插入图片描述

3. 问题分析与解决

显然使用标准 SPI 与该芯片进行通信是行不通的,再次聚焦到客户 DRDY 信号并未使用和充分利用,能否利用 DRDY 信号来滤除 Stop 期间的干扰信号呢?

笔者也再次查阅 RM 后发现 STM32H7 的 SPI NSS 脉冲模式(RM 中称为 TI 模式)。在本文中统称为 NSS 脉冲模式,STM32H7 的 NSS 脉冲模式其核心要点如下:

  1. 通过设置 SPI_CFG2 寄存器的 SP[2:0]位来使能 SPI 工作在 NSS 脉冲模式,当 SPI 工作于脉冲模式时,SCK 和 SS 引脚的信号极性、相位、字节序是固定的,不需要配置 CPOL, CPHA, LSBFRST, SSOM, SSOE, SSIOP 和 SSM 相关寄存器位。

  2. SPI NSS 脉冲模式通信时序如下图,与标准 SPI 通信相比差异如下:
    启动数据传输前,NSS 会被拉高并维持一个时钟周期(NSS 脉冲)。
    数据帧的传输过程起止于 2 个 NSS 脉冲之间(前一帧 LSB 开始拉高 SS,前一帧 LSB 结束后拉低 NSS 开始下一帧传输)。

在时钟 SCK 的上升沿开始发送数据,在时钟 SCK 的下降沿进行采样和接收。

所以,STM32H7 的 SPI 的 NSS 脉冲模式时序刚好与该 ADC 芯片是匹配的。
在这里插入图片描述
那么我们将客户的接法进行改进,并配置 STM32H7 的 SPI 工作于 NSS 脉冲模式,经过客户
反复验证工作正常。
在这里插入图片描述

参考文献

在这里插入图片描述


本文档参考ST官方的《【应用笔记】LAT1398+STM32H7+SPI+NSS功能的灵活应用案例》文档。
参考下载地址:https://download.csdn.net/download/u014319604/89139845

这篇关于STM32 SPI NSS 功能的灵活应用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906217

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要