八、SPI读写XT25数据

news2025/3/12 12:41:46

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

        持续更新。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visionpro 齿轮测量

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

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

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

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

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

API 接口自动化

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

安全测试|SSRF请求伪造

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

智能编程助手功能革新与价值重塑之: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. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦,使代码模块之间功能职责更清晰。而分布…

再谈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 及带有安全…

C进阶 数据的存储

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

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

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

springcloud集成gateway

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

pandas(13 Caveats Gotchas和SQL比较)

前面内容:pandas(12 IO工具和稀松数据) 目录 一、Caveats警告 & Gotchas预见 1.1 在Pandas中使用if/Truth语句 1.2 位运算布尔 1.3 isin操作 1.4 重新索引reindex和 loc&iloc 使用注意事项 1.5 loc和iloc 二、Python Pandas 与SQL的比较 2.1 数…

Android的Activity生命周期知识点总结,详情

一. Activity生命周期 1.1 返回栈知识点 二. Activity状态 2.1 启动状态 2.2 运行状态 2.3 暂停状态 2.4 停止状态 2.5 销毁状态 三. Activity生存期 3.1 回调方法 3.2 生存期 四. 体验Activity的生命周期 五. Activity被回收办法 引言: 掌握Acti…

基于Python的Flask微博话题舆情分析可视化系统

2024数据 ✅️标价源码 远程部署加 20 ✅️爬虫可用 有六月数据 ✅️修复bug不会突然打不开网页 系统稳定 系统的功能如下: 1.数据的爬取 2.用户的登录注册 3.热词统计,舆情统计 4.文章统计分析 5.发布地址统计 6.评论统计 7.情感分类统计 编程语言:py…

【油漆面积——线段树,扫描线,不用pushdown的特例,pushup兼有cal的性质】

题目 分析 不用pushdown是因为: 对于modify,操作是互逆过程,因此不会存在向下结算的pushdown过程 对于query,操作始终针对最上层的tr[1],也不需要pushdown 对于pushdown,一则是怕不结算就标记,会…

深度学习(1)-简单神经网络示例

我们来看一个神经网络的具体实例:使用Python的Keras库来学习手写数字分类。在这个例子中,我们要解决的问题是,将手写数字的灰度图像(28像素28像素)划分到10个类别中(从0到9)​。我们将使用MNIST…

硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍

目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在每个步进…

Shader示例 6: 卡渲基础 - 描边 + 着色

0 、获取原神模型: 【游戏开发实战】下载原神模型,PMX转FBX,导入到Unity中,卡通渲染,绑定人形动画(附Demo工程)-CSDN博客 《原神》公测视频征集计划 一、描边pass:Outline 1. …