SPI相关知识总结

一、SPI

1.1SPI概念及通讯方式

SPI:串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线
在这里插入图片描述
在这里插入图片描述

2.1 SPI框图

在这里插入图片描述

1.3.数据发送与接收流程

#

1.4 SPI工作模式

1)时钟极性(CPOL)
没有数据传输时时钟线的空闲状态电平
0:SCK在空闲状态保持低电平
1:SCK在空闲状态保持高电平
2)时钟相位(CPHA)
时钟线在第几个时钟边沿采样数据
0:SCK的第一(奇数)边沿进行数据位采样,数据在第一个时钟边沿被锁存
1:SCK的第二(偶数)边沿进行数据位采样,数据在第二个时钟边沿被锁存
3)四种模式
在这里插入图片描述

1.5 寄存器配置

在这里插入图片描述
1)SPI_CR1
在这里插入图片描述
在这里插入图片描述
2)SPI_SR
在这里插入图片描述
3)SPI_DR
在这里插入图片描述

1.6 SPI重要结构体

SPI_HandleTypeDef
{
SPI_TypeDef *Instance
SPI_InitTypeDef Init
}

SPI_InitTypeDef
{
uint32_t Mode /* SPI模式(主机) /
uint32_t Direction /
工作方式(全双工) /
uint32_t DataSize /
帧格式(8位) /
uint32_t CLKPolarity /
时钟极性(CPOL = 0) /
uint32_t CLKPhase /
时钟相位 (CPHA = 0)/
uint32_t NSS /
SS控制方式(软件) /
uint32_t BaudRatePrescaler /
SPI波特率预分频值 /
uint32_t FirstBit /
数据传输顺序(MSB)/
uint32_t TIMode /
帧格式:Motorola / TI /
uint32_t CRCCalculation /
设置硬件CRC校验 /
uint32_t CRCPolynomial /
设置CRC校验多项式 */
}

2 NOR FLASH

2.1 FLASH

FLASH是有一个物理特性:只能写0,不能写1,写1靠擦除(按“扇区/块”擦除)
FLASH主要有NOR Flash和NAND Flash两种类型

2.2NM25Q128

属于NOR FLASH中的一种,支持模式0(CPOL = 0 , CPHA = 0)和模式3(CPOL = 1, CPHA = 1),数据长度8位大小,先发高位,再发低位.
在这里插入图片描述
在这里插入图片描述

2.3 常用指令

在这里插入图片描述

2.4 读时序 Read Data Bytes(03H)

在这里插入图片描述
代码实例
NORFLASH_CS(0);

/* 1 发送读命令 */
spi2_read_write_byte(0x03);

/* 2 发送地址 */
spi2_read_write_byte(addr >> 16);
spi2_read_write_byte(addr >> 8);
spi2_read_write_byte(addr);

/* 3 读取数据 */
rec_data = spi2_read_write_byte(0xFF);

NORFLASH_CS(1);

2.6 擦除时序 (20H)在这里插入图片描述

/* 1 写使能 */
NORFLASH_CS(0);
spi2_read_write_byte(0x06);
NORFLASH_CS(1);

/* 2 等待空闲 */
while(norflash_rd_sr1()&0x01);

/* 3 发送扇区擦除指令 */
NORFLASH_CS(0);
spi2_read_write_byte(0x20);

/* 4 发送地址 */
spi2_read_write_byte(addr >> 16);
spi2_read_write_byte(addr >> 8);
spi2_read_write_byte(addr);
NORFLASH_CS(1);

/* 5 等待空闲 */
while(norflash_rd_sr1()&0x01);

2.7 写时序(02H)

在这里插入图片描述
/* 1 擦除扇区 */
norflash_erase_sector(addr);

/* 2 写使能 */
NORFLASH_CS(0);
spi2_read_write_byte(0x06);
NORFLASH_CS(1);

/* 3 发送页写指令 */
NORFLASH_CS(0);
spi2_read_write_byte(0x02);

/* 4 发送地址 */
spi2_read_write_byte(addr >> 16);
spi2_read_write_byte(addr >> 8);
spi2_read_write_byte(addr);

/* 5 要写入的数据 */
spi2_read_write_byte(data);
NORFLASH_CS(1);

/* 6 等待写入完成(等待空闲) */
while(norflash_rd_sr1()&0x01);

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenGL编程手册08】 摄像机

一、说明 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感…

LeetCode 2673. 使二叉树所有路径值相等的最小代价【贪心】1917

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

附录:jdk安装及环境变量的配置

jdk的安装 JDK (Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。 下载jdk 在 oracle 官网中下载 jdk https://www.oracle.com/ 点击 JDK 下载自己需要的 JDK 版本&…

《UE5_C++多人TPS完整教程》学习笔记27 ——《P28 项目资产(Assets for The Project)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P28 项目资产(Assets for The Project)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译…

BUUCTF---[ACTF2020 新生赛]BackupFile1

1.题目描述 2.题目提示backup file ,是备份文件的意思。点开链接,页面提示 3.查看源码没有什么有用信息,也没有登录界面,所以也不会用到蚁剑链接来找备份文件,所以大概率就是通过构造playload来查找备份文件。 4.备份…

rust学习(tokio future分析)

自己编写一个impl future来看一下Tokio的是如何实现的。 第一步&#xff1a; 代码&#xff1a; struct TExecuteTask {count:u32 }impl Future for TExecuteTask {type Output ();fn poll(self: Pin<&mut Self>, cx: &mut Context<_>) -> Poll<S…

Pygame教程03:文本显示+字体加载+transform方法

------------★Pygame系列教程★------------ Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;draw方法绘制矩形、多边形、圆、椭圆、弧…

Java8,函数式编程应用:

持续更新中&#xff1a; 函数式(Functional)接口 什么是函数式(Functional)接口 只包含一个抽象方法的接口&#xff0c;称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。&#xff08;若 Lambda 表达式 抛出一个受检异常(即&#xff1a;非运行时异常)&#xff0c…

Crossbar阵列的电路结构及其基本原理

忆阻器Crossbar阵列是一种先进的神经网络硬件实现技术&#xff0c;它利用忆阻器的物理特性来模拟神经网络中的突触连接&#xff0c;为人工智能和机器学习应用提供了一种高效、低能耗的计算平台。本文将深入探讨忆阻器Crossbar阵列的基本原理及其在Read&#xff08;读取&#xf…

运维随录实战(2)之k8s部署应用

一, 创建.gitlab-ci.yml文件 架构流程 文件内容 stages: #设置流水线模版- build # 编译- source2img- deploy # 发布variables: # 设置全局变量MAVEN_PATH: .m2MAVEM_IMAGE: maven:3.8.5-openjdk-17-slim # maven 打包使用的镜像MAVEN_CLI_OPTS: "-s $MAVEN_PATH/set…

稀碎从零算法笔记Day7-LeetCode:罗马数字转整数

题型&#xff1a;字符串转化、找规律 链接&#xff1a;13. 罗马数字转整数 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 …

【深圳五兴科技】Java后端面经

本文目录 写在前面试题总览1、java集合2、创建线程的方式3、对spring的理解4、Spring Boot 和传统 Spring 框架的一些区别5、springboot如何解决循环依赖6、对mybatis的理解7、缓存三兄弟8、接口响应慢的处理思路9、http的状态码 写在前面 关于这个专栏&#xff1a; 本专栏记录…