1. 简介

协议文档下载链接:https://download.csdn.net/download/xiewinter/11295918


图1-1给出了SPI架构的概述。 SPI的主要部分是状态,控制和数据寄存器,移位器逻辑,波特率发生器,主/从控制逻辑和端口控制逻辑。

1.1 概述

SPI模块允许MCU和外围设备之间的双工,同步,串行通信。 软件可以轮询SPI状态标志,或者SPI操作可以是中断驱动的。


1.2 特征

SPI包含这些独特的功能:


主模式和从模式

双向模式

从站选择输出

具有CPU中断功能的模式故障错误标志

双缓冲数据寄存器

串行时钟,具有可编程极性和相位

在等待模式下控制SPI操作

1.3 操作模式

SPI在三种模式下运行: 运行(RUN),等待(WAIT )和停止(STOP)


运行模式

这是基本的操作方式。


等待模式

等待模式下的SPI操作是可配置的低功耗模式,由位于SPICR2寄存器中的SPISWAI位控制。在等待模式下,如果SPISWAI位清零,则SPI在运行模式下运行。 如果SPISWAI位置1,则SPI进入功耗保持状态,SPI时钟产生关闭。 如果SPI配置为主站,则任何正在进行的传输将停止,但在CPU进入运行模式后将恢复。 如果SPI配置为从器件,则继续接收和发送一个字节,以便从器件与主器件保持同步。


停止模式

SPI在停止模式下处于非活动状态,以降低功耗。 如果SPI配置为主站,则任何正在进行的传输将停止,但在CPU进入运行模式后将恢复。 如果SPI配置为从器件,则继续接收和发送一个字节,以便从器件与主器件保持同步。


2. 外部信号说明

2.1 概述

本节列出了所有端口的名称和描述,包括可以或可能在芯片外连接的输入和输出。 SPI模块共有4个外部引脚。

2.2 信号详细说明

2.2.1 MOSI

该引脚用于在SPI模块配置为主器件时将数据传输出SPI模块,并在配置为从器件时接收数据。


2.2.2 MISO

该引脚用于在SPI模块配置为从器件时将数据传输出SPI模块,并在配置为主器件时接收数据.


2.2.3 SS

该引脚用于将选择信号从SPI模块输出到另一个外设,当配置为主机时,将其作为数据传输进行,当SPI配置为从机时,它用作接收从机选择信号的输入。


2.2.4 SCK

该引脚用于输出SPI传输数据或接收时钟的时钟。


3. 存储器映射/寄存器定义

本节提供SPI使用的地址空间和寄存器的详细说明。


SPI的存储器映射如下表3-1所示。 为每个寄存器列出的地址是基址和地址偏移的总和。 基址在SoC级定义,地址偏移在模块级定义。 从保留位读取返回零并且写入保留位无效。


image.png

注意:


1.某些位是不可写的。


2.忽略对该寄存器的写入。


3.从该寄存器读取将返回全零。


3.1 寄存器说明

本节包含地址顺序中的寄存器描述。 每个描述包括带有相关图号的标准寄存器图。 寄存器位和字段功能的详细信息遵循寄存器图,按位顺序。


3.1.1 SPI Control Register 1

 SPIE — SPI Interrupt Enable Bit

This bit enables SPI interrupt requests, if SPIF or MODF status flag is set.


1 = SPI 中断使能.


0 = SPI 中断失能.


SPE — SPI System Enable Bit

该位使能SPI系统,并将SPI端口引脚专用于SPI系统功能。 如果SPE清零,SPI被禁止并强制进入空闲状态,SPISR寄存器中的状态位将被复位。


1 = SPI enabled, port pins are dedicated to SPI functions.


0 = SPI disabled (lower power consumption).


SPTIE — SPI Transmit Interrupt Enable

This bit enables SPI interrupt requests, if SPTEF flag is set.


1 = SPTEF interrupt enabled.


0 = SPTEF interrupt disabled.


MSTR — SPI Master/Slave Mode Select Bit(模式选择)

This bit selects, if the SPI operates in master or slave mode. Switching the SPI from master to slave or vice versa forces the SPI system into idle state.


1 = SPI is in Master mode


0 = SPI is in Slave mode


CPOL — SPI Clock Polarity Bit(时钟极性选择)

This bit selects an inverted or non-inverted SPI clock. To transmit data between SPI modules, the SPI modules must have identical CPOL values. In master mode, a change of this bit will abort a transmission in progress and force the SPI system into idle state.


1 = Active-low clocks selected. In idle state SCK is high.


0 = Active-high clocks selected. In idle state SCK is low.


CPHA — SPI Clock Phase Bit(时钟相位选择)

This bit is used to select the SPI clock format. In master mode, a change of this bit will abort a transmission in progress and force the SPI system into idle state.


1 = Sampling of data occurs at even edges (2,4,6,...,16) of the SCK clock


0 = Sampling of data occurs at odd edges (1,3,5,...,15) of the SCK clock


SSOE — Slave Select Output Enable

The SS output feature is enabled only in master mode, if MODFEN is set, by asserting the SSOE as shown in Table 3-2. In master mode, a change of this bit will abort a transmission in progress and force the SPI system into idle state.

LSBFE — LSB-First Enable

该位不影响数据寄存器中MSB和LSB的位置。 数据寄存器的读取和写入始终在第7位具有MSB。在主模式下,更改此位将中止正在进行的传输并强制SPI系统进入空闲状态。


1 = Data is transferred least significant bit first.


0 = Data is transferred most significant bit first.


3.1.2 SPI Control Register 2

MODFEN — Mode Fault Enable Bit(通常不使用,直接硬件管脚控制)

This bit allows the MODF failure being detected. If the SPI is in Master mode and MODFEN is cleared, then the SS port pin is not used by the SPI. In Slave mode, the SS is available only as an input regardless of the value of MODFEN. For an overview on the impact of the MODFEN bit on the SS port pin configuration refer to Table 3-2. In master mode, a change of this bit will abort a transmission in progress and force the SPI system into idle state.


1 = SS port pin with MODF feature


0 = SS port pin is not used by the SPI


BIDIROE — Output enable in the Bidirectional mode of operation(通常单向,不起作用)

This bit controls the MOSI and MISO output buffer of the SPI, when in bidirectional mode of operation (SPC0 is set). In master mode this bit controls the output buffer of the MOSI port, in slave mode it controls the output buffer of the MISO port. In master mode, with SPC0 set, a change of this bit will abort a transmission in progress and force the SPI into idle state.


1 = Output buffer enabled


0 = Output buffer disabled


SPISWAI — SPI Stop in Wait Mode Bit

在等待模式下,该位用于节能。


1 = Stop SPI clock generation when in wait mode


0 = SPI clock operates normally in wait mode


SPC0 — Serial Pin Control Bit 0(通常使用正常模式)

该位使能双向引脚配置,如表3-3所示。 在主模式下,该位的更改将中止正在进行的传输并强制SPI系统进入空闲状态。

 3.1.3 SPI Baud Rate Register

SPPR2–SPPR0 — SPI Baud Rate Preselection Bits

SPR2–SPR0 — SPI Baud Rate Selection Bits

详细波特率配置对照表见手册


 3.1.4 SPI Status Register

SPIF — SPIF Interrupt Flag

接收到的数据字节传输到SPI数据寄存器后,该位置1。 通过读SPISR寄存器(SPIF置1),然后对SPI数据寄存器进行读访问,可以清除该位。


1 = New data copied to SPIDR


0 = Transfer not yet complete


 SPTEF — SPI Transmit Empty Interrupt Flag

如果置位,该位指示发送数据寄存器为空。 要清除该位并将数据放入发送数据寄存器,必须使用SPTEF = 1读取SPISR,然后写入SPIDR。 在不读取SPTEF = 1的情况下对SPI数据寄存器进行任何写操作都会被忽略。


1 = SPI Data register empty


0 = SPI Data register not empty


MODF — Mode Fault Flag

This bit is set if the SS input becomes low while the SPI is configured as a master and mode fault detection is enabled, MODFEN bit of SPICR2 register is set. Refer to MODFEN bit description inSPI Control Register 2. The flag is cleared automatically by a read of the SPI Status Register(with MODF set) followed by a write to the SPI Control Register 1.


1 = Mode fault has occurred.


0 = Mode fault has not occurred.


3.1.5 SPI Data Register

SPI数据寄存器是SPI数据的输入和输出寄存器。 写入该寄存器允许对数据字节进行排队和传输。 对于配置为主设备的SPI,在前一次传输完成后立即发送排队的数据字节。 SPISR寄存器中的SPI发送器空标志SPTEF指示SPI数据寄存器何时准备接受新数据。


当设置SPIF时,SPIDR中的接收数据有效。


如果SPIF清零并且接收到一个字节,则接收的字节从接收移位寄存器传送到SPIDR,并且SPIF置1.


如果SPIF置1且未被服务,并且已接收到第二个字节,则第二个接收字节将作为有效字节保留在接收移位寄存器中,直到另一个传输开始。 SPIDR中的字节不会更改。


如果SPIF置1且有效字节在接收移位寄存器中,并且SPIF在第三次发送开始之前被服务,则接收移位寄存器中的字节被传送到SPIDR并且SPIF保持置1(见图3-6)。


如果SPIF置1且接收移位寄存器中有效字节,并且在第三次发送开始后SPIF服务,则接收移位寄存器中的字节无效并且不会传输到SPIDR中(see Figure 3-7 Reception with SPIF serviced too late)


4. 功能描述

4.1 概述

SPI模块允许MCU和外围设备之间的双工,同步,串行通信。 软件可以轮询SPI状态标志或SPI操作可以是中断驱动的。


 通过设置SPI控制寄存器1中的SPI使能位(SPE)来使能SPI系统。当SPE位置1时,四个相关的SPI端口引脚专用于SPI功能:


• Slave select (SS)


• Serial clock (SCK)


• Master out/slave in (MOSI)


• Master in/slave out (MISO)


 SPI系统的主要元件是SPI数据寄存器。 主器件中的8位数据寄存器和从器件中的8位数据寄存器由MOSI和MISO引脚相连,形成分布式16位寄存器。 当执行数据传输操作时,该16位寄存器通过S时钟从主机串行移位8位,因此在主机和从机之间交换数据。 写入主SPI数据寄存器的数据成为从机的输出数据,传输操作后从主SPI数据寄存器读取的数据是来自从机的输入数据。


读取SPISR,SPTEF = 1,然后写入SPIDR,将数据放入发送数据寄存器。 传输完成且SPIF清零后,接收的数据将移入接收数据寄存器。 该8位数据寄存器用作读取的SPI接收数据寄存器,用作写入的SPI发送数据寄存器。 单个SPI寄存器地址用于从读数据缓冲区读取数据和将数据写入发送数据寄存器。


SPI控制寄存器1(SPICR1)中的时钟相位控制位(CPHA)和时钟极性控制位(CPOL)选择SPI系统使用的四种可能时钟格式之一。 CPOL位简单地选择非反相或反相时钟。 CPHA位用于通过对奇数SCK边沿或偶数SCK边沿上的数据进行采样来适应两种根本不同的协议(参见4.4传输格式)。


SPI可以配置为主机或从机。 当SPI控制寄存器1中的MSTR位置1时,选择主模式,当MSTR位清零时,选择从模式。


4.2 传输格式

在SPI传输期间,数据被同时传输(串行移出)和接收(串行移位)。 串行时钟(SCK)同步两条串行数据线上信息的移位和采样。 从选择线允许选择单个从SPI设备,未选择的从设备不会干扰SPI总线活动。 可选地,在主SPI设备上,从选择线可用于指示多主总线争用。


 4.2.1 时钟相位和极性控制

使用SPI控制寄存器1中的两位,软件选择串行时钟相位和极性的四种组合之一。


CPOL时钟极性控制位指定有效的高或低时钟,并且对传输格式没有显着影响。


CPHA时钟相位控制位选择两种根本不同的传输格式之一。 主SPI设备和通信从设备的时钟相位和极性应相同。 在一些情况下,在传输之间改变相位和极性以允许主设备与具有不同要求的外围从设备通信。


4.2.2 CPHA = 0 传输格式

SCK线上的第一个边沿用于将从器件的第一个数据位计时到主器件,将主器件的第一个数据位计时到从器件。 在某些外设中,只要选择了从机,就会在从机的数据输出引脚上提供从机数据的第一位。 在这种格式中,第一个SCK边沿在SS变低之后发出半个周期。


半个SCK周期后,第二个边沿出现在SCK线上。 发生第二个沿时,先前从串行数据输入引脚锁存的值将移入移位寄存器的LSB或MSB,具体取决于LSBFE位。


在第二个沿之后,SPI主数据的下一位从主机的串行数据输出引脚传输到从机的串行输入引脚。 该过程在SCK线上总共持续16个边缘,数据被锁存在奇数边缘上并在偶数边缘上移位。


数据接收是双缓冲的。 传输期间数据串行移入SPI移位寄存器,并在最后一位移入后传输到并行SPI数据寄存器。


在第16个(最后一个)SCK边缘之后:


先前在主SPI数据寄存器中的数据现在应该在从数据寄存器中,从数据寄存器中的数据应该在主数据寄存器中。


SPI状态寄存器中的SPIF标志置位,表示传输已完成。

4.2.3 CPHA = 1 传输格式

类似CPHA=0

4.3 特殊功能

4.3.1 SS 输出

SS输出功能在传输过程中自动将SS引脚驱动为低电平,以选择外部设备并在空闲期间将其驱动为高电平以取消选择外部设备。 选择SS输出时,SS输出引脚连接到外部器件的SS输入引脚。


通过置位SSOE和MODFEN位,SS输出仅在主模式下在正常SPI操作期间可用,如表3-2所示。


启用SS输出时,模式故障功能被禁用。


4.3.2 双向模式(MOMI或SISO)

当SPI控制寄存器2中的SPC0位置1时,选择双向模式(见表4-1正常模式和双向模式)。 在此模式下,SPI仅使用一个串行数据引脚作为与外部器件的接口。 MSTR位决定使用哪个引脚。 MOSI引脚成为主模式的串行数据I / O(MOMI,Master Output, Master Input)引脚,MISO引脚成为从模式的串行数据I / O(SISO)引脚。 SPI不使用主模式下的MISO引脚和从模式下的MOSI引脚。


每个串行I / O引脚的方向取决于BIDIROE位。 如果引脚配置为输出,则移位寄存器的串行数据在引脚上被驱动。 相同的引脚也是移位寄存器的串行输入。


SCK输出为主模式,输入为从模式。


SS是主模式的输入或输出,它始终是从模式的输入。 双向模式不影响SCK和SS功能。


4.4 错误条件

SPI有一个错误条件:


 •模式故障错误(一般不使用,详细见协议)


4.5 低功耗模式选项

4.5.1 SPI处于运行模式

4.5.2 SPI处于等待模式

4.5.3 SPI处于停止模式

4.5.4 Reset

寄存器和信号的复位值在存储器映射和寄存器部分中描述(参见第3节“存储器映射/寄存器定义”)详细说明了寄存器及其位域。


•如果在复位后在从机模式下发生数据传输而没有写入SPIDR,则它将在复位之前发送垃圾或最后从主机接收的字节。


•复位后从SPIDR读取将始终读取一个零字节。


4.5.5 中断

当SPI使能时(SPICR1置1中的SPE位),SPI仅发出中断请求。 以下是SPI如何发出请求以及MCU应如何确认该请求的说明。 中断向量偏移和中断优先级取决于芯片。


中断标志MODF,SPIF和SPTEF进行逻辑或运算以产生中断请求。


当主机检测到SS引脚上的错误时,会发生MODF。 必须为MODF功能配置主SPI(参见表3-2 SS输入/输出选择)。 设置MODF后,将中止当前传输并更改以下位:

MSTR = 0,SPICR1中的主位复位。


MODF中断反映在状态寄存器MODF标志中。 清除标志也将清除中断。 当MODF标志置位时,该中断将保持有效。 MODF具有自动清除过程,在3.1.4 SPI状态寄存器中描述。


接收到新数据并将其复制到SPI数据寄存器时,会发生SPIF。 一旦设置了SPIF,它就会在服务之前不会清除。 SPIF具有自动清除过程,在3.1.4 SPI状态寄存器中有描述。

当SPI数据寄存器准备接受新数据时SPTEF发生一旦SPTEF置位,它就会被清除,直到它被服务。 SPTEF具有自动清除过程,在3.1.4 SPI状态寄存器中有描述。

5. 关于三线和四线

根据上面的描述,可以知道,SPI可以配置为全双工和半双工,全双工的情况下即为四线,半双工的情况为三线,并非一般意义所指的去掉或包含SS线。


关键字:SPI总线  数据寄存器  移位器逻辑 引用地址:SPI总线详解笔记

上一篇:I2C总线详解笔记
下一篇:STM8 串口接收字符串问题

推荐阅读

历时21个月,被推迟30次后,高通最终放弃了对恩智浦的收购。收购失败,对高通和恩智浦都产生了一定的影响。不过既然已经放下,两个公司都要继续向前看,恩智浦为了调整被收购失败后的公司状态,将重新组建管理层。今年7月份,高通公司收购恩智浦(NXP)由于中国商务部没有反垄断批准,所以宣告失败,为此高通需要支付给恩智浦高达20亿美元的分手费用。同时还...
在美中贸易战的风风雨雨中,让果粉们期待的新款iPhone终于亮相,只不过从规格上来看,今年苹果推出的iPhone,在5G芯片供应尚不足的状况下,还是会以4G模块为主,面对其他主要竞争对手,包括韩国三星、大陆华为等,4G的iPhone迎战5G的安卓手机,这场战役有胜算吗?苹果11日在总部Apple Park的贾伯斯剧院举办新品发表会,推出搭载双镜头的iPhone 11,以及...
昨天是中兴A20首销的日子,由于该机全球首发屏下摄像头,使得其对消费者的吸引力很大,官方称该机首日售罄。外观方面,中兴A20用上了6.92英寸超大OLED屏,支持10bit色深、智能90Hz高刷新率,机身采用了双腰线超薄设计,整机厚度7.98毫米,重量为198克,机身提供黑洞引力、流光海盐,幻影橙风、紫月凌云四种配色。得益于超高透微米级新材料、独立驱动屏显芯...
近日,思灵机器人(AGILE ROBOTS)宣布完成2.2亿美金C轮融资,软银愿景基金2期领投,跟投的财务投资人包括阿布扎比皇室集团(Chimera)、高瓴创投、红杉中国、线性资本等,产业投资人包括小米集团、工业富联、富士康原高管创立的满得投资等。思灵机器人是一家智能机器人系统研发及应用服务商,致力于智能机器人系统的研发及应用,核心产品包括7自由度轻...

史海拾趣

问答坊 | AI 解惑

【瑞萨 CPK-RA2L1 开发板】测评 - 2:RT-Thread

本帖最后由 MianQi 于 2022-11-19 17:19 编辑 回到 RT-Thread,安装 BSP 时下载遇到问题: 解决的办法是,下载压缩文件,单独安装:   新建项目时有提醒,路径中不能有空格: …

查看全部问答∨

pyboard v1.1进DFU显示STM32 BOOTLOADE无法升级固件解决

按照官方一般的教程,进入DFU模式后,应该可以在设备管理期间“STM Device in DFU Mode“,然后使用ST官方的 DefuSe Demo软件进行dfu固件升级。 但是我的pyboard v1.1进入DFU模式后在设备管理器下面没有看到“STM Device in ...…

查看全部问答∨

【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)

【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)   中科亿海微的FPGA重配置功能十分强大。那么重配置功能可以应对哪些场景?如何实现呢? 在实际工程应用场景中可能要实现几个不同功能的码流,如果采用几片FPGA+Flash的方 ...…

查看全部问答∨

hi3593 arinc429 verilog 驱动 程序

https://download.csdn.net/download/cjfwindy/13208347 …

查看全部问答∨

ADS7822U驱动例程 fpga Verilog

https://download.csdn.net/download/cjfwindy/14927859 …

查看全部问答∨

e络盟限时福利|《e选》-------晒单

看到EEWORLD和e络盟办的活动,买了几个物料。一共两颗IC,两个DDR4的连接器,今天刚收到快递,晒出来分享下 开箱 第一颗IC是FTDI的FT601Q-B-T,QFN-76封装 FT60x是FTDI第一代SuperSpeed USB3.0系列芯片,提供高达5Gbps的带宽 ...…

查看全部问答∨

通讯猫MQTT服务器在线客户端的问题

我在网上找一个通讯猫MQTT服务器在线客户端。我有点糊涂,到底是服务器,还是客户端。 可以连上,也可以发数据,就是不知道跟谁连。 我从上面下了个WIN32客户端,打开,怎么设置都连不上。 用管理员模式打开,只是打开一瞬间连接灯黄一 ...…

查看全部问答∨

RT1052(2)工具生成代码

RT1052 ~2~工具生成代码   图1:MCU Xpreesso config tool   图2选芯片型号   图3找外设引脚 买的是野火的RT1052 EVK PRO   找个表格直接就可以   图6;配置引脚 找到这两个脚配置为,LPspi3   ...…

查看全部问答∨

【行空板 Python编程学习主控板】 四、所见所得的Mind+图形化WS2812灯带实现

一、硬件及连接 双十一之前在老五家上了一次车,屯了几十根ws2812小灯带,刚好拿来用行空板测评 行空板提供了很多接口,点亮灯珠的的管家用P24来实现  由于灯带的接口大多是2.54,而行空板的接口是2.0,因此借用P23接口的正极(中间 ...…

查看全部问答∨

村田制作所器件仿真软件推荐

                     村田制作所器件仿真软件推荐 https://ds.murata.co.jp/simsurfing/index.html?lcid=zh-cn 随便器件进入 ,点击仿真进入: https://ds.murata.co.jp/nfstp/? ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved