关于SPI通信失败的一种情况(CRC校验不匹配的问题)

news2024/9/21 2:25:00

问题

该项目中,使用外置的ADC芯片采集电压电流,主控MCU通过SPI与ADC芯片通信。调试时,SPI通信一直失败,与之前成功的项目对比,发现是SPI配置的问题。

void MX_SPI2_Init(void)
{

  /* USER CODE BEGIN SPI2_Init 0 */

  /* USER CODE END SPI2_Init 0 */

  /* USER CODE BEGIN SPI2_Init 1 */

  /* USER CODE END SPI2_Init 1 */
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI2_Init 2 */

  /* USER CODE END SPI2_Init 2 */

}

SPI初始化时,如果配置CRCCalculation 为Enable,通信就会失败;如果配置CRCCalculation 为Disable,通信就成功。

解决

知其然还得知其所以然。
看看具体的配置选项的含义:

void MX_SPI2_Init(void)
{

  /* USER CODE BEGIN SPI2_Init 0 */

  /* USER CODE END SPI2_Init 0 */

  /* USER CODE BEGIN SPI2_Init 1 */

  /* USER CODE END SPI2_Init 1 */
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;	//主机模式,即MCU主导SPI时钟和数据通信
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;	//全双工模式,可以同时发送、接收数据
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;	//数据帧为8位,每次传输8位数据
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;	//时钟极性为低电平,即空闲时,时钟线保持低电平
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;	//时钟相位为第二边沿采样,即数据将在时钟信号的第二个边沿采样
  hspi2.Init.NSS = SPI_NSS_SOFT;	//软件控制片选(即在读写数据时,要自己把CS拉低拉高)
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;	//波特率分频器设置为156,即SPI的工作频率为时钟频率除以256
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;	//高位在前,即数据从最高位开始传输
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;	//禁用TI模式,即SPI外设将工作在Motorola SPI模式下,这是绝大多数SPI设备所使用的模式
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;	//禁用CRC计算
  hspi2.Init.CRCPolynomial = 10;	//CRC校验的多项式,只有CRCCalculation 被启用时,这个值才有效
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI2_Init 2 */

  /* USER CODE END SPI2_Init 2 */

}

CRCCalculation 参数决定了 SPI 是否使用硬件 CRC 校验。
如果启用CRC校验,在通信过程中,SPI硬件会自动计算发送和接受数据的CRC校验值,并在传输的最后两个字节发送CRC值。
那么启用CRC校验时,通信失败的原因,可能是外置的ADC芯片的SPI配置中并没有CRC校验,两者不匹配。

补充

在这里插入图片描述

查看了一下ads1220的手册,从图中可以看到:
(1)CPOL = 0:SCLK 的空闲状态是低电平。
CPHA = 1:数据在时钟信号的第一个上升沿之前被捕获,在第二个上升沿时被发送。
(2)当 CS 低电平时,设备被选中并可以接收和发送数据。
(3)需要监控 DRDY 引脚的状态,以判断何时可以读取新的数据。
并没有提到CRC校验,可以看做是没有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.9计算机视觉设计开发工程师专项培训通知

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实施人才强国战略和创新驱动发展战略,加强全国数字化人才队伍建设,持续推进人工智能从业人员…

fastadmin 文件上传腾讯云

1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…

微信公众号《GIS 数据工程:开始您的 ETL 之旅 》 文章删除及原因

微信公众号多次限制付费文章发布&#xff0c;不太明确其原因。我猜可能是得罪了某位大神&#xff0c;这倒是也不是不可能。我这说话口无遮拦&#xff0c;得罪几个人偶尔搞我一下也是应该的 。当然也可能是部分喜欢白嫖的网友一看我收费就不太高兴&#xff0c;偶尔做点小动作也是…

Windows系统下苹果虚拟机系统的安装

前言 搞苹果软件开发&#xff0c;未必要购买贵的苹果电脑。可以安装黑苹果系统&#xff0c;也可以安装VMware的苹果虚拟机。而且通过我的实践发现&#xff0c;目前苹果虚拟机的效果很不错。 1、参考文档链接 VM虚拟机怎么安装mac os&#xff1f;&#xff08;全教程&#xff0…

【LeetCode】03.无重复字符的最长子串

题目要求 做题链接3.无重复字符的最长子串 解题思路 我们通过参考给出的输入很容易就会从每一个字符开始&#xff0c;看看最长能延续多长。我们通过画图发现一旦一个字符可以延续到另一个字符&#xff0c;那么我们就不需要考虑他中间仍然存在字符重复的问题。因此而后我们发…

部署mongosh教程

1、上传软件包 将软件包上传到/usr/local目录下 部署 2.1 解压 tar zxvf mongosh-2.3.0-linux-x64.tgz 2.2 修改名称 mv mongosh-2.3.0-linux-x64/ mongosh 2.3 将 bin 目录中 mongosh 二进制文件复制到 PATH 变量中列出的目录中 sudo cp mongosh /usr/local/bin/ sudo cp …

第九届“创客中国”生成式人工智能中小企业创新创业大赛招商推介圆满落幕

金秋九月,丹桂飘香。9月2日晚,第九届“创客中国”生成式人工智能(AIGC)中小企业创新创业大赛招商推介会在南昌高新区艾溪湖畔成功举办。南昌市政府副秘书长、办公室党组成员陈吉炜出席并致辞。市中小企业局党组书记、市工信局党组书记、局长骆军出席。南昌高新区党工委委员、管…

16 C语言连接

使用c语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;可以在官网下载 准备工作&#xff1a; 保证mysql服务有效 官网下载合适的mysql connect库 也可以直接安装mysql服务 yum install -y mysql-devel Connector/C使用 库格式如下&#xff1a; [hbMiWiFi-R1…

无线麦克风推荐,无线麦克风十大名牌,领夹麦克风十大品牌推荐

在音频创作的专业舞台上&#xff0c;无线领夹麦克风不仅是声音捕捉的利器&#xff0c;更是创作者表达情感的桥梁。然而&#xff0c;市场上琳琅满目的产品让人眼花缭乱&#xff0c;不少劣质麦克风不仅收音效果大打折扣&#xff0c;还常因信号不稳、噪音干扰而破坏了作品的纯净度…

使用NI CANopen与多个节点进行通信

要使用N CANopen同时与多个节点进行通信&#xff0c;可以利用CANopen Library Toolkit提供的不同VI。以下是详细的步骤说明&#xff1a; 了解VI的功能&#xff1a; NMT Write.vi&#xff1a; 该VI用于向特定节点或所有节点发送网络管理&#xff08;NMT&#xff09;命令。使用No…

Linux之多线程概念

目录 线程概念 线程共享的资源 线程独有的资源 线程优点 线程缺点 在之前&#xff0c;我们已经学习了进程相关的知识点&#xff0c;如进程的基本概念和基本操作&#xff0c;本期我们将开始进行线程的学习&#xff0c;探索线程和进程的关系。 线程概念 在学习线程之前…

镭速助力构筑ICT安全高效的大文件传输

在数字化浪潮的推动下&#xff0c;信息通信技术&#xff08;ICT&#xff09;行业正以惊人的速度发展&#xff0c;随之而来的是跨国、跨区域文件传输需求的激增。然而&#xff0c;传统的大文件传输方法已难以满足当前ICT行业的需求&#xff0c;面临着诸多挑战&#xff0c;如跨国…

多用户B2B2C商城源码+短视频直播+APP+小程序+H5

店铺管理 店铺列表&#xff0c;新店铺审核&#xff0c;地址管理&#xff0c;服务管理&#xff0c;运费模版&#xff0c;品牌管理 订单监管 视频订单&#xff0c;拼团订单&#xff0c;评论管理&#xff0c;退款管理 装修商城 模版管理&#xff0c;页面管理&#xff0c;全局…

太速科技-1路万兆光纤SFP+和1路千兆网络 FMC子卡模块

1路万兆光纤SFP和1路千兆网络 FMC子卡模块 一、概述 该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计&#xff0c;提供了1路万兆光纤SFP和1路千兆网络接口。可搭配我公司开发的FPGA载卡使用。载卡可参考&#xff1a;ID204 SFP&#xff08;10 Gigabit Small…

涨幅超过了90%,心动网络股价成V字后,TapTap找到流量源了吗?

心动公司发布了截至2024年6月30日止六个月的中期业绩。 在2024年上半年&#xff08;24H1&#xff09;&#xff0c;公司实现总营收22.21亿元&#xff0c;较去年同期增长了26.7%。归属于母公司的净利润达到2.05亿元&#xff0c;同比激增127.4%。经调整后&#xff0c;归属于母公司…

Linux下使用crontab配置定时任务

文章目录 Linux使用crontab安装crontab启动crontab查看定时任务创建定时任务配置案例配置语法位置含义符号含义 注意 取消定时任务 Linux使用crontab crontab为Linux下的计划任务程序&#xff0c;对应的服务为crond。crond是一个守护进程&#xff0c;每分钟会定期检查是否有要…

OZON秋季爆款新品推荐,OZON秋季爆款

Top1 吸顶灯 Светильник влагозащищенный 15W IP65 6500К (155х37) круг светодиодный настенно-потолочный герметичный для использования в сухих а так-же вла…

自闭症儿童的语言障碍:理解、接纳与干预

自闭症&#xff0c;这个在现代社会中逐渐受到关注的神经发育障碍&#xff0c;给许多家庭带来了挑战与希望并存的旅程。其中&#xff0c;自闭症儿童的语言障碍是尤为显著且复杂的问题之一。 自闭症儿童的语言障碍表现为多种形式&#xff0c;包括语言发育迟缓、语言形式或内容异常…

如何修复软件中的BUG

笔者上一篇博文《如何开发出一款优秀的软件》主要讲了如何开发一款优秀的软件及相应的必要条件。但对一个已上线&#xff0c;已经成型的产品&#xff0c;该如何解决存在的bug呢&#xff1f;这是本文要阐述的内容。 在这里&#xff0c;首先说一下bug的种类及bug严重程度分类&…

echarts图表标题,层级,view表格,机型适配

1.主标题和副标题在同一行上 在副标题当中设置itemGap:0 title: [{text: ,left: left,textStyle: {fontSize: adjustSize(0.7),fontWeight: 400,color:#333,}},{subtext: ,left: right,itemGap: 0, subtextStyle: { //设置字体样fontSize: adjustSize(0.7),fontFamily: sans-s…