这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » SPI的CS线几种配置说明

共6条 1/1 1 跳转至

SPI的CS线几种配置说明

菜鸟
2021-06-10 18:25:20     打赏

SPI的CS线几种配置说明

SPI通讯中,CS线通常用于从设备的选择,其存在多种配置组合,本文以AT32F403A_407_Firmware_Library_V2.x.x版本库为基础介绍各种配置下的CS状态

1)硬件CS输出(SPI做主设备)

关键配置如下

  spi_init_struct.master_slave_mode = SPI_MODE_MASTER;

  spi_init_struct.cs_mode_selection = SPI_CS_HARDWARE_MODE;///<set hardware cs

  spi_init(SPIx, &spi_init_struct);

  spi_hardware_cs_output_enable(SPIx, TRUE);///<enable the master cs output

此时SPIx将被配置为主设备,其CS pin脚有效并配置为CS输出控制,此时只要SPI一使能,其将恒定的在CS线上输出低电平

个人心得:此配置通常用于单机通讯,且从设备对CS信号不做特殊要求时

2)硬件CS输入(SPI做主设备)

关键配置如下

  spi_init_struct.master_slave_mode = SPI_MODE_MASTER;

  spi_init_struct.cs_mode_selection = SPI_CS_HARDWARE_MODE;///<set hardware cs

  spi_init(SPIx, &spi_init_struct);

  spi_hardware_cs_output_enable(SPIx, FALSE);///<disable the master cs output

此时SPIx将被配置为主设备,其CS pin脚有效并配置为CS输入检测,此时只要SPI一使能,其将不停的侦测CS pin脚上的电平状态,只要检测到低电平,会立即产生模式错误并关闭SPI及清除主模式配置,若开启对应中断的话,会响应错误中断。

个人心得:此配置下CS pin脚上一定要由外部控制为高电平时才可正常通信。此特性通常可被用于一从多主通讯场景的主设备配置。

3)软件CS(SPI做主设备)

关键配置如下

  spi_init_struct.master_slave_mode = SPI_MODE_MASTER;

  spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;///<set software cs

  spi_init(SPIx, &spi_init_struct);

此时SPIx将被配置为主设备,其CS pin脚无效,既不会输出CS信号到pin脚上又不会侦测pin脚上的电平。实际将会由软件来实现内部CS状态拉高(这一步AT库在spi_init函数内已完成),因此通常不需用户自己去控制内部CS状态。

个人心得:

如果用户不使用AT库,而自己通过操作寄存器的方式来初始化SPI的话,在配置主设备软件CS时,一定记得要设定内部CS状态为高(即SPI_CTRL1寄存器的第8bit写一),不然会在SPI使能时产生模式错误。此特性通常可被用于一主多从通讯场景的主设备配置(其中实际上主设备将选用多个普通IO口去控制从设备的CS pin脚)。

4)硬件CS输入(SPI做从设备)

关键配置如下

  spi_init_struct.master_slave_mode = SPI_MODE_SLAVE;

  spi_init_struct.cs_mode_selection = SPI_CS_HARDWARE_MODE;///<set hardware cs

  spi_init(SPIx, &spi_init_struct);

此时SPIx将被配置为从设备,其CS pin脚有效并配置为CS输入侦测,此时只要SPI一使能,其将不停的侦测CS pin脚上的电平状态来筛选SCK线上的CLK(CS pin脚为低时,SCK线上的边沿有效,反之无效)

个人心得:此模式下从设备通过监测CS pin脚上的电平来决定是否参与通信,此特性通常可被用于一主多从通讯场景的从设备配置。

5)软件CS(SPI做从设备)

关键配置如下

  spi_init_struct.master_slave_mode = SPI_MODE_SLAVE;

  spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;///<set software cs

  spi_init(SPIx, &spi_init_struct);

此时SPIx将被配置为从设备,其CS pin脚无效,既不会输出CS信号到pin脚上又不会侦测pin脚上的电平。实际将会由软件将内部CS状态拉低(这一步AT库在spi_init函数内已完成)。如果应用需要实时控制从设备是否参与通信,可通过调用如下其中一条命令来达到效果

spi_software_cs_internal_level_set(SPIx,SPI_SWCS_INTERNAL_LEVEL_HIGHT);///<prohibit communication

spi_software_cs_internal_level_set(SPIx,SPI_SWCS_INTERNAL_LEVEL_LOW);///<permit communication

个人心得:此模式下通常可被用于一从多主通讯场景的从设备配置(其中实际上从设备将选用多个普通IO口去控制主设备的CS pin脚)。





关键词: SPI     CS     单片机    

工程师
2021-06-10 22:17:25     打赏
2楼

软件NSS 我觉得比较灵活!


工程师
2021-06-10 22:18:11     打赏
3楼

说明做的非常到位


工程师
2021-06-10 22:23:11     打赏
4楼

这是STM32 的用法吧? 


工程师
2021-06-10 22:29:07     打赏
5楼

以前听说STM32的SPI的片选控制有BUG,不知道现在改进好了?


工程师
2021-06-10 23:46:09     打赏
6楼

比较详细的说明


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]