SPI总线详解笔记

目录

1. 简介

1.1 概述

1.2 特征

1.3 操作模式

2. 外部信号说明

2.1 概述

2.2 信号详细说明

2.2.1 MOSI

2.2.2 MISO

2.2.3 SS

2.2.4 SCK

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

3.1 寄存器说明

3.1.1 SPI Control Register 1

3.1.2 SPI Control Register 2

 3.1.3 SPI Baud Rate Register

 3.1.4 SPI Status Register

3.1.5 SPI Data Register

4. 功能描述

4.1 概述

4.2 传输格式

 4.2.1 时钟相位和极性控制

4.2.2 CPHA = 0 传输格式

4.2.3 CPHA = 1 传输格式

4.3 特殊功能

4.3.1 SS 输出

4.3.2 双向模式(MOMI或SISO)

4.4 错误条件

4.5 低功耗模式选项

4.5.1 SPI处于运行模式

4.5.2 SPI处于等待模式

4.5.3 SPI处于停止模式

4.5.4 Reset

4.5.5 中断

5. 关于三线和四线


1. 简介

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

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

SPI总线详解笔记_第1张图片

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个外部引脚。

SPI总线详解笔记_第2张图片

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级定义,地址偏移在模块级定义。 从保留位读取返回零并且写入保留位无效。

Table 3-1 Module Memory Map

Address

Use

Access

$  0

SPI Control Register 1 (SPICR1)

Read / Write

$  1

SPI Control Register 2 (SPICR2)

Read / Write 1

$  2

SPI Baud Rate Register (SPIBR)

Read / Write 1

      $  3

              SPI Status Register (SPISR)

         Read 2

      $  4

              Reserved

         — 2 3 

      $  5

              SPI Data Register (SPIDR)

          Read / Write

      $  6

              Reserved

          — 2 3 

      $  7

              Reserved

          — 2 3 

注意:

1.某些位是不可写的。

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

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

3.1 寄存器说明

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

3.1.1 SPI Control Register 1

SPI总线详解笔记_第3张图片

  •  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.

SPI总线详解笔记_第4张图片

 

  • 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

SPI总线详解笔记_第5张图片

  • 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系统进入空闲状态。

SPI总线详解笔记_第6张图片

 3.1.3 SPI Baud Rate Register

SPI总线详解笔记_第7张图片

  • SPPR2–SPPR0 — SPI Baud Rate Preselection Bits
  • SPR2–SPR0 — SPI Baud Rate Selection Bits

SPI总线详解笔记_第8张图片

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

 3.1.4 SPI Status Register

SPI总线详解笔记_第9张图片

  • 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总线详解笔记_第10张图片

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)

SPI总线详解笔记_第11张图片

SPI总线详解笔记_第12张图片

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位清零时,选择从模式。

SPI总线详解笔记_第13张图片

4.2 传输格式

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

SPI总线详解笔记_第14张图片

 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标志置位,表示传输已完成。

SPI总线详解笔记_第15张图片

4.2.3 CPHA = 1 传输格式

类似CPHA=0

SPI总线详解笔记_第16张图片

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引脚。

SPI总线详解笔记_第17张图片

每个串行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总线详解笔记_第18张图片

SPI总线详解笔记_第19张图片

 

你可能感兴趣的:(通讯,总线协议)