SWPMI

简介

单线协议主接口(SWPMI)是ETSI TS 102 613技术规范中定义的非接触式前端(CLF)所对应的主接口。

单线协议(SWP)的原理是基于全双工模式传输数字信息:

S1信号(从主设备到从设备)通过电压域中的数字调制(L或H)进行传输。

swpmi_S1_signal_coding

S1信号编码

S2信号(从设备到主设备)由电流中的数字调制(L或H)传输。

swpmi_S2_signal_coding

S2信号编码

主要特性

SWPMI模块的主要功能如下:

  • 全双工通信模式

  • 自动SWP总线状态管理

  • 帧开始 (SOF) 的自动处理

  • 帧结束 (EOF) 的自动处理

  • 填充位的自动处理

  • 传输中的自动CRC-16计算与生成

  • 接收时自动进行CRC-16计算与校验

  • 32-位发送数据寄存器

  • 32-位接收数据寄存器

  • 多软件缓冲模式,用于高效实现DMA及多帧缓冲。

  • 可配置比特率高达2 Mbit/s

  • 可配置中断

  • CRC错误、欠帧、溢帧标志

  • 帧接收与发送完成标志

  • 奴隶简历检测标志

  • 用于测试目的的环回模式

  • 符合ETSI TS 102 613技术标准的嵌入式SWPMI_IO收发器

规格

  • 专用模式,用于在GPIO上输出SWPMI_RX、SWPMI_TX和SWPMI_SUSPEND信号,以备连接外部收发器之用。

功能描述

SWPMI框图

swpmi_arch

SWPMI架构框图

注: 为了支持从停止模式通过从机恢复功能退出,必须为swpmi_ker_ck选择HSI。如果不需要此功能,则可选择swpmi_pclk,并且在进入停止模式前必须禁用SWPMI。

SWP 初始化与激活

初始化和激活会将SWPMI_IO状态从低电平切换至高电平。在使用内部收发器时,操作步骤如下:

  1. 根据VDD电压(3 V或1.8 V),在SWPMI_OR寄存器中配置SWP_CLASS位。

  2. 将SWPMI_CR寄存器中的SWPTEN置位,以启用SWPMI_IO收发器,并将SWPMI_IO置为低电平(SWP总线处于停用状态)。

  3. 等待SWPMI_SR寄存器中的RDYF标志位被置位(通过轮询该标志位,或使用SWPMI_IER寄存器中的RDYIE位启用中断)。

  4. 将SWPMI_CR寄存器中的SWPACT位设置为ACTIVATE,以激活SWP,即从DEACTIVATED状态切换到SUSPENDED状态。

SWP总线状态

SWP总线可具有以下状态:已停用、已暂停、已激活。存在多种可能的转换:

  • 激活:从已停用状态转换至已暂停状态,

  • 暂停:从已激活状态过渡到暂停状态,

  • 主设备发起的从“已挂起”状态到“已激活”状态的转换,

  • 从挂起状态到激活状态的转换由从设备发起。

  • 停用:从暂停状态过渡到已停用状态。

激活 在复位期间及复位刚结束时,SWPMI_IO被配置为模拟模式。请参阅SWP初始化与激活,以激活SWP总线。

暂停 只要与从设备保持通信(无论是发送还是接收),SWP总线将一直处于激活状态。一旦不再有发送或接收活动,且经过7个空闲位后,SWP总线便会重新切换回暂停状态。

由主设备恢复 一旦启用SWPMI,用户即可请求发送SWPMI帧。在开始帧传输之前,SWPMI会先发送一个过渡序列和8个空闲位(由主设备恢复)。在主设备执行恢复操作后,SWP将从挂起状态转换为激活状态(请参阅图:SWP总线状态)。

由主设备恢复 一旦启用SWPMI,用户即可请求发送SWPMI帧。在开始帧传输之前,SWPMI会先发送一个过渡序列和8个空闲位(由主设备恢复)。在主设备执行恢复操作后,SWP将从挂起状态转换为激活状态(请参阅图:SWP总线状态)。 从从机恢复 一旦SWPMI启用,如果SWPMI从从机接收到恢复信号,SWP也可从挂起状态转换为激活状态。从从机恢复会设置SWPMI_ISR寄存器中的SRF标志位。

DEACTIVATE 停用请求 如果不再需要通信,且SWP处于暂停模式,则用户可通过禁用SWPMI外设,请求将SWP切换至停用模式。软件必须在SWPMI_CR寄存器中置位DEACT位,以请求进入停用模式。如果SWPMI未检测到从机的恢复操作,则SWPMI_ISR寄存器中的DEACTF标志被置位,同时SWPMI_ICR寄存器中的SWPACT位被清除。若软件置位DEACT位时,SWPMI检测到从机的恢复操作,则SWPMI_ISR寄存器中的SRF标志被置位,DEACTF保持未置位,SWPACT保持置位,且DEACT位被清除。

为了再次激活SWP,软件必须在设置SWPACT位之前,先清除SWPMI_CR寄存器中的DEACT位。

停用模式 为了立即将SWP切换到停用模式,而忽略从从设备可能传来的恢复信号,用户必须清除SWPMI_CR寄存器中的SWPACT位。

注: 为进一步降低功耗,请在GPIO控制器中将SWPMI_IO端口配置为开漏输出,然后清除SWPMI_CR寄存器中的SWPTEN位。

swpmi_bus_states

SWPMI总线状态机

SWPMI_IO(内部收发器)旁路

微控制器中嵌入了一个符合ETSI TS 102 613技术规范的SWPMI_IO(收发器)。不过,可通过在SWPMI_OR寄存器中设置SWP_TBYP位来绕过该收发器。在这种情况下,SWPMI_IO将被禁用,而SWPMI_RX、SWPMI_TX和SWPMI_SUSPEND信号则作为替代功能通过三个GPIO引脚提供(详情请参阅产品数据手册中的“引脚布局与引脚说明”)。此配置用于连接外部收发器。

注意: 在SWPMI_IO旁路模式下,必须保持SWPMI_CR寄存器中的SWPTEN位清零。

SWPMI位速率

位速率必须根据以下公式在SWPMI_BRR寄存器中设置:FSWP = Fswpmi_ker_ck / ((BR[7:0]+1)×4) 注意: 最大位速率为2 Mbit/s。

SWPMI帧处理

SWPMI 内置了一个用于发送的32位数据寄存器(SWPMI_TDR),以及一个用于接收的32位数据寄存器(SWPMI_RDR)。

swpmi_frame_structure

SWPMI帧结构

在传输过程中,SOF插入、CRC计算与插入以及EOF插入均由SWPMI自动管理。用户只需提供有效载荷的内容和大小即可。一旦数据写入SWPMI_TDR寄存器,帧传输便立即启动。专用标志位用于指示发送数据寄存器为空以及帧传输已完成的事件。

在接收过程中,SOF删除、CRC计算与校验以及EOF删除均由SWPMI自动管理。用户只需读取有效载荷的内容和大小。专用标志用于指示接收数据寄存器已满、帧接收完成,以及可能出现的CRC错误事件。

填充位插入(发送时)和填充位删除(接收时)由SWPMI核心自动管理。这些操作对用户而言是透明的。

传输程序

在开始任何使用之前,在进行传输时,用户必须激活SWP。请参阅:SWP初始化以及激活。

帧传输有几种可能的软件实现方式:无软件缓冲模式、单软件缓冲模式和多软件缓冲模式。

软件缓冲区的使用需要借助DMA通道,将RAM内存中的软件缓冲区数据传输至SWPMI外设的发送数据寄存器。

  • 无软件缓冲模式

此模式无需使用DMA。SWP帧传输的处理由主循环中轮询状态标志或SWPMI中断例程内部完成。SWPMI中有一个32位发送数据寄存器(SWPMI_TDR),因此向该寄存器写入数据将触发最多4字节的数据发送。

通过清除SWPMI_CR寄存器中的TXDMA位,可选择无软件缓冲区模式。

帧传输由首次向SWPMI_TDR寄存器写入数据启动。写入SWPMI_TDR寄存器的首个32位字的低有效字节(即[7:0]位)指示了有效载荷中的数据字节数;该字的其余3个字节必须包含有效载荷的前3个字节([15:8]位包含有效载荷的第一个字节,[23:16]位包含第二个字节,[31:24]位包含第三个字节)。此后,对SWPMI_TDR寄存器的后续写入仅包含有效载荷数据字节,每次最多可写入4个字节。

注意:写入SWPMI_TDR寄存器的首个32位字的低有效字节用于编码有效载荷中的数据字节数。该数字范围为1至30。低有效字节中任何其他值都将被忽略,且传输不会启动。

向SWPMI_TDR寄存器写入将引发以下操作:

  • 如果SW发送转换序列和8个空闲位(由主设备恢复),则已暂停(如果SWP总线状态已处于激活状态,则不会发生此情况),

  • 发送帧开始信号(SOF),

  • 根据SWPMI_TRD寄存器的内容发送有效载荷。如果数量为

有效载荷中的字节数大于3时,需通过软件重新填充SWPMI_TDR。每次SWPMI_ISR寄存器中的TXE标志位被置位,且只要SWPMI_ISR寄存器中的TXBEF标志位未被置位,

  • 发送由SWPMI核心自动计算的16位CRC,

  • 发送帧结束符 (EOF)。

当软件向SWPMI_TDR寄存器写入数据时,TXE标志会自动清除。

一旦完整帧发送完毕,且未请求其他帧传输(即在TXBEF标志置位后未再次写入SWPMI_TDR),TCF和SUSP标志将在EOF传输后的7个空闲位中被设置于SWPMI_ISR寄存器中;如果SWPMI_IER寄存器中的TCIE位已置位,则会生成中断(参见图:SWPMI无软件缓冲区模式传输)。.. _SWPMI_No_software_buffer_mode_transmission:

swpmi_no_software_buffer_mode

SWPMI无软件缓冲模式传输模式

如果在EOF传输结束前请求发送另一帧,TCF标志将不会被置位,该帧将与前一帧连续发送,二者之间仅间隔一个空闲位(请参阅图:SWPMI无软件缓冲区模式传输,连续帧)。.. _SWPMI_No_software_buffer_mode_transmission_consecutive_frames:

swpmi_no_software_buffer_mode_consecutive

SWPMI 无软件缓冲模式传输连续帧

单软件缓冲区模式 此模式允许通过DMA传输完整的SWP帧,无需CPU干预。DMA将自动重新填充32位SWPMI_TDR寄存器,软件可利用SWPMI_TXBEF标志轮询帧传输的结束。

通过在SWPMI_CR寄存器中设置TXDMA位并清除TXMODE位,可选择单软件缓冲区模式。

DMA通道或数据流必须按以下模式进行配置(请参阅DMA章节): - 禁用内存到内存模式; - 启用内存递增模式; - 将内存大小设置为32位; - 将外设大小设置为32位; - 禁用外设递增模式; - 禁用循环模式; - 数据传输方向设置为从内存读取。 - 要传输的字数须根据SWP帧长度进行设置; - 源地址为RAM中的SWP帧缓冲区; - 目标地址为SWPMI_TDR寄存器。

然后,用户必须:

  1. 在SWPMI_CR寄存器中设置TXDMA位

  2. 在SWPMI_IER寄存器中设置TXBEIE位

  3. 用有效载荷中数据字节的数量填充RAM内存中的缓冲区(位于第一个字的最低有效字节上)。

  4. DMA模块中可启动DMA传输和帧传输的可用流或通道

当SWPMI_ISR中的TXE标志位被置位时,SWPMI会发出DMA请求。当DMA正在向SWPMI_TDR寄存器写入数据时,TXE标志位会自动清除。

在SWPMI中断例程中,用户必须检查SWPMI_ISR寄存器中的TXBEF位。如果该位已置位,并且需要发送另一帧,则用户必须:

  1. 在DMA模块中禁用流或通道

  2. 用下一帧的内容更新RAM内存中的缓冲区,配置DMA模块中待传输的总字数。

  3. 启用DMA模块中的流或通道,以启动下一帧的传输。

  4. 将SWPMI_ICR寄存器中的CTXBEF位设置为1,以清除TXBEF标志位。

  • 多软件缓冲模式

此模式允许在RAM内存中使用多个帧缓冲区,以确保连续传输,同时将CPU负载保持在极低水平,并借助DMA为软件更新缓冲区提供更大的延迟余量。软件可随时检查DMA计数器,并据此在RAM内存中相应地更新SWP帧。

RAM存储器中的每个传输缓冲区必须具有固定长度,即八个32位字,无论SWP帧有效载荷的字节数是多少。RAM存储器中的传输缓冲区须由软件填充,并且连续两个缓冲区之间需保持8字节的偏移量。缓冲区的第一个数据字节表示帧有效载荷的字节数。请参阅图中所示的缓冲区示例:SWPMI多软件缓冲区模式传输。

通过在SWPMI_C中同时设置TXDMA和TXMODE位来选择缓冲模式。

例如,为了使用4个传输缓冲区,用户必须按如下方式配置DMA:

DMA通道或数据流必须以以下模式进行配置(请参阅DMA章节):

  • 内存到内存模式已禁用,

  • 已启用内存增量模式,

  • 内存大小设置为32位,

  • 外围尺寸设置为32位,

  • 外围增量模式已禁用,

  • 循环模式已启用,

  • 数据传输方向设置为从内存读取,

  • 要传输的字数必须设置为32(每个缓冲区8个字),

  • 源地址是RAM中的buffer1,

  • 目标地址是SWPMI_TDR寄存器。

然后,用户必须:

  1. 在SWPMI_CR寄存器中设置TXDATA

  2. 在SWPMI_IER寄存器中设置TXBEIE

  3. 将RAM存储器中的buffer1、buffer2、buffer3和buffer4填充完毕(以有效载荷中数据字节的数量作为第一个字的最低有效字节)。

  4. 在DMA模块中启用流或通道以启动DMA。

在SWPMI中断例程中,用户必须检查SWPMI_ISR寄存器中的TXBEF位。如果该位被置位,用户必须在SWPMI_ICR寄存器中置位CTXBEF位,以清除TXBEF标志,随后用户即可更新RAM存储器中的buffer1。

在下一个SWPMI中断例程发生时,用户将更新buffer2,依此类推。

该软件还可读取DMA寄存器中的DMA计数器(待传输数据的数量),以检索已从RAM存储器中传输并发送出去的帧。例如,如果软件使用4个传输缓冲区,且DMA计数器的值为17,则意味着RAM区域中有两个缓冲区已准备好更新。这在软件尚未处理SWPMI中断之前便已发送多个帧的情况下非常有用。若出现这种情况,软件将不得不更新多个缓冲区。

当没有更多帧需要发送时,用户必须在DMA模块中禁用循环模式。传输将在缓冲区4传输结束时停止。 如果传输需要在之前停止(例如在buffer2末尾),用户必须将buffer3和buffer4中第一个字的低有效字节设为0。 SWPMI_CR寄存器中的TXDMA位将在第一个字的最低有效字节中读取到有效载荷的数据字节数为0时由硬件自动清除。.. _SWPMI_多软件缓冲区模式传输:

swpmi_multi_software_buffer_mode

SWPMI 多软件缓冲模式传输

接收程序

在开始任何操作之前,在接收时,用户必须激活SWP(请参阅:SWP初始化和激活。 一旦在SWPMI_CR寄存器中设置了SWPACT位,从从机状态恢复时,将置位SWPMI_ISR寄存器中的SRF标志,并自动启用SWPMI以进行帧接收。 如果SWP总线已处于激活状态(例如,由于正在进行帧传输),SWPMI核心无需等待从机状态的任何恢复操作,即可立即开始接收。 帧接收有几种可能的软件实现方式:

  • 无软件缓冲模式,

  • 单软件缓冲模式,

  • 多软件缓冲模式。

软件缓冲区的使用需要借助DMA通道,将SWPMI外设中的接收数据寄存器的数据传输到RAM存储器中的软件缓冲区。

无软件缓冲模式 此模式无需使用DMA。SWP帧接收处理由主循环中的状态标志轮询或SWPMI中断例程内部完成。SWPMI中有一个32位接收数据寄存器(SWPMI_RDR),在读取该寄存器之前,最多可接收4个字节。

通过重置SWPMI_CR寄存器中的RXDMA位,选择无软件缓冲区模式。

一旦接收到起始帧(SOF),后续字节(有效载荷)将被存储在SWPMI_RDR寄存器中。当SWPMI_RDR寄存器满时,SWPMI_ISR中的RXNE标志位将被置位;如果SWPMI_IER寄存器中的RIE位已设置,则会生成中断。用户可读取SWPMI_RDR寄存器,且当软件读取SWPMI_RDR寄存器时,RXNE标志位会自动清除。

一旦接收到完整的帧,包括CRC和帧结束符(EOF),SWPMI_ISR寄存器中的RXNE和RXBFF标志位均会被置位。用户必须从SWPMI_RDR寄存器中读取有效载荷的最后字节,并在SWPMI_ICR寄存器中置位CRXBFF标志位,以清除RXBFF标志位。有效载荷中的数据字节数可在SWPMI_RFL寄存器中获取。此外,当软件读取SWPMI_RDR寄存器时,RXNE标志位会自动复位(参见图:SWPMI无软件缓冲区模式接收)。

在RXNE清除后读取SWPMI_RDR寄存器将返回0。

swpmi_multi_software_buffer_mode_reception

SWPMI 无软件缓冲模式接收

单软件缓冲模式 此模式允许通过DMA在无需任何CPU干预的情况下接收完整的SWP帧。DMA会将接收到的数据从32位SWPMI_RDR寄存器传输至RAM存储器,软件可利用SWPMI_RBFF标志轮询帧接收的结束。

通过在SWPMI_CR寄存器中设置RXDMA位并清除RXMODE位,可选择单软件缓冲区模式。

DMA 必须按如下方式配置:

DMA通道或数据流必须以下述模式进行配置(请参阅DMA章节):

  • 内存到内存模式已禁用,

  • 已启用内存增量模式,

  • 内存大小设置为32位,

  • 外围尺寸设置为32位,

  • 外围增量模式已禁用,

  • 循环模式已禁用,

  • 数据传输方向设置为从外设读取,

  • 要传输的字数必须设置为8,

  • 源地址是SWPMI_RDR寄存器,

  • 目标地址是RAM中的SWP帧缓冲区。

然后用户必须:

  1. 在SWPMI_CR寄存器中设置RXDMA位。

  2. 在SWPMI_IER寄存器中设置RXBFIE位。

  3. 在DMA模块中启用流或通道。

当SWPMI_ISR中的RXNE标志位被置位时,SWPMI会发出DMA请求。在DMA读取SWPMI_RDR寄存器时,RXNE标志位会自动清除。 在SWPMI中断例程中,用户必须检查SWPMI_ISR寄存器中的RXBFF位。如果该位被置位,用户必须:

  1. 在DMA模块2中禁用流或通道。

  2. 读取SWPMI_RFL寄存器中接收到的帧有效载荷的字节数。

  3. 从RAM缓冲区中读取帧有效载荷。

  4. 在DMA模块中启用流或通道

  5. 将SWPMI_ICR寄存器中的CRXBFF位设置为1,以清除RXBFF标志位(参见图:SWPMI单软件缓冲区模式接收)。

swpmi_single_software_buffer_mode_reception

SWPMI 单个软件缓冲模式接收

多软件缓冲区模式 此模式允许在RAM内存中使用多个帧缓冲区,以确保连续接收,同时利用DMA实现极低的CPU负载。帧有效载荷与帧状态标志一同存储在RAM内存中。软件可随时检查DMA计数器和状态标志,以便处理RAM内存中接收到的SWP帧。

多软件缓冲模式必须与循环模式下的DMA配合使用。多软件缓冲模式是通过在SWPMI_CR寄存器中同时设置RXDMA位和RXMODE位来选择的。 为了在RAM中使用n个接收缓冲区,必须将DMA通道或数据流配置为以下模式(请参阅DMA章节):

  • 内存到内存模式已禁用,

  • 已启用内存增量模式,

  • 内存大小设置为32位,

  • 外围尺寸设置为32位,

  • 外围增量模式已禁用,

  • 循环模式已启用,

  • 数据传输方向设置为从外设读取,

  • 要传输的字数必须设置为8×n(每个缓冲区8个字)。

  • 源地址是SWPMI_TDR寄存器,

  • 目标地址是RAM中的buffer1地址。

然后用户必须:

  1. 在SWPMI_CR寄存器中设置RXDMA。

  2. 在SWPMI_IER寄存器中设置RXBFIE。

  3. 在DMA模块中启用流或通道。

在SWPMI中断例程中,用户必须检查SWPMI_ISR寄存器中的RXBFF位。如果该位被置位,用户必须在SWPMI_ICR寄存器中设置CRXBFF位,以清除RXBFF标志,随后用户便可读取第一个缓冲区中接收到的第一个帧的有效载荷(位于DMA2_CMAR1所设定的RAM地址处)。

有效载荷中的数据字节数可在最后一个第8个字的位[23:16]中获取。在下一次SWPMI中断例程触发时,用户将读取第二个缓冲区中接收到的第二帧(地址由DMA2_CMAR1 + 8设置),依此类推(参见图:SWPMI多软件缓冲区模式接收)。

如果应用软件无法确保在下一帧接收之前处理完SMPMI中断,则每个缓冲区的状态可从第8个缓冲区字的最高有效字节中获取:

  • CRC错误标志(等同于SWPMI_ISR寄存器中的RXBERF标志)是位于第8个字的第24位。请参阅:错误管理以获取CRC错误说明。

  • 接收溢出标志(等效于SWPMI_ISR寄存器中的RXOVRF标志)是位于第8个字的第25位。请参阅:关于溢出错误的错误管理说明。

  • 接收缓冲区满标志(等效于SWPMI_ISR寄存器中的RXBFF标志)是位于第8个字的第26位。若发生CRC错误,RXBFF和RXBERF标志均被置位,因此第24位和第26位均被置位。

若发生溢出,将设置溢出标志,即第25位被置位。仅在接收最后一个字时发生溢出的情况下,才会设置接收缓冲区满标志;此时,当前帧和下一帧的接收都将同时置位第25位和第26位。

该软件还可读取DMA寄存器中的DMA计数器(待传输数据的数量),以检索已通过DMA接收并传输至RAM存储器的帧。例如,如果软件使用4个接收缓冲区,且DMA计数器的值为17,则意味着RAM区域中有两个缓冲区已准备好供读取。

在多软件缓冲区接收模式下,如果软件正在读取第8个字的第24、25和26位,则无需在每帧接收后清除RXBERF、RXOVRF和RXBFF标志位。……_SWPMI_多软件缓冲区模式接收:

swpmi_multi_software_buffer_mode_reception_

SWPMI 多软件缓冲模式接收

错误管理

  • 有效载荷传输期间发生欠载

在帧有效载荷传输期间,SWPMI_ISR寄存器中的TXUNRF标志位指示出现发送欠帧。如果SWPMI_IER寄存器中的TXBUNREIE位已置位,则会生成中断。

如果发生发送欠帧,SWPMI将停止有效载荷传输,并发送一个损坏的CRC(所发送的第一个CRC字节的第一个比特被取反),随后发送一个EOF。如果使用DMA,SWPMI_CR寄存器中的TXDMA位将自动清零。

当TXUNRF位被置位时,对SWPMI_TDR寄存器的任何进一步写入操作都将被忽略。用户必须在SWPMI_ICR寄存器中设置CTXUNRF位,以清除TXUNRF标志位。

有效载荷接收期间发生溢出 在接收帧有效载荷期间,SWPMI_ISR寄存器中的RXOVRF标志位会指示发生接收溢出。如果出现接收溢出,SWPMI将不会用传入的数据更新SWPMI_RDR。传入的数据将会丢失。

接收过程持续至文件结束符(EOF),如果溢出状态消失,则会置位RXBFF标志。当RXBFF标志置位时,用户可检查RXOVRF标志。用户必须在SWPMI_ICR寄存器中设置CRXOVRF位,以清除RXBOVRF标志。

如果用户希望立即检测溢出,可设置SWPMI_IER寄存器中的RXBOVREIE位,以便在发生溢出时立即生成中断。

RXOVRF 标志与 RXNE 标志同时置位,即在发生溢出事件后的两次 SWPMI_RDR 读取操作期间。这表明至少有一个接收到的字节已丢失,而 SWPMI_RDR 中加载的字包含溢出发生前刚刚接收到的字节。

在多软件缓冲区模式下,如果接收到的帧的最后一字节设置了RXOVRF标志,则当前帧和下一帧的溢出位(第8字节的第25位)均会被置位。

有效载荷接收期间发生CRC错误 在接收到两个CRC字节后,如果CRC校验出错,则在接收到EOF后,SWPMI_ISR寄存器中的RXBERF标志位将被置位。如果SWPMI_IER寄存器中的RXBEIE位已设置,则会生成中断(请参阅图:带有CRC错误的SWPMI单缓冲模式接收)。用户必须在SWPMI_ICR中置位CRXBERF位,以清除RXBERF标志位。.. _SWPMI_single_buffer_mode_reception_with_CRC_error:

swpmi_single_software_buffer_mode_reception_with_crc

SWPMI 单缓冲接收模式带CRC错误

有效载荷接收过程中,填充位缺失或损坏 当有效载荷中的填充位缺失或损坏时,在接收到EOF后,SWPMI_ISR中会置位RXBERF和RXBFF标志。

损坏的EOF接收 一旦接收到SOF,SWPMI会累积接收到的字节,直至接收到EOF(忽略任何可能的SOF)。一旦接收到EOF,SWPMI便准备开始新帧的接收,并等待SOF的到来。

如果出现EOF损坏的情况,下次接收到EOF后,SWPMI_ISR寄存器中的RXBERF和RXBFF标志位将被置位。

注: 如果接收到的EOF出现损坏,有效载荷的接收仍会继续进行。因此,如果接收到的字节数大于30,则有效载荷中的字节数可能会变为31。有效载荷中的字节数可从SWPMI_RFL寄存器中读取,或从RAM存储器缓冲区第8个字的[23:16]位中读取,具体取决于工作模式。

环回模式

环回模式可用于测试目的。用户必须在SWPMI_CR寄存器中设置LPBK位,以启用环回模式。

启用环回模式后,SWPMI_TX和SWPMI_RX信号会相互连接。因此,SWPMI发送的所有帧都将被接收回来。

SWPMI 低功耗模式 ———————————->

模式

描述

Sleep

无影响。SWPMI 中断不会触发设备退出 Sleep 模式。

Stop

从 SUSPENDED 模式发出的 RESUME 信号(由从机产生)可唤醒设备从 Stop 模式,条件是 swpmi_ker_ck 为 HSI(参见:SWPMI 块图)

Standby

SWPMI 被停止。

寄存器 ———————————->

寄存器偏移及简单描述列表

偏移地址

寄存器名称

功能描述

0x0

IP_VER

IP 版本号

0x4

GIT_VER

Git 版本号

0x8

SWPMI_CR

SWPMI 控制寄存器

0xC

SWPMI_BRR

SWPMI 波特率寄存器

0x10

SWPMI_ISR

SWPMI 中断和状态寄存器

0x14

SWPMI_IER

SWPMI 中断使能寄存器

0x18

SWPMI_RFL

SWPMI 接收帧长度寄存器

0x1C

SWPMI_TDR

SWPMI 发送数据寄存器

0x20

SWPMI_RDR

SWPMI 接收数据寄存器

0x24

SWPMI_OR

SWPMI 选项寄存器

寄存器详细说明

  • IP_VER

    Address offset: 0x0.

字段

位域

访问属性

复位值

描述

IP_VER

23:0

RO

24’h010002

IP 版本号

Reserved

31:24

/

0x0

/

  • GIT_VER

    Address offset: 0x4.

字段

位域

访问属性

复位值

描述

GIT_VER

31:0

RO

32’h0

Git 版本号

  • SWPMI_CR

    Address offset: 0x8.

字段

位域

访问属性

复位值

描述

RXDMA

0

RW

0

接收 DMA 使能 此位用于在接收时启用 DMA 模式。

  • ‘b0: 接收 DMA 禁用

  • ‘b1: 接收 DMA 启用

TXDMA

1

RW

0

发送 DMA 使能 此位用于在发送时启用 DMA 模式。

  • ‘b0: 发送 DMA 禁用

  • ‘b1: 发送 DMA 启用

RXMODE

2

RW

0

接收缓冲模式 此位用于选择接收缓冲模式。仅当 TXDMA 位被置位时有效。

  • ‘b0: SWPMI 配置为单软件缓冲模式进行接收

  • ‘b1: SWPMI 配置为多软件缓冲模式进行接收

TXMODE

3

RW

0

发送缓冲模式 此位用于选择发送缓冲模式。仅当 TXDMA 位被置位时有效。

  • ‘b0: SWPMI 配置为单软件缓冲模式进行发送

  • ‘b1: SWPMI 配置为多软件缓冲模式进行发送

LPBK

4

RW

0

回环模式使能 此位用于启用回环模式。

  • ‘b0: 回环模式禁用

  • ‘b1: 回环模式启用

SWPACT

5

RW

0

单线协议主接口激活 此位用于激活 SWP 总线(参见:SWP 初始化与激活)。

  • ‘b0: SWPMI_IO 被拉低至地,SWP 总线切换到 DEACTIVATED 状态

  • ‘b1: SWPMI_IO 被释放,SWP 总线切换到 SUSPENDED 状态

注意:要设置 SWPACT 位,DEACT 位必须先被清除。

Reserved

9:6

/

0x0

/

DEACT

10

RW

0

单线协议主接口去激活 此位用于请求 SWP DEACTIVATED 状态。 设置此位的效果与清除 SWPACT 相同,但可能的从机 RESUME 会保持 SWP 处于 ACTIVATED 状态。

SWPTEN

11

RW

0

单线协议主收发器使能 此位用于启用收发器并控制 SWPMI_IO(参见第 58.3.3 节:SWP 初始化与激活)。

  • ‘b0: SWPMI_IO 引脚由 GPIO 控制器控制

  • ‘b1: SWPMI_IO 收发器由 SWPMI 控制

Reserved

31:12

/

0x0

/

  • SWPMI_BRR

    Address offset: 0xC.

字段

位域

访问属性

复位值

描述

BR

7:0

RW

1

波特率预分频器

此字段必须编程以设置 SWP 总线波特率,需考虑在 RCC(复位和时钟控制)中配置的 Fswpmi_ker_ck,按以下公式: FSWP = Fswpmi_ker_ck / ((BR[7:0]+1)×4) 注意:编程的波特率必须在以下范围内:从 100 kbit/s 到 2 Mbit/s。 当 SWPMI_CR 寄存器中的 SWPACT 位被置位时,BR[7:0] 不能写入。

Reserved

31:8

/

0x0

/

  • SWPMI_ISR

    Address offset: 0x10.

字段

位域

访问属性

复位值

描述

RXBFF

0

RW

0

接收缓冲区满标志 此标志由硬件置位,表示当前接收帧的最后一个字已到达 SWPMI_RDR。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CRXBFF 位来清除。

  • ‘b0: 接收帧的最后一个字尚未到达 SWPMI_RDR

  • ‘b1: 接收帧的最后一个字已到达 SWPMI_RDR

TXBEF

1

RW

0

发送缓冲区空标志 此标志由硬件置位,表示无需再更新 SWPMI_TDR 以完成当前帧的发送。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CTXBEF 位来清除。

  • ‘b0: 发送帧缓冲区尚未清空

  • ‘b1: 发送帧缓冲区已清空

RXBERF

2

RW

0

接收 CRC 错误标志 此标志由硬件置位,表示接收到的帧中存在 CRC 错误。 与 RXBFF 标志同步设置。通过软件写入 1 到 SWPMI_ICR 寄存器中的 CRXBERF 位来清除。

  • ‘b0: 接收过程中无 CRC 错误

  • ‘b1: 检测到接收 CRC 错误

RXOVRF

3

RW

0

接收溢出错误标志 此标志由硬件置位,表示在有效载荷接收期间发生溢出,即 SWPMI_RDR 未被软件或 DMA 及时读取。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CRXOVRF 位来清除。

  • ‘b0: 接收过程中无溢出

  • ‘b1: 检测到接收溢出

TXUNRF

4

RW

0

发送欠载错误标志 此标志由硬件置位,表示在有效载荷发送期间发生欠载,即 SWPMI_TDR 未被软件或 DMA 及时写入。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CTXUNRF 位来清除。

  • ‘b0: 发送过程中无欠载错误

  • ‘b1: 检测到发送欠载错误

RXNE

5

RO

0

接收数据寄存器非空 此标志指示接收数据寄存器状态。

  • ‘b0: SWPMI_RDR 中无数据

  • ‘b1: SWPMI_RDR 中有数据可读

TXE

6

RO

1

发送数据寄存器空 此标志指示发送数据寄存器状态。

  • ‘b0: 写入 SWPMI_TDR 的数据尚未发送

  • ‘b1: SWPMI_TDR 中的数据已发送完毕,可再次写入

TCF

7

RW

0

传输完成标志 此标志由硬件置位,当发送和接收均完成后,且 SWP 总线切换到 SUSPENDED 状态。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CTCF 位来清除。

  • ‘b0: 发送或接收尚未完成

  • ‘b1: 发送和接收均已完成,SWP 总线处于 SUSPENDED 状态

SRF

8

RW

0

从机恢复标志 此标志由硬件置位,表示检测到从机发出的 RESUME 信号。 通过软件写入 1 到 SWPMI_ICR 寄存器中的 CSRF 位来清除。

  • ‘b0: 未检测到从机 RESUME 状态

  • ‘b1: 检测到从机 RESUME 状态

SUSP

9

RO

1

挂起标志 此标志是状态标志,报告 SWP 总线状态。

  • ‘b0: SWP 总线处于 ACTIVATED 状态

  • ‘b1: SWP 总线处于 SUSPENDED 或 DEACTIVATED 状态

DEACTF

10

RO

0

去激活标志 此标志是状态标志,确认请求进入 DEACTIVATED 模式。

  • ‘b0: SWP 总线处于 ACTIVATED 或 SUSPENDED 状态

  • ‘b1: SWP 总线处于 DEACTIVATED 状态

注意:如果在 DEACT 位被置位时检测到从机 RESUME,SRF 标志将被置位,DEACTF 不会被置位,SWP 将保持在 ACTIVATED 状态。

RDYF

11

RO

0

收发器就绪标志 此标志由硬件置位,表示收发器已准备就绪。 在设置 SWPMI_CR 寄存器中的 SWPTEN 位以启用 SWPMI_IO 收发器后,软件必须等待此标志置位,才能设置 SWPACT 位以激活 SWP 总线。

  • ‘b0: 收发器未就绪

  • ‘b1: 收发器已就绪

Reserved

31:12

/

0x0

/

  • SWPMI_IER

    Address offset: 0x14.

字段

位域

访问属性

复位值

描述

RXBFIE

0

RW

0

接收缓冲区满中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 RXBFF 标志置位时,生成 SWPMI 中断

TXBEIE

1

RW

0

发送缓冲区空中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 TXBEF 标志置位时,生成 SWPMI 中断

RXBERIE

2

RW

0

接收 CRC 错误中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 RXBERF 标志置位时,生成 SWPMI 中断

RXOVRIE

3

RW

0

接收溢出错误中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 RXOVRF 标志置位时,生成 SWPMI 中断

TXUNRIE

4

RW

0

发送欠载错误中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 TXUNRF 标志置位时,生成 SWPMI 中断

RIE

5

RW

0

接收中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 RXNE 标志置位时,生成 SWPMI 中断

TIE

6

RW

0

发送中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 TXE 标志置位时,生成 SWPMI 中断

TCIE

7

RW

0

传输完成中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 TCF 标志置位时,生成 SWPMI 中断

SRIE

8

RW

0

从机恢复中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 SRF 标志置位时,生成 SWPMI 中断

Reserved

10:9

/

0x0

/

RDYIE

11

RW

0

收发器就绪中断使能
  • ‘b0: 中断被禁止

  • ‘b1: 当 SWPMI_ISR 寄存器中的 RDYF 标志置位时,生成 SWPMI 中断

Reserved

31:12

/

0x0

/

  • SWPMI_RFL

    Address offset: 0x18.

字段

位域

访问属性

复位值

描述

RFL

4:0

RO

0

接收帧长度 RFL[4:0] 是接收到的帧有效载荷中的数据字节数。 最低两位 RFL[1:0] 给出上次读取 SWPMI_RDR 寄存器时相关字节的数量。

Reserved

31:5

/

0x0

/

  • SWPMI_TDR

    Address offset: 0x1C.

字段

位域

访问属性

复位值

描述

TD

31:0

WO

0

发送数据 包含要发送的数据。 写入此寄存器将触发 SOF 传输或下一个有效载荷数据传输,并清除 TXE 标志。

  • SWPMI_RDR

    Address offset: 0x20.

字段

位域

访问属性

复位值

描述

RD

31:0

RO

0

接收数据 包含接收到的数据。 读取此寄存器会清除 RXNE 标志。

  • SWPMI_OR

    Address offset: 0x24.

字段

位域

访问属性

复位值

描述

SWP_TYYP

0

RW

0

SWP 收发器旁路 此位用于绕过内部收发器(SWPMI_IO),并连接外部收发器。

  • ‘b0: 内部收发器启用。外部接口为 SWPMI_IO(SWPMI_RX、SWPMI_TX 和 SWPMI_SUSPEND 信号在 GPIO 上不可用)

  • ‘b1: 内部收发器禁用。SWPMI_RX、SWPMI_TX 和 SWPMI_SUSPEND 信号作为 GPIO 的替代功能可用。此配置用于连接外部收发器

SWP_CLASS

1

RW

0

SWP 类型选择 此位用于选择 SWP 工作模式(参见第 58.3.3 节:SWP 初始化与激活)。

  • ‘b0: Class C:SWPMI_IO 直接使用 VDD 电压工作,适用于 VDD 在 [1.62 V ~ 1.98 V] 范围内

  • ‘b1: Class B:SWPMI_IO 使用内部电压调节器工作,适用于 VDD 在 [2.70 V ~ 3.30 V] 范围内

Reserved

31:2

/

0x0

/