SPI中NSS/CS使用和SPI常见问题

前言

SPI是常用的通信手段之一,经常使用,但也经常踩坑;网上资料很多,但对于CS/NSS使用的讲解比较少,正好最近使用SPI也遇到了一些问题,记录一下。

SPI中NSS作用和用法

简单来说,NSS和CS是一个东西,主要用于片选从机的。SPI控制器上连接的内部NSS引脚。
NSS硬件模式和软件模式:可以通过寄存器配置,选择将内部NSS引脚连接到SSI寄存器,使用寄存器控制NSS电平,也可以选择内部NSS引脚和外部真正的NSS GPIO相连,由外部引脚电平来控制NSS。

我画了一个关系图,可以清晰的看明白NSS的控制流程:
在这里插入图片描述
NSS软件和硬件模式,实际是由SPI的相关控制寄存器决定的,这里就简单说下,详细的SPI寄存器可以查阅所使用芯片的芯片手册。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图中就是cortex-m3中的SPI控制寄存器,其他的芯片也基本是一样的。

SPI使用时常见问题

1.接线错误,记住主机的MOSI和从机的MOSI相连,不是交叉相连!!!!!!!
MISO也是一样;不要接反了,我以前也曾接反过,导致一直通信不上。

2.主机和从机,时钟极性(CPOL)和采样方式(CPHA)以及数据发送顺序(高位先行或低位先行)要设置一样,要不然多半会导致数据不一致。

3.对于NSS硬件模式的从机;主机要确保在发送时钟信号前,控制从机的NSS引脚要拉低,通信结束后等待Busy后再拉高NSS!!!!

4.这就意味着主机,主机在SPI初始化时不要立刻使能,要在NSS拉低后,主机SPI再使能,否则,可能会导致从机接收的时钟脉冲少一个,导致从机接收的数据全部为2倍。

5.很多时候,主机的NSS引脚是不用的,直接使用一个任意的GPIO普通引脚片选从机,方便灵活;此时NSS就直接设为软件模式,主机对NSS不做关心。

其他的有机会再补充,本文对SPI协议逻辑没有详细讲解,网上资料很多,就不再重复讲述了,如果需要了解SPI协议逻辑可以参考:SPI原理讲解.
如果有疏漏请指出,共同交流完善

版权声明:本文为CSDN博主「嵌入式小武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41890114/article/details/121594327

生成海报
点赞 0

嵌入式小武

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Keil MDK5 STM32F103C8T6开发环境配置

Windows下使用Keil MDK5进行stm32f103c8t6的开发和编译, 配合ST-LINK工具进行烧录, 使用原生(非HAL)的方式. 所需硬件 stm32f103系列开发板 stm32f103c8t6核心板 参数 ARM 32-b

基于STM32的室内环境监测系统

设计简介: 本设计是基于单片机的室内环境监测器,主要实现以下功能: 可实现LCD1602显示环境数据实时监测一氧化碳、甲烷、烟雾值空气质量大于各自限值报警,并通过TTS报警 标签&#x

Arduino与Proteus仿真实例-DHT11温度湿度传感器驱动仿真

DHT11温度湿度传感器驱动仿真 DHT11 是一款基本的超低成本数字温度和湿度传感器。 它使用电容式湿度传感器和热敏电阻来测量周围的空气,并在数据引脚上吐出数字信号(不需要模拟输入引脚)。 它使用起来相当简单,但需要仔细定时来抓取数据。