SPI接口协议的学习2

Autosar SPI 学习笔记 1、Job的优先级用于SPI Driver调度开始前对调度Job的顺序排序;2、当一个Job正在传输时,不能被其他高优先级的Job中断(挂起);3、当一个Job传输完成时,若改Job所在的Sequence是可中断的,则该Sequence可以被拥有高优先级Job的Sequence中断,SPI Driver会重新调度高优先级Job所在的Sequence。4、Sequence没有优先级。 阅读详情

SPI硬件控制主要涉及寄存器操作。
这里仅说明下控制寄存器相关内容。
SPIx_CON: SPIx control register (16bit addressing)寄存器说明:
15 PND r
中断请求标志,当 1Byte 传输完成或 DMA 传输完成时会被硬件置 1。
有 3 种方法清除此标志
向 PCLR 写入‘1’
写 SPIBUF 寄存器来启动一次传输
写 SPICNT 寄存器来启动一次 DMA
14 PCLR w
软件在此位写入‘1’将清除 PND 中断请求标志。
13 IE rw
SPI 中断使能
0: 禁止 SPI 中断
1: 允许中断允许
12 DIR rw
在单向模式或 DMA 操作时设置传输的方向
0: 发送数据
1: 接收数据
11-10 DATW r
SPI 数据宽度设置
00: 1bit 数据宽度
01: 2bit 数据宽度
10: 4bit 数据宽度
11:NA,不可设置为此项
(注:SPI0 支持 1bit,2bit 和 4bit 模式,SPI1/SPI2 只支持 1bit 模式)
9 reserved r
0
8 reserved r
0
7 CSID rw
SPICS 信号极性选择
0: SPICS 空闲时为 0 电平
1: SPICS 空闲时为 1 电平第 9 章 SPI
6 CKID rw
SPICK 信号极性选择
0: SPICK 空闲时为 0 电平
1: SPICK 空闲时为 1 电平
5 UE rw
更新数据边沿选择
0: 在 SPICK 的上升沿更新数据
1: 在 SPICK 的下降沿更新数据
4 SE rw
采样数据边沿选择
0: 在 SPICK 的上升沿采样数据
1: 在 SPICK 的下降沿采样数据
3 BIDIR rw
单向/双向模式选择
0: 单向模式,数据单向传输,同一时刻只能发送或者接收数据。
数据传输方向因收发而改变,所以由硬件控制,不受写 IO 口 DIR 影响。
1: 双向模式,数据双向传输,同时收发数据,但 DMA 只支持一个方向的数
据传输。 数据传输方向设置后不改变,所以由软件控制,通过写 IO 口 DIR 控制
2 CSE rw
SPICS 信号使能
0: 不使用 SPICS 信号
1: 使用 SPICS 信号
1 SLAVE rw
从机模式
0 SPIE rw
SPI 接口使能
0: 关闭 SPI 接口
1: 打开 SPI 接口
根据寄存器相关说明,定义相关宏,方便代码使用:
enum spi_mode {
SPI_MODE_BIDIR_1BIT, //支持SPIx(x=0,1,2),全双工,di接收,do发送
SPI_MODE_UNIDIR_1BIT, //支持SPIx(x=0,1,2),半双工,do分时发送/接收
SPI_MODE_UNIDIR_2BIT, //支持SPIx(x=0),半双工,di & do共2bit分时发送/接收
SPI_MODE_UNIDIR_4BIT, //支持SPIx(x=0),半双工,di & do & d2 & d3共4bit分时发送/接收
};
SPI支持多种位宽。SPI1、2仅支持1bit位宽。

enum spi_role {
SPI_ROLE_MASTER,//主机,0
SPI_ROLE_SLAVE,//从机,1
};
主动机宏定义。

对于寄存器的操作:
#define spi_enable(reg) ((reg)->CON |= BIT(0))//使能
#define spi_disable(reg) ((reg)->CON &= ~BIT(0))//禁能
#define spi_role_slave(reg) ((reg)->CON |= BIT(1))//从机模式
#define spi_role_master(reg) ((reg)->CON &= ~BIT(1))//主机模式
#define spi_cs_en(reg) ((reg)->CON |= BIT(2))//片选使能
#define spi_cs_dis(reg) ((reg)->CON &= ~BIT(2))//片选禁能
#define spi_bidir(reg) ((reg)->CON |= BIT(3))//双向模式
#define spi_unidir(reg) ((reg)->CON &= ~BIT(3))//单向模式
#define spi_smp_edge_rise(reg) ((reg)->CON &= ~BIT(4))//上升沿采样
#define spi_smp_edge_fall(reg) ((reg)->CON |= BIT(4))//下降沿采样
#define spi_ud_edge_rise(reg) ((reg)->CON &= ~BIT(5))//上升沿更新数据
#define spi_ud_edge_fall(reg) ((reg)->CON |= BIT(5))//下降沿更新数据
#define spi_clk_idle_h(reg) ((reg)->CON |= BIT(6))//CK空闲为高电平
#define spi_clk_idle_l(reg) ((reg)->CON &= ~BIT(6))//CK空闲为低电平
#define spi_cs_idle_h(reg) ((reg)->CON |= BIT(7))//CS空闲为高电平
#define spi_cs_idle_l(reg) ((reg)->CON &= ~BIT(7))//CS空闲为低电平
#define spi_data_width(reg, x) ((reg)->CON = (reg->CON&~(3<<10))|((x)<<10))//位宽1、2、4bit
#define spi_dir_in(reg) ((reg)->CON |= BIT(12))//接收
#define spi_dir_out(reg) ((reg)->CON &= ~BIT(12))//发送
#define spi_ie_en(reg) ((reg)->CON |= BIT(13))//允许中断
#define spi_ie_dis(reg) ((reg)->CON &= ~BIT(13))//禁止中断
#define spi_clr_pnd(reg) ((reg)->CON |= BIT(14))//清除中断标志
#define spi_pnd(reg) ((reg)->CON & BIT(15))//中断标志

#define spi_w_reg_con(reg, val) ((reg)->CON = (val))//写控制寄存器
#define spi_r_reg_con(reg) ((reg)->CON)//读控制寄存器
#define spi_w_reg_buf(reg, val) ((reg)->BUF = (val))//写buf寄存器
#define spi_r_reg_buf(reg) ((reg)->BUF)//读buf寄存器
#define spi_w_reg_baud(reg, baud) ((reg)->BAUD = (baud))//写波特率寄存器
#define spi_r_reg_baud(reg) ((reg)->BAUD)//读波特率寄存器
#define spi_w_reg_dma_addr(reg, addr) ((reg)->ADR = (addr))//写DMA起始地址
#define spi_w_reg_dma_cnt(reg, cnt) ((reg)->CNT = (cnt))//写DMA传输个数

至此,SPI硬件相关内容分析完成,主要包括:
1、芯片SPI数量;
2、每个SPI包含的组;
3、每个组包含哪些IO;
4、寄存器说明;
5、寄存器的访问宏定义。

设计时根据芯片资源情况,查看哪些SPI可以使用,分别是哪些组、哪些接口。
对于SPI的选择配置:
#define TCFG_HW_SPI0_ENABLE ENABLE_THIS_MOUDLE
//A组IO: DI: PD2 DO: PD1 CLK: PD0 D2:PB7 D3:PD5
//B组IO: DI: PA14 DO: PD1 CLK: PD0 D2:PA15 D3:PD5
//C组IO: DI: PA6 DO: PA8 CLK: PA3 D2:PA7 D3:PA2
//D组IO: DI: PB8 DO: PB10 CLK: PB5 D2:PB9 D3:PB4
#define TCFG_HW_SPI0_PORT ‘C’
#define TCFG_HW_SPI0_BAUD 48000000L
#define TCFG_HW_SPI0_MODE SPI_MODE_BIDIR_1BIT //SPI_MODE_UNIDIR_1BIT//
#define TCFG_HW_SPI0_ROLE SPI_ROLE_MASTER

#define TCFG_HW_SPI1_ENABLE 0//ENABLE_THIS_MOUDLE
//A组IO: DI: PB2 DO: PB1 CLK: PB0
//B组IO: DI: PC3 DO: PC5 CLK: PC4
#define TCFG_HW_SPI1_PORT ‘A’
#define TCFG_HW_SPI1_BAUD 4000000L
#define TCFG_HW_SPI1_MODE SPI_MODE_BIDIR_1BIT
#define TCFG_HW_SPI1_ROLE SPI_ROLE_MASTER

#define TCFG_HW_SPI2_ENABLE 0//ENABLE_THIS_MOUDLE
//A组IO: DI: PB8 DO: PB10 CLK: PB9
//B组IO: DI: PA13 DO: DM CLK: DP
#define TCFG_HW_SPI2_PORT ‘A’
#define TCFG_HW_SPI2_BAUD 2000000L
#define TCFG_HW_SPI2_MODE SPI_MODE_BIDIR_1BIT
#define TCFG_HW_SPI2_ROLE SPI_ROLE_MASTER
这里提供了SPI0、SPI1、SPI2的选择配置,包括SPI0、SPI1以及SPI2的使能、组的选择、波特率的配置、位宽配置、主从机配置。

该宏定义使用于以下结构体:
struct spi_platform_data {
u8 port; //端口,可选’A’, ‘B’
u8 mode; //模式,位宽和全双工、半双工配置,选项为enum spi_mode中的枚举常量
u8 role; //角色,主从机,选项为enum spi_role中的枚举常量
u32 clk; //波特率
};

#if TCFG_HW_SPI0_ENABLE
const struct spi_platform_data spi0_p_data = {
.port = TCFG_HW_SPI0_PORT,
.mode = TCFG_HW_SPI0_MODE,
.clk = TCFG_HW_SPI0_BAUD,
.role = TCFG_HW_SPI0_ROLE,
};
#endif
#if TCFG_HW_SPI1_ENABLE
const struct spi_platform_data spi1_p_data = {
.port = TCFG_HW_SPI1_PORT,
.mode = TCFG_HW_SPI1_MODE,
.clk = TCFG_HW_SPI1_BAUD,
.role = TCFG_HW_SPI1_ROLE,
};
#endif

#if TCFG_HW_SPI2_ENABLE
const struct spi_platform_data spi2_p_data = {
.port = TCFG_HW_SPI2_PORT,
.mode = TCFG_HW_SPI2_MODE,
.clk = TCFG_HW_SPI2_BAUD,
.role = TCFG_HW_SPI2_ROLE,
};
#endif
以上为SPI的平台级配置。通过该配置来进行相应SPI接口的初始化操作。

SPI接口协议创新方向及实施路径分析 阅读详情

相关推荐

STM32F103 SPI DMA收发(SPI2发送 SPI1接收)

目录 STM32 SPI DMA收发 GPIO初始化 SPI初始化 DMA初始化 问题记录 STM32F103 SPI DMA收发 GPIO初始化 void my_spi_init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphCloc...

REALIOT'S BLOG 9899

SPI协议详细总结附实例图文讲解通信过程(快速掌握)

SPI(Serial Peripheral Interface,串行外设接口) 协议是一种高速高效率、全双工的通信总线,允许CPu与低速的外围设备之间进行同步串行数据的传输,主要是用同步的时钟信号对串行的数据同时进行发送和接收操作,从而实现全双工。常用于短距离通讯,主要是在嵌入式系统中。SPI接口在芯片内部只占用四根线,主要有两条数据线、一根片选线和一根时钟信号线。这四根线分别对应SPI协议传输时的四种信号,分别有主机输出信号MOSI、从机输入信号MISO、片选信号sS n以及输出的时钟信号SCK。

Luckiers的博客 3万+

嵌入式系统中各类存储方式的区别及接口协议详解

在kernel优化时,也可以考虑硬件层面用的协议是否已经是最优解。在嵌入式系统中,存储设备的选择直接影响系统性能、成本和设计复杂度。

weixin_48175016的博客 1512

SPI通信协议

串行外设接口( Serial Peripheral Interface,SPI )是一种同步全双工主从式接口。SPI一般包括四根线,分别为CS(片选),SCLK(时钟线),MOSI(主机输出,从机输入),MISO(主机输入,从机输出)。其中CS片选是用来选择哪一台从机与主机通信,当从机片选引脚为高电平或者为低电平时(一般为低电平,具体看芯片手册),主机就知道了与哪一个从机通信,因为是一台主机,多台从机通信方式,所以称为主从式通信方式,当使用多个从机时,主机需要为每个从机提供单独的片选信号。

weixin_45832357的博客 2368

FPGA实现SPI接口(1)--什么是SPI接口?

通过本文您会学到:什么是SPI协议?如何用FPGA实现?

孤独的单刀 9万+

SPI协议详解

一、SPI简介 SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速、全双工、同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了SPI通信协议,如FLASH、AD转换器等。SPI的通信原理比较简单,它以主从方式工作,通常有一个主设备和一个或多个从设备。 二、SPI接口 SPI通信需要四根线,分别为SPI_CS、SPI_CLK、SPI_MOSI和SPI_MISO。其中SP

耐心的小黑的博客 5374

SPI中NSS/CS使用和SPI常见问题

前言 SPI是常用的通信手段之一,经常使用,但也经常踩坑;网上资料很多,但对于CS/NSS使用的讲解比较少,正好最近使用SPI也遇到了一些问题,记录一下。 SPI中NSS作用和用法 简单来说,NSS和CS是一个东西,主要用于片选从机的。SPI控制器上连接的内部NSS引脚。 NSS硬件模式和软件模式:可以通过寄存器配置,选择将内部NSS引脚连接到SSI寄存器,使用寄存器控制NSS电平,也可以选择内部NSS引脚和外部真正的NSS GPIO相连,由外部引脚电平来控制NSS。 我画了一个关系图,可以清晰的看明白NS

qq_41890114的博客 4万+

嵌入式(3):10大核心接口协议深度解析与实战指南

在嵌入式开发领域,设备间的数据交互离不开各类接口与协议,它们如同不同设备沟通的“数字语言”。从智能手环的传感器数据传输,到自动驾驶汽车的ECU协同控制,掌握这些“语言”是每一位嵌入式工程师的必修课。本文将深入剖析10大核心接口协议,结合实战代码、时序图和选型指南,助力你快速成长为嵌入式开发高手!

优快云-新能源汽车研发测试专业博主 5633

SPI接口协议

SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准,串行外设接口(SPI)是微控制器和外围IC(如传感器、 ADC、 DAC、移位寄存器、 SRAM等)之间使用最广泛的接口之一。SPI是一种同步、全双工、主从式接口,来自主机或从机的数据在时钟上升沿或下降沿同步,主机和从机可以同时传输数据, SPI接口可以是3线式或4线式。

wkonghua的博客 3276

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2142

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 484

SPI接口协议的学习1

SPI接口的学习,包含SPI的模式,接口连线、定义等说明

csdn_ndsc 1895

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4819

FPGA常用接口协议--SPI

SPI是一种高速的、全双工、同步的通信总线, 常用于MCU和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。现如今,SPI总线已经成为被广泛应用的一种数据传输方式,由于其简单的接口、灵活性和易用性,SPI 已成为一种标准,SPI被半导体制造商广泛应用于IC芯片。

初探芯途学未深,且将浅见记留痕。 语言工具皆粗解,但乞方家正误真。 2885

【MFRC522】STM32与MFRC522的SPI通信优化及常见问题解析

本文深入解析了STM32与MFRC522进行SPI通信的优化方法与常见问题。从基础的硬件连接到SPI时序优化,再到关键的寄存器配置(如RFCfgReg设为0x4F以提升读卡稳定性),文章提供了详细的调试技巧和实战排坑指南,帮助开发者实现稳定高效的IC读卡应用。

yhn45678901的博客 841

ximalaya 新xm-sign逆向思路

本文主要介绍目标网站新xm-sign值的逆向思路。仅代表个人理解,如有其他建议可在评论区沟通。声明仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除。

weixin_66580433的博客 2017

FPGA学习_SPI接口协议设计

之前写过一篇UART动态纠正接收时钟的文章,UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步;双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。

m0_56222647的博客 1475

STM32N6570-DK识别STLINK问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2209

SPI接口协议的学习3

SPI接口学习3,寄存器控制、GPIO配置等操作

csdn_ndsc 780

HDOCK 蛋白蛋白对接软件使用;LZerD、pyDock、ClusPro网页在线对接

参考:hdock支持蛋白与蛋白,也支持蛋白与核酸对接计算。

weixin_42357472的博客 1万+

华为OD机试真题 新系统2026-04-01 Java&Go【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 2040

基于FPGA实现SPI接口协议(一)

UART,IIC以及SPI作为三个基本的低速接口协议,是我们经常使用的,本系列将简单介绍SPI的接口协议,然后用几个简单的demo案例(对flash的操作)对SPI接口进行熟悉。 本文介绍SPI通信协议的基本内容以及FLASH芯片的相关基本的知识。 SPI通信协议的基本介绍 SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 .

啦啦啦啦啦 4711

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SPI接口协议以及性能演进案例

为,是一种的通信协议,由摩托罗拉(Motorola)在 1980 年代中期提出,最初用于其微控制器(MCU)与外设之间的短距离通信。在 SPI 协议出现之前,微控制器与外设的通信多采用方式。并行通信需要多根数据线(如 8 位、16 位),硬件布线复杂,占用大量的 GPIO 引脚,不适合小型化、低成本的嵌入式系统。此外,当时的串行通信方案(如早期 UART)多为异步通信,速率较低且不支持全双工,无法满足高速外设(如 SPI Flash、ADC/DAC)的通信需求。

u012986037的博客 973

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

接口协议学习(一):SPI

目录SPISPI工作模式SPI时序 SPI SPI(Serial Peripheral Interface,外围串行接口),是一种全双工三线同步串行外围接口,采用主从模式(Master—Slave)架构,支持一个或多个Slave设备。 SPI协议比较简单,没有地址选择,没有响应,只是按照时序往从机写或者读出数据,不知道数据是否写入或者读出,在低干扰或者对数据的准确度要求不是特别高的场合可以使用。如果有响应的话,可以知道数据是否写入,数据是否读出。 单工:仅支持数据往一个方向传输(主机到从机或者从机到主机)

qq_40483920的博客 1787

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

常见接口协议介绍

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1973
上一篇: SPI接口协议的学习1
下一篇: SPI接口协议的学习3
freedomAfish
博客等级 码龄15年 19粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值