搜索

[应用相关] SPI的NSS线几种配置说明

[复制链接]
252|6
hoop|  楼主 | 2021-6-10 18:09 | 显示全部楼层 |阅读模式
本帖最后由 hoop 于 2021-6-10 18:11 编辑

SPI的NSS线几种配置说明

SPI通讯中,NSS线通常用于从设备的选择,其存在多种配置组合,本文以AT库为基础介绍各种配置下的NSS状态
1)硬件NSS输出(SPI做主设备)
关键配置如下
  SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_HARD;///<set hardware nss
  SPI_Init(SPIx, &SPI_InitStructure);
  SPI_NSSHardwareOutputEnable(SPIx, ENABLE)///<enable the master nss output
此时SPIx将被配置为主设备,其NSS pin脚有效并配置为NSS输出控制,此时只要SPI一使能,其将恒定的在NSS线上输出低电平
个人心得:此配置通常用于单机通讯,且从设备对NSS信号不做特殊要求时
2)硬件NSS输入(SPI做主设备)
关键配置如下
  SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_HARD;///<set hardware nss
  SPI_Init(SPIx, &SPI_InitStructure);
  SPI_NSSHardwareOutputEnable(SPIx, DISABLE)///<disable the master nss output
此时SPIx将被配置为主设备,其NSS pin脚有效并配置为NSS输入检测,此时只要SPI一使能,其将不停的侦测NSS pin脚上的电平状态,只要检测到低电平,会立即产生模式错误并关闭SPI及清除主模式配置,若开启对应中断的话,会响应错误中断。
个人心得:此配置下NSS pin脚上一定要由外部控制为高电平时才可正常通信。此特性通常可被用于一从多主通讯场景的主设备配置。
3)软件NSS(SPI做主设备)
关键配置如下
  SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_SOFT;///<set software nss
  SPI_Init(SPIx, &SPI_InitStructure);
此时SPIx将被配置为主设备,其NSS pin脚无效,既不会输出NSS信号到pin脚上又不会侦测pin脚上的电平。实际将会由软件来实现内部NSS状态拉高(这一步AT库在SPI_Init函数内已完成),因此通常不需用户自己去控制内部NSS状态。
个人心得:如果用户不使用AT库,而自己通过操作寄存器的方式来初始化SPI的话,在配置主设备软件NSS时,一定记得要设定内部NSS状态为高(即SPI_CTRL1寄存器的第8bit写一),不然会在SPI使能时产生模式错误。此特性通常可被用于一主多从通讯场景的主设备配置(其中实际上主设备将选用多个普通IO口去控制从设备的NSS pin脚)。
4)硬件NSS输入(SPI做从设备)
关键配置如下
  SPI_InitStructure.SPI_Mode = SPI_MODE_SLAVE;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_HARD;///<set hardware nss
  SPI_Init(SPIx, &SPI_InitStructure);
此时SPIx将被配置为从设备,其NSS pin脚有效并配置为NSS输入侦测,此时只要SPI一使能,其将不停的侦测NSS pin脚上的电平状态来筛选SCK线上的CLK(NSS pin脚为低时,SCK线上的边沿有效,反之无效)
个人心得:此模式下从设备通过监测NSS pin脚上的电平来决定是否参与通信,此特性通常可被用于一主多从通讯场景的从设备配置。
5)软件NSS(SPI做从设备)
关键配置如下
  SPI_InitStructure.SPI_Mode = SPI_MODE_SLAVE;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_SOFT;///<set software nss
  SPI_Init(SPIx, &SPI_InitStructure);
此时SPIx将被配置为从设备,其NSS pin脚无效,既不会输出NSS信号到pin脚上又不会侦测pin脚上的电平。实际将会由软件将内部NSS状态拉低(这一步AT库在SPI_Init函数内已完成)。如果应用需要实时控制从设备是否参与通信,可通过调用如下其中一条命令来达到效果
SPI_NSSInternalSoftwareConfig(SPIx, SPI_ISS_SET);///<prohibit communication
SPI_NSSInternalSoftwareConfig(SPIx, SPI_ISS_RESET);///<permit communication
个人心得:此模式下通常可被用于一从多主通讯场景的从设备配置(其中实际上从设备将选用多个普通IO口去控制主设备的NSS pin脚)。

使用特权

评论回复
别看我照片| | 2021-6-10 18:13 | 显示全部楼层
基础知识很重要,学习一下。

使用特权

评论回复
yangxiaor520| | 2021-6-10 20:59 | 显示全部楼层
SPI片选信号一般都是用软控

使用特权

评论回复
跟着楼主学习一下基础的知识,真的特别重要了。哈哈!

使用特权

评论回复
hoop|  楼主 | 2021-6-12 21:36 | 显示全部楼层
yangxiaor520 发表于 2021-6-10 20:59
SPI片选信号一般都是用软控

看应用需求,不过确实软控与一般的单机通讯很搭

使用特权

评论回复
kiwis66| | 2021-6-13 13:17 | 显示全部楼层
用ST的时候,NSS总是IO软件控制,对于硬件NSS一直没搞懂要如何处理。
借AT来试试

使用特权

评论回复
HuangHongLun| | 2021-6-15 08:29 | 显示全部楼层
SPI片选信号一般都是用软控,这样比较灵活一点。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥180.00
  • 2 最美葫芦娃 得到打赏 ¥155.00
  • 3 hk386 得到打赏 ¥75.00
  • 4 火星国务卿 得到打赏 ¥63.00
  • 5 两只袜子 得到打赏 ¥56.00
  • 6 laocuo1142 得到打赏 ¥50.00
  • 7 linghz 得到打赏 ¥45.00
  • 8 gaon2 得到打赏 ¥45.00
  • 9 ezcui 得到打赏 ¥45.00
  • 10 jlc317 得到打赏 ¥40.00
在线客服 快速回复 返回顶部 返回列表