主页 > 人工智能  > 

八、SPI读写XT25数据

八、SPI读写XT25数据

8.1 SPI 简介

SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议,广泛用于嵌入式系统中连接微控制器与外围设备,如传感器、存储器、显示屏等。

主要特点 1. 全双工通信:支持同时发送和接收数据。 2. 同步通信:依靠时钟信号(SCLK)同步数据传输。 3. 主从架构:一个主设备控制一个或多个从设备。 4. 高速传输:速度通常高于I2C和UART。

优点:高速传输,全双工通信,硬件简单。

缺点:需要更多引脚,无内置错误检测,协议复杂度较高。

全双工,这里就跟I2C区别开了,I2C只有一根数据线,发送数据时不能接收,接收数据时不能发送,所以SPI相较于I2C通信十分迅速,但是,主从身份是无法改变的,硬件(接的线)固定了,一个主机多个从机,主机是这些从机永远的主机。就是接的线相对多一点,I2C就用个SCL,SDA,SPI至少用四根。

信号线 1. SCLK(Serial Clock):主设备提供的时钟信号。 2. MOSI(Master Out Slave In):主设备发送数据,从设备接收。 3. MISO(Master In Slave Out):从设备发送数据,主设备接收。 4. SS/CS(Slave Select/Chip Select):主设备选择从设备。

应用场景 存储器:如Flash、EEPROM。 传感器:如温度、加速度传感器。 显示屏:如OLED、LCD。 通信模块:如Wi-Fi、蓝牙模块。

8.2 SPI 工作原理

1. 初始化:主设备配置时钟频率、数据格式等参数。 2. 选择从设备:主设备拉低(或者拉高,取决于从机)对应从设备的SS线。 3. 数据传输:主设备通过MOSI发送数据,同时通过MISO接收数据。 4. 结束通信:主设备拉高(或拉低)SS线,结束传输。

SPI(Serial Peripheral Interface)、SSI(Synchronous Serial Interface)和Microwire是三种常见的同步串行通信协议,它们在帧格式、通信方式和应用场景上有所不同。

8.3 XT25 简介

XT25F02E 含有2Mb串行FLASH,支持标准串行外围接口(SPI),并支持Dual SPI:串行时钟、芯片选择、串行数据I/O0(SI)、I/O1(SO)。Dual I/O数据以160Mbits/s的速度传输。下图为XT25内部方框图。

8.4 寄存器 8.4.1 控制寄存器0 SSP0CR0, SSP1CR0

        这里CPOL和CPHA可改变空闲状态和接收时刻,而I2C就是固定的

位3:0DSS

数据长度选择,控制每帧中传输的位的数目,0000~0010无效

0011 ~ 1111分别对应4-16位,相当于DSS的二进制值加一

5:4FRF

帧格式

00 SPI

01 TI SPI

10 Microwire

11 不适用

6CPOL

时钟输出极性 只用于SPI模式

0 使帧之间的总线时钟保持低电平

1 使帧之间的总线时钟保持高电平

7CPHA

时钟输出相位

0 SSP控制器在帧传输第一次跳变(01 or 10)时捕获串行数据,

即跳变远离时钟线的帧间状态

1 SSP控制器在帧传输第二次跳变时捕获串行数据,即跳变靠近时钟线的帧间状态

15:8SCR

串行时钟速率

位频率为 PCLK / (CPSDVSR * [SCR + 1]),

CPSDVSR为预分频器分频值

PCLK为APB时钟PCLK计时预分频器 

8.4.2 控制寄存器1 SSP0CR1 SSP1CR1 位0LBM

0 正常操作

1 串行输入脚可做串行输出脚

启用后,发送的数据会直接回环到接收端,用于测试或调试,无需外部连接。在LBM模式下,原本用于接收数据的串行输入脚(如MISO)可以临时用作串行输出脚(类似MOSI),直接输出发送的数据。

1SSE

SSP使能

0 禁能

1 与总线上的其他设备相互通信,置位前先向其他SSP寄存器和中断控制寄存器写入合适的控制信息

2MS

主master/从slave模式 SSE为0时才能写入(I/O是输入in/输出out)

0 SSP控制器作为总线主机,驱动SCLK,MOSI和SSEL接收MISO

1 SSP控制器作为总线从机,驱动MISO,接收SLCK、MOSI和SSEL

3SOD

从模式下有用,从机输出禁能,

1 将禁止MISO,从机就发不出去了

7:4保留 8.4.3 数据寄存器 SSP0DR、SSP1DR

       16位,可往寄存器写入,可从寄存器读出

        写入:

                状态寄存器 TNF 置1,即Tx FIFO未满时,软件就可以将帧数据写入,满了不能写;

                Tx FIFO 原来为空并且总线上SSP控制器空闲,写了立马发,不然排队等

                小于16位,写入寄存器的数据右对齐

        读出:

                状态寄存器 RNE 置一,即Rx FIFO未空,就能读出数据

                读的时候返回Rx FIFO最早接收到的帧数据

                读出的数据小于16位,高位补零

8.4.4 状态寄存器 SSP0SR、SSP1SR

        只读

E为empty

F为full

描述0TFE1 发送FIFO为空1TNF1 发送FIFO未满2RNF1 接收FIFO未空3RFE1 接收FIFO为空4BSY忙

0 空闲

1 发送/接收一个帧或TxFIFO非空

7:5保留 8.4.5 时钟预分频寄存器 SSP0CPSR SSP1CPSR

        该寄存器对SSP外设时钟SSP_PCLK分频来获得预分频时钟,再被SSPnCR0(8.4.1)中的SCR因数分频得到位时钟

        [7:0] CPSDVSR 为2~256之中的一个偶数,第0位就保持0不变了

              

        实际硬件限制使得SCLK速率不能超过SSP外设时钟的1/12。

8.4.6 中断屏蔽置位/清零寄存器 SSP0IMSC SSP1IMSC

        4个中断条件的使能

位0ROIM

当SPI接收缓冲区已满(即已接收到数据但未被读取),而新的数据又到达时,会发生接收溢出。

使能ROIM中断后,当发生接收溢出时,SPI模块会触发中断,通知程序处理溢出情况。

1RTIM接收超时(Rx FIFO非空且在超时周期内没有读出任何数据)后,置位该位会触发接收超时中断2RXIMRx FIFO至少有一半满,产生中断3TXIMTx FIFO至少有一半空,产生中断7:4保留 8.4.7 原始中断状态寄存器 SSP0RIS SSP1RIS

        不管SSPnIMSC中的中断是否使能,只要出现有效的中断条件,SSP原始中断状态寄存器就将相应的位置一。

位0RORRIS当SPI接收缓冲区已满(即已接收到数据但未被读取),而新的数据又到达时,会发生接收溢出。该位置一1RTRIS接收超时2RXRISRx FIFO至少有一半满3TXRISTx FIFO至少有一半空7:4保留 8.4.8 屏蔽中断状态寄存器 SSP0MIS SSP1MIS

        中断条件触发且中断使能时,相应位置一

位0RORRIS当SPI接收缓冲区已满(即已接收到数据但未被读取),而新的数据又到达时,会发生接收溢出。该位置一1RTRIS接收超时2RXRISRx FIFO至少有一半满3TXRISTx FIFO至少有一半空7:4保留 8.4.9 SSP中断清零寄存器 SSP0ICR SSP1ICR

用于清零接收溢出Receive Overrun 和接收超时 Receive Timeout 的中断

另外两个RXIM、TXIM通过读/写 Rx/ Tx FIFO会自动清零

 

位写1清除0RORIC清除ROIM1RTRC清除RTIM7:2保留

 8.5 SPI实现读取XT25

        持续更新。。。

标签:

八、SPI读写XT25数据由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“八、SPI读写XT25数据