一文教你彻底学会SPI协议_spi从机,写给程序员的Flutter详细教程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

2.寻址方式: SPI是通过CS片选信号来选择从机(IIC是通过寻址找到从设备)
3.通信速率:SPI速率较快(可达fPCLK/2),一般用于高速设备之间通信(区别于IIC)

PI区别于IIC,SPI有时钟线,MOSI(主输出从输入线),MISO(zh)
在这里插入图片描述

二.SPI连接

2.1 一主一从

在“一主一从”的SPI互连方式下,只有一个SPI主设备和一个SPI从设备进行通信。这种情况下,只需要分别将主设备的SCK、MOSI、MISO和从设备的SCK、MOSI、MISO直接相连,并将主设备的SS置高电平,从设备的SS接地(即置低电平,片选有效,选中该从设备)即可。

在这里插入图片描述

2.2 一主多从

在“一主多从”的SPI互连方式下,一个SPI主设备可以和多个SPI从设备相互通信。这种情况下,所有的SPI设备(包括主设备和从设备)共享时钟线和数据线,即SCK、MOSI、MISO 3根线,并在主设备端使用多个GPIO引脚来选择不同的SPI从设备。
在这里插入图片描述

三.SPI通信过程

讲通信过程之前,先讲一下极性和相位。后面才能理解后序采样过程。

3.1 CPOL(极性)和CPHA(相位)

CPHA(时钟相位)位被清“0”,数据在SCK时钟的奇数(第1、3、5…个)跳变沿采样.
CPHA(时钟相位)位被置“1”,数据在SCK时钟的偶数(第2、4、6…个)跳变沿采样.
CPOL位为“0”时就是SCK在空闲时为0, CPOL位为“1”时就是SCK空闲时为1。
所以说,CPOL决定了第一个沿是上升沿还是下降沿。如果SCK空闲是为0,那第一个沿为上升沿。如果SCK空闲时为1,那第一个沿为下降沿。
那么总的来说,CPHA和CPOL决定了是上升沿采样还是下降沿采样。
所以总共有4种组合,决定了SPI有4种模式,总的表格如下:
在这里插入图片描述

3.2 SPI时序图

这是一个主机的通讯时序,我们以SPI模式0为例。 NSS、 SCK、 MOSI 信号都由主机控制产生,而 MISO 的信
号由从机产生,主机通过该信号线读取从机的数据。 MOSI 与 MISO 的信号只在 NSS 为低
电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。
SPI的时钟信号具有相位和极性

3.1 SPI起始信号

NSS 信号线由高变低,是 SPI 通讯的起始信号。 NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

3.2 SPI停止信号

NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

3.3 数据的有效性

SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI 及MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时, MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定, MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在SCK 的下降沿时被采样。即在 SCK 的下降沿时刻, MOSI 及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效, MOSI及 MISO 为下一次表示数据做准备。SPI 每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

四.代码实例

这里以和Flash通信为例,下面是一个初始化代码

void SPI\_FLASH\_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
	
	/\* 使能SPI时钟 \*/
	RCC\_APB2PeriphClockCmd( RCC_APB2Periph_SPI1, ENABLE );
	
	/\* 使能SPI引脚相关的时钟 
 1.片选引脚 2.SCK时钟引脚 3.MISO引脚 4.MOSI引脚 \*/
 	RCC\_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOA|
																	     RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOA, ENABLE );
	
  /\* 配置SPI的 CS引脚,普通IO即可 \*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO\_Init(GPIOA, &GPIO_InitStructure);
	
  /\* 配置SPI的 SCK引脚\*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;


为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

![](https://img-blog.csdnimg.cn/img_convert/248febc2588bb2b951d5cb314f406675.png)

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
![img](https://img-blog.csdnimg.cn/img_convert/8f0704cca8f981d897c709b51e3dbec1.jpeg)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
[外链图片转存中...(img-1piAsjSZ-1713476501411)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值