这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » SPI几种工作模式简介

共6条 1/1 1 跳转至

SPI几种工作模式简介

菜鸟
2021-06-26 14:03:18     打赏

SPI几种工作模式简介

SPI作为一个通用MCU均支持的基本接口,被广泛应用于各类带通讯的应用场景。其涵盖多种配置方式以满足不同的应用需求。本文以AT32F403A_407_Firmware_Library_V2.x.x版本库为基础,简单介绍各个模式的一个基本特点

依据工作模式特征划分,SPI通常可以工作在双线单向全双工,单线单向只收,单线双向半双工发送和单线双向半双工接收四种模式中的一种。

①双线单向全双工模式

【基础配置】

  SPI_CTRL1寄存器的SLBEN和ORA清零

  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;

【IO使用】

  此模式用到的IO最多,SCK_Pin、MISO_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时)

【模式要点】

  此模式下的SPI将同步进行数据的收发,通讯起始是可控的,通过向主机发送数据缓冲器写数据来产生。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待RDBF置位,TDBE置位,并等待BF变为0


②单线单向只收模式模式

【基础配置】

  SPI_CTRL1寄存器的SLBEN清零并将ORA置位

  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_SIMPLEX_RX;

【IO使用】

  作为主机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO

  作为从机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO

【模式要点】

  作为主机时,通讯将在SPI使能后立即开始,且直到SPI被关闭且关闭时刻帧数据接收完成时才会停止。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待倒数第二个RDBF置起,随后等待一个SPI_SCK周期立即关闭SPI,最后再等待RDBF置位并读出最后一笔通讯数据

  作为从机时,通讯是在SPI使能后且SCK线上出现有效边沿时(即CS线为低时的SCK线边沿)开始,且只要SCK线上无时钟边沿,通讯就会暂停。因此此模式下若想关闭SPI或进入低功耗模式的话,仅需等待BF变为0即可


③单线双向半双工发送模式

【基础配置】

  SPI_CTRL1寄存器的SLBEN和SLBTD置位

  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;

【IO使用】

  作为主机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO

  作为从机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO

【模式要点】

  不管是作为主机还是从机,通讯起始均是可控的(作主机时通过向发送数据缓冲器写数据来产生、作从机时SPI使能后且SCK线上出现有效边沿时),因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待TDBE置位,且BF变为0


④单线双向半双工接收模式

【基础配置】

  SPI_CTRL1寄存器的SLBEN置位且SLBTD清零

  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_RX;

【IO使用】

  作为主机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO

  作为从机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO

【模式要点】

  作为主机时,通讯将在SPI使能后立即开始,且直到SPI被关闭且关闭时刻帧数据接收完成时才会停止。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待倒数第二个RDBF置起,随后等待一个SPI_SCK周期立即关闭SPI,并再等待最后一个RDBF置位读出最后一笔通讯数据

  作为从机时,通讯是在SPI使能后且SCK线上出现有效边沿时(即CS线为低时的SCK线边沿)开始,且只要SCK线上无时钟边沿,通讯就会暂停。因此此模式下若想关闭SPI或进入低功耗模式的话,仅需等待BF变为0即可





关键词: AT32     SPI     全双工     半双工    

工程师
2021-06-26 22:51:38     打赏
2楼

简介做的非常不错


专家
2021-06-27 00:02:26     打赏
3楼

感谢楼主的分享,很实用了。


工程师
2021-06-27 00:11:06     打赏
4楼

感谢楼主的分享,很实用了。


专家
2021-06-27 10:12:50     打赏
5楼

谢谢楼主提供好的资料,学习了。


院士
2021-06-28 13:11:46     打赏
6楼

谢谢楼主分享。学习并收藏了。


共6条 1/1 1 跳转至

回复

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