当前位置: 首页 > article >正文

八、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清除ROIM
1RTRC清除RTIM
7:2保留

 8.5 SPI实现读取XT25

        持续更新。。。

相关文章:

八、SPI读写XT25数据

8.1 SPI 简介 SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议,广泛用于嵌入式系统中连接微控制器与外围设备,如传感器、存储器、显示屏等。 主要特点 1. 全双工通信:支持同时发送…...

Visionpro 齿轮测量

效果展示 一、题目要求 求出最大值,最小值,平均值 二、分析 1.首先要进行模板匹配 2.划清匹配范围 3.匹配小三角的模板匹配 4.卡尺 5.用找圆工具 工具 1.CogPMAlignTool 2.CogCaliperTool 3.CogFindCircleTool 4.CogFixtureTool 三、模板匹…...

Ubuntu20.04部署stable-diffusion-webui环境小记

Ubuntu20.04部署stable-diffusion-webui环境小记 文章目录 前言后视镜视角查看安装文档聊聊我踩的那些坑python3.11的安装执行sudo apt update报错显卡驱动内存优化网络问题无法打开系统设置和网络设置查询GPU使用情况 总结 Stable Diffusion web UI A web interface for Stabl…...

索引以及索引底层数据结构

一、什么是索引? 索引(index)是数据库高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B树),这些数据结构以某种方式指向真在…...

开业盛典活动策划方案拆解

道叔来给大家详细剖析咱们方案库里刚收录的这份《蜀大侠火锅店武侠风开业盛典活动策划方案》了,保证让你看完直呼过瘾,收获满满! 一、主题创意:武侠风,直击人心 首先,咱们得夸一下这活动的主题——“XXX‘…...

API 接口自动化

HTTP协议 - 白月黑羽 HTTP协议简介 如果客户端是浏览器,如何在chrome浏览器中查看 请求和响应的HTTP消息?按f12-》network 清除当前信息 响应的消息体在Response里看 点preview,可以看响应的消息体展开的格式 HTTP请求消息 请求头 reques…...

安全测试|SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…...

ML.NET库学习008:使用ML.NET进行心脏疾病预测模型开发

文章目录 ML.NET库学习008:使用ML.NET进行心脏疾病预测模型开发1. 项目主要目的和原理2. 项目概述实现的主要功能:主要流程步骤:关键技术: 3. 主要功能和步骤数据加载与路径处理模型训练与评估模型保存与加载 4. 代码中的数据结构…...

了解rtc_time64_to_tm()和rtc_tm_to_time64()

rtc_time64_to_tm()和rtc_tm_to_time64()主要用于RTC的驱动程序,在Linux外部RTC驱动中较常见。 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seconds since 01-01-1970 00:00:00 to Gregorian date. */ //将ti…...

verilog程序设计及SystemVerilog验证

1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV),或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构: Testbench是一个测试平台,信号…...

智能编程助手功能革新与价值重塑之:GitHub Copilot

引言: GitHub Copilot 的最新更新为开发者带来了显著变化,其中 Agent Mode 功能尤为引人注目。该模式能够自动识别并修复代码错误、自动生成终端命令,并具备多级任务推理能力,这使得开发者在开发复杂功能时,可大幅减少…...

物联网行业通识:从入门到深度解析

物联网行业通识:从入门到深度解析 (图1:物联网生态示意图) 一、引言:万物互联时代的到来 根据IDC最新预测,到2025年全球物联网设备连接数将突破410亿,市场规模达1.1万亿美元。物联网&#xff…...

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦,使代码模块之间功能职责更清晰。而分布…...

【硬件设计细节】缓冲驱动器使用注意事项

一、缓冲驱动器核心功能与选型原则 信号增强与隔离 驱动能力匹配:根据负载电流需求选择缓冲器,例如CMOS缓冲器驱动能力通常为4-8mA,需搭配大电流负载时选用图腾柱输出或专用驱动芯片(如TI的SN74LVC系列)。电压域转换&…...

驱动开发系列38 - Linux Graphics 3D 绘制流程(一)- 创建画布

一:概述 当应用程序创建 OpenGL 上下文时,它通常需要申请帧缓冲(Framebuffer,即画布)。在 X11 体系下,应用程序不会直接向内核的 DRM 模块请求创建帧缓冲,而是通过 X 服务器进行申请。 虽然从技术上讲,应用程序可以直接使用 DRM 接口创建帧缓冲对象(BO),但为了将其与…...

再谈SpringCloud Gateway源码

再谈SpringCloud Gateway源码 一、整体请求流程二、前置对象准备1、实例化HandlerMapping2、实例化Route3、实例化WebHandler 三、实践业务扩展点1、定义扩展Route对象2、Filter能做什么3、定义扩展Filter对象4、定义父类Filter简化请求参数处理 前言: 之前有阅读过…...

把 CSV 文件摄入到 Elasticsearch 中 - CSVES

在我们之前的很多文章里,我有讲到这个话题。在今天的文章中,我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全…...

3.【线性代数】——矩阵乘法和逆矩阵

三 矩阵乘法和逆矩阵 1. 矩阵乘法1.1 常规方法1.2 列向量组合1.3 行向量组合1.4 单行和单列的乘积和1.5 块乘法 2. 逆矩阵2.1 逆矩阵的定义2.2 奇异矩阵2.3 Gauss-Jordan 求逆矩阵2.3.1 求逆矩阵 ⟺ \Longleftrightarrow ⟺解方程组2.3.2 Gauss-Jordan求逆矩阵 1. 矩阵乘法 1.…...

SpringCloud面试题----如何对 Spring Cloud 微服务进行性能优化

架构层面 合理划分微服务 单一职责原则:确保每个微服务只负责单一的业务功能,这样可以降低服务的复杂度,提高可维护性和可扩展性。例如,将用户认证、订单管理、商品管理等不同功能拆分成独立的微服务。避免服务间过度耦合:减少微服务之间的依赖关系,避免因为某个服务的变…...

使用llama.cpp在gpu和cpu上运行deepseek-r1 7b的性能对比

使用deepseek-r1 7b模型的q5km量化版本进行测试, gpu上的token解码速度是cpu的近8倍. 测试环境: ubuntu22.04 x86llama.cpp cpu intel 10750h 4.41 tokens / s model size params backend threads test t/s qwen2 7B Q5_K - Medium 5.07 GiB 7.62 B CPU 6 pp512 …...

BMS项目-面试及答疑整理

1. SOC计算用的什么原理实现的? bms目前计算SOC使用的安时积分+开路电压首先得对电池有一个抽象得概念,把电池比作游泳池,电量比作游泳池里面的水,电流比作流入和流出得水流,那么充电也就是往游泳池里面灌入水流安时积分:对水流进行一个实时监测,比如1S一次监测,那么每…...

【virtiofs】ubuntu24.04+qemu7.0调试virtiofs

文章目录 编译qemu编译buildroot编译linux-6.8.1编译virtiofsd启动脚本qemu调试方法环境: win11 + vmware17 ubuntu24.04 buildroot git clone git://git.busybox.net/buildroot linux-6.8.1 https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.8.1.tar.gz virti…...

【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】

老铁们好!今天我们要来一场长达两万字的超详细技术探险,我会像拆解乐高积木一样把前馈神经网络(Feedforward Neural Network)的每个零件摆在台面上,用最接地气的方式让你彻底搞懂这个深度学习基石的工作原理。准备好了吗?我们开始吧! 第一章:神经网络的 “乐高积木” 1…...

ARINC 429详解

ARINC 429 是航空电子系统中广泛应用的一种串行数据总线标准,由航空无线电公司(ARINC)于1977年制定(ARINC 429规范)。它定义了航空电子设备之间数据传输的电气特性、协议格式和通信规则,是民航和军用飞机中…...

C进阶 数据的存储

目录 前言 一,VS的知识储备 二,有趣的scanf()读取 三,数据的存储 引言 四,整数存储 五,小数存储 总结 前言 这里将深入计算机,看计算机是如何进行数据的存储的,怎么在计算机里面筑巢 为…...

第二十二章 P - R 开头的术语

文章目录 第二十二章 P - R 开头的术语程序员模式 (programmer mode)项目 (project)属性 (property)属性排序 (property collation)属性方法 (property method)公有 (public) 以 Q 开头的术语查询 (query)查询接口 (query interface) 以 R 开头的术语范围指示符 (range indicat…...

【C语言】第一期——数据类型变量常量

目录 1 字面量 2 整数类型 2.1 整数类型的取值范围 2.1.1 sizeof 运算符 2.2 GB、MB、KB、B之间的关系 2.3 定义整数类型的变量并打印 2.4 整数类型代码演示 3 浮点类型 3.1 浮点类型的取值范围 3.2 定义浮点类型变量并打印 3.3 保留2位小数点 4 char字符型 4.1…...

【c++】【Linux】【进程】线程终止/崩溃 会导致进程终止/崩溃 吗?

【c】【Linux】【进程】线程终止/崩溃 会导致进程终止/崩溃 吗? 1.线程终止会导致进程终止吗? 在操作系统中,线程是进程的基本执行单元,一个进程可以包含一个或多个线程。 当一个子线程终止时,进程并不会因此自动终…...

宝藏软件系列 篇一:My APK(Android)

文章目录 系列文章官方网站特色功能同类软件 系列文章 官方网站 My APK 官方版本是在 谷歌商店 中上架的。 官方下载地址:Google Play 商店页面。(需要外网) 2025.2最新版本的CSDN本地下载地址(因为是Android App Bundle&…...

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤,并无gateway详细介绍 gateway详解请查看:SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇: 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…...