八、SPI读写XT25数据
- 人工智能
- 2025-09-08 14:48:01

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 位0LBM0 正常操作
1 串行输入脚可做串行输出脚
启用后,发送的数据会直接回环到接收端,用于测试或调试,无需外部连接。在LBM模式下,原本用于接收数据的串行输入脚(如MISO)可以临时用作串行输出脚(类似MOSI),直接输出发送的数据。
1SSESSP使能
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、SSP1DR16位,可往寄存器写入,可从寄存器读出
写入:
状态寄存器 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 SSP1IMSC4个中断条件的使能
位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数据”
上一篇
【第13章:自监督学习与少样本学习—13.4自监督学习与少样
下一篇
QT读写锁