stm32 spi nss-一篇文章带你了解
<p class="artical_littlestyle1">1.概述</p><p style="text-indent: 2em;">目前网络上使用stm32 spi的nss,基本上都使用的是nss的软件管理模式。对于nss的硬件管理模式,程序的配置以及对nss的软件管理模式与硬件管理模式的说明,真的少之又少。这可能跟stm32官方文档对nss的描述不清也有很大关系吧,下面就带大家理解理解nss,当然了这篇文章是笔者阅读了stm32 spi官方文档再结合网友的一些文章,最终以自己个人对nss理解来编写的,如果有错误之处,还请指正。<br/></p><p class="artical_littlestyle2">2.nss的管理模式</p><p style="text-indent: 2em;">nss的管理模式分为:硬件管理和软件管理。nss的管理模式由SSM决定。<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">nss其实分为外部引脚和内部引脚的。外部nss引脚就是芯片上肉眼可见的与GPIO复用的引脚;内部nss引脚就是stm32芯片里集成的spi模块引脚,肉眼不可见。换句话说,真正与spi通信控制器连接的是内部nss引脚,外部nss引脚不能直接连到芯片内部的spi模块,而是先连接内部nss引脚,通过内部nss引脚作用spi模块。</span><br/></p><p class="artical_littlestyle3">3.nss的管理模式配置</p><p style="text-indent: 2em;">SSM在SPI_CR1控制器里,默认为0。<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">SSM可以控制内部nss引脚与SSI(一个寄存器,软件模式)相连,还是与外部nss引脚(真正的STM32引脚,硬件模式)相连。真正起作用的是内部nss引脚(内部nss引脚才真正连接到SPI通信控制器上)。</span><br/>当SSM=0:说明使用硬件管理模式,内部nss引脚与外部nss引脚相连,忽视SSI位,对SPI_CR1的SSI位的写操作无效;<br/>当SSM=1:说明使用软件管理模式,内部nss引脚与SSI相连,忽视外部nss引脚,我们可以把外部nss引脚当做普通IO口;<br/></p><p class="artical_littlestyle4">4.spi从模式配置(MSTR=0)</p><p style="text-indent: 0em;">(1).nss硬件模式(SSM=0)<br/></p><p style="text-indent: 2em;">当外部nss引脚为低电平时,内部nss也为低电平,相当于片选该从器件,此时spi可以传输数据。外部nss引脚需要配置为复用功能。<br/>(2).nss软件模式(SSM=1)<br/></p><p style="text-indent: 2em;">SSM=1并且SSI=0,STM32芯片让内部nss引脚为低电平,相当于片选该从器件,此时spi可以传送数据。<br/>外部nss引脚被释放,可做普通IO作为其他用途使用。<br/></p><p class="artical_littlestyle1">5.spi主模式配置(MSTR=1)</p><p style="text-indent: 0em;">(1).nss硬件模式(SSM=0)<br/></p><p style="text-indent: 2em;">在spi主模式下,nss硬件模式又分为输入模式和输出模式,由SSOE位决定。<br/></p><p style="text-indent: 2em;">a.输入模式(SSOE=0):在外部nss引脚为高电平,内部nss引脚也为高电平,此时才能进行数据传输。如果要使能从设备,还需要一个GPIO引脚。<br/></p><p style="text-indent: 2em;">在此情况下,外部nss要是被接低电平,则会进入主模式故障,MSTR会清零,由主模式进入从模式。<br/></p><p style="text-indent: 2em;">外部nss引脚需要配置为复用功能,并且外部nss引脚必须接入一个高电平,它才能维持主模式状态。stm32官方手册spi章节有说明,也就一句话,如果你不注意,可能就无法发现,如下图:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2020.11.03/093217253250274.png" onclick="preview_image('/uploads/AilsonJack/2020.11.03/093217253250274.png')"/></p><p style="text-indent: 2em;">b.输出模式(SSOE=1):当使能spi模块时,外部nss引脚会被芯片自动输出低电平,使能从设备,进行数据传输,不需要额外的GPIO引脚就能片选从设备(输出模式时,貌似不需要遵循上图框出来的内容,那段话可能就是针对输入模式写的,输出模式是spi模块控制内部nss引脚,因此也就不必遵循那段话)。<br/></p><p style="text-indent: 2em;">外部NSS引脚需要配置为复用功能,再把此引脚连接到从器件的CS引脚,因此外部NSS引脚就相当于片选引脚了。<br/>(2).nss软件模式(SSM=1)<br/></p><p style="text-indent: 2em;">SSM=1,并且SSI=1,将内部nss引脚设置为高电平,这样随时可以传输数据(这句话遵循上图框出来的内容)。当然多数情况还需要一个GPIO引脚输出低电平,来使能从设备,让从设备可以接收数据。<br/></p><p style="text-indent: 2em;">综上所述,nss引脚就是片选CS引脚是很不负责任的说法。<br/></p>
你可能也喜欢:
暂无评论,要不要来个沙发
发表评论
JLink V9掉固件修复(灯不亮) 3Zephyr笔记2 - 在STM32F429上运行HelloWorld 2计算NandFlash要传入的行地址和列地址 1Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式 0Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式 0Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2) 0
标签云
Linux嵌入式实用技巧ARM内核学习问题集合CC++编程语言阅读笔记汇编Linux内核完全注释Windows驱动开发计算机基础ARM11ARMv7-ASTM32IDESublimeLinux内核学习eMMCMMC子系统Ubuntu操作系统OfficeVMWareAPUEgccRTOS中断漫游世界随笔感悟开发工具软件应用编程VsCodearmccarmclang编译器ZephyrSPIJLink网卡驱动安装各种芯片库函数NFSμCOS内核sambaFlashUnix命令与脚本输入法Linux内核设计与实现gitRIFFWAVJATGFTPar8161安装centos有线上网μCGUI字库工程建立右键菜单网络文件系统Firefox百度NTFS文件系统CodeBlocksCentOS数据结构算法PhotoShop51KeilQTUltraEditscanfglibc宏定义UIDGID优先级娱乐天地SourceInsight磁盘扇区总线I2CPDFBComparePythonI2SFPUMakefileSWDCPUARP软件推荐FileZilla