历史上的今天
返回首页

历史上的今天

今天是:2025年12月16日(星期二)

正在发生

2022年12月16日 | spi协议时序图和四种模式实际应用详解

2022-12-16 来源:zhihu

上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法。

刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识。

特别是SPI和IIC的,以前写程序都直接复制别人程序,功能实现就行了也没去研究过数据传输的时候时序具体是怎么样的。

那个时候经验也不足,网上搜的资料说的都太学术化了,也看不懂。

后面项目做多了,发现最常用到的通信总线无非就是SPI、IIC、USART、CAN、单口通信。

理解也慢慢深刻了,现在去分析时序图也更加清晰了。

所以,我经常和无际单片机编程的学员灌输一种理念,先学会用,用多了经验丰富了再深入就轻松了

不要在你没经验的时候去死磕,否则会付出很多不必要的时间成本。

下面,我们进入主题。

一、spi四种模式详解

在讲时序图之前,我们先要了解spi的四种模式,不同的模式采集数据的方式不一样。

一般内置SPI功能的单片机上,都有两个寄存器配置位CPOL和CPHA。

我们拿STM32单片机来举例,可以通过结构体成员配置。



这是通过固件库直接配置,固件库底层代码也是去配置相应寄存器的。





下面来介绍下CPOL和CPHA到底有什么用。

CPOL就是决定SCLK这个时钟信号线,在没有数据传输的时候的电平状态。

CPOL=0:空闲状态时,SCLK保持低电平

CPOL=1:空闲状态时,SCLK保持高电平



CPHA就是决定数据位传输是从第一个时钟(SCLK)边沿开始,还是第二个从二个时钟(SCLK)边沿开始。

CPHA=0:数据从第一个时钟(SLCK)边沿开始采集

CPHA=1:数据从第二个时钟(SLCK)边沿开始采集



Ok,理解CPOL和CPHA基本概念以后,下面这两个要开始”合体”了。

CPOL和CPHA合体就形成了SPI四种模式。



声明:部分图片源自网络,并非原创哈。

下面再分析下4种模式的区别,比较重要。

因为从机,从机指的是使用SPI协议通信的芯片,比如说w25q64(Flash)芯片,OLED屏等等。

很多从机没有CPOL和CPHA寄存器设置位,如果你看它们数据手册会一脸懵逼,根本找不到这两个东西。

这些都是需要看他们时序图去分析是用什么模式,如果模式不对,数据传输会有问题。

这也是为什么明明自己写了时序用在这个芯片可以,换到别的spi通信的芯片就不行。

1.模式0(CPOL=0,CPHA=0)

模式0特性:

CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿

CPHA = 0:数据在第1个跳变沿(上升沿)采样



2.模式1(CPOL=0,CPHA=1)

模式1特性:

CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿

CPHA = 1:数据在第2个跳变沿(下降沿)采样



3.模式2(CPOL=1,CPHA=0)

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 0:数据在第1个跳变沿(下降沿)采样



4.模式3(CPOL=1,CPHA=1)

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 1:数据在第2个跳变沿(上升沿)采样



不知道你有没有发现,不同的模式,其实就是SCLK空闲时间电平状态和数据采样起点不同

你学废了吗?当初我就是这几种模式看得一脸懵逼。

如果不懂,先从开头继续看,这4种模式是后面分析整体时序图的前提。

二、spi时序图详解

看到这里恭喜你,你马上就能彻底攻破SPI协议了。

Spi时序图,最好的方式就是通过实际应用去学习。

我们拿W25Q64这个Flash芯片举例,这种芯片在SPI通信里都是作为从机的角色,也就SPI Slave。

一般由单片机或者其它处理器作为主控和它通信,SLCK时钟也是由主控发出。

下面是W25Q64读数据指令的时序图,我们以这个例子来讲解下时序图要怎么看。



1.先确定芯片支持什么SPI哪种模式读写数据

确定了用哪种模式,主控,也就是单片机这边才能确定数据采集的方式,主控和从机要保持一致。

从时序图中,不难发现,W25Q64的数据手册直接告诉你支持用SPI模式0和模式3来通信。

有些芯片的数据手册,是没有告诉你的,那怎么知道用芯片哪种模式?



第一步:通过时序图分析CLK空闲时的电平状态,通过上面那个时序图,我们可以得知,高低电平都可以对吧?那我们现在先用CLK空闲时是低电平这种状态继续往下分析。

第二步:分析DI和DO是在CLK的上升沿还是下降沿采集数据,注意DI代表从机(W25Q64)的MISO引脚,DO代表从机(W25Q64)MOSI引脚。

我们主要通过DI和DO在数据有效区时CLK是上升沿还是下降沿,来判断

什么是数据有效区?



大家看上面这张图,我用红色框起来的区域就是数据有效区。

一般数据是通过DI和DO两个引脚传输的,所以数据有效区就是,这一时刻,这两个引脚的只能是稳定高电平或者低电平。

相当于数据有效区的电平就是最终要传输的数据位,低电平代表0,高电平代表1

传输8个位,代表1个字节的数据。

什么是无效数据区?



例如上图蓝色框的区域就是无效数据区,就是这个时刻CLK数据采集时钟还没来,所以DI和DO引脚的电平都可以任意变化。

理解了这两个概念以后,我们重点需要关心是的DI和DO在数据有效区的时候,CLK是上升沿还是下降沿



从上图可以看出,DI和DO在数据有效区时,CLK是上升沿,下降沿的时候,DI和DO处于电平可任意变化的无效数据区。

这样,就可以分析出模式了。

首先上升沿采集数据,通过排除法,这样只有模式0和模式3符合条件。

然后就是CLK空闲时间要为低电平,这样就只有模式0符合了。

所以,知道用模式0以后,单片机那边写程序就知道数据是从CLK上升沿读取,或者发送,还是从下降沿了。

2.分析整体时序

分析时序,我们一定要先熟悉这个时序要实现什么功能,不同的功能虽然时序不一样,但是发送数据的顺序和定义不同。

我们现在分析的这个时序是从W25Q64这个Flash芯片读取存储的数据。



我把整个时序按CLK脉冲顺序拆分成3个部分:

①读指令

这里要注意的是,读指令数据是在W25Q64的DI引脚产生的,DI相当于W25Q64的MISO,就是接收主控(一般是单片机)发送过来的数据。

所以,这个读指令(0x03)是单片机发给W25Q64的

0x03被拆分成8个Bit在DI线上传输,每个CLK上升沿传输1个Bit。



②24位地址

发完读指令以后,单片机继续发24位的内存地址,相当于要读W25Q64哪个内存地址的数据。

这个数据是由单片机程序定的,所以不是固定的,大家可以看到数据位都是可以高电平,也可以是低电平。

③单片机接收数据

这个时候通信双方的角色就变了,单片机变成了数据接收方,W25Q64变成了数据发送方。

因为数据从W25Q64的DO发出了,也就是W25Q64的MOSI引脚。

通过这个时序,单片机就可以读到存储在W25Q64指定地址的数据了。

如果你是我们无际单片机编程学员,看文章还不是很理解的话,可以跟我反馈,反馈的人多就直播讲解,如果少就针对性一对一远程电话讲解。

三、单片机程序注意

51单片机一般没有内置SPI模块,所以整个时序需要自己写程序去模拟,简称模拟SPI。

而STM32单片机一般有内置SPI,就不用自己写程序去模拟时序,直接应用。

但是如果用内置SPI有一个细节,特别容易被忽略,就是你读数据的时候,读一个字节之前要先发一个字节任意值数据。

发一个字节任意值数据是为了在CLK总线上产生时钟,给从机的SPI信号提供时钟用的,从机SPI不会自己产生CLK信号的。

比如我下面这个读数据函数:



能理解到这一步,你基本上就已经吃透SPI协议了。

不管从机怎么换,比如说不是W25Q24了,换成OLED屏了,时序原理也是一样的,只是相关的指令和寄存器不同。


推荐阅读

史海拾趣

Fong Ya Enterprise Co Ltd公司的发展小趣事

Fong Ya Enterprise Co., Ltd在电子行业中的发展故事

故事一:初创与基础奠定

Fong Ya Enterprise Co., Ltd(以下简称“丰雅企业”)成立于某个时期(具体年份可能因资料限制而未知),自那时起便致力于电子元件领域,特别是电阻器的研发与生产。初期,公司面临着市场竞争激烈、技术壁垒高等挑战,但凭借对电子技术的深刻理解和对市场需求的敏锐洞察,丰雅企业逐步确立了自身的产品定位,即专注于高品质、高性能的电阻器产品。通过不断优化生产工艺和提升产品质量,丰雅企业在电子行业逐渐站稳了脚跟。

故事二:技术创新与产品研发

随着电子行业的快速发展,丰雅企业深刻认识到技术创新的重要性。公司加大了对研发的投入,引进了一批高素质的技术人才,并建立了完善的研发体系。通过不断的技术创新,丰雅企业成功开发出了一系列具有自主知识产权的新型电阻器产品,这些产品不仅性能优越,而且满足了市场对电子元器件日益多样化的需求。同时,公司还积极与国内外知名高校和科研机构开展合作,共同推动电子元件技术的进步。

故事三:市场拓展与国际化战略

在稳固国内市场的同时,丰雅企业积极实施国际化战略,将目光投向了更广阔的国际市场。公司参加了多个国际性的电子展会,与全球各地的客户建立了良好的合作关系。通过提供优质的产品和服务,丰雅企业在国际市场上赢得了良好的口碑和信誉。此外,公司还根据不同国家和地区的市场特点,制定了差异化的营销策略,进一步扩大了市场份额。

故事四:供应链管理优化

为了提高生产效率和降低成本,丰雅企业不断优化供应链管理。公司与多家优质供应商建立了长期稳定的合作关系,确保原材料的质量和供应的稳定性。同时,公司还引入了先进的供应链管理系统,实现了对生产、采购、库存等各个环节的精细化管理。通过优化供应链管理,丰雅企业不仅提高了生产效率,还降低了运营成本,为企业的可持续发展奠定了坚实的基础。

故事五:品牌建设与企业文化

在多年的发展过程中,丰雅企业始终注重品牌建设和企业文化建设。公司坚持“质量第一、客户至上”的经营理念,致力于为客户提供优质的产品和服务。同时,公司还注重培养员工的创新精神和团队协作精神,营造了积极向上的企业文化氛围。通过品牌建设和企业文化的推动,丰雅企业在电子行业中的知名度和影响力不断提升,为企业的长远发展注入了强大的动力。

需要注意的是,由于具体年份和详细数据的限制,以上故事在描述时可能存在一定的概括性。然而,这些故事都基于丰雅企业在电子行业中的实际发展情况而构建,旨在展现其在技术创新、市场拓展、供应链管理和品牌建设等方面的努力和成就。

Electro-Term/Hollingsworth公司的发展小趣事

Hollingsworth公司一直以来都坚持品质至上的原则。公司投入大量资源用于产品质量控制和检测,确保每一件产品都符合最高标准。这种对品质的坚持不仅赢得了客户的信任,也帮助公司在市场上建立了良好的口碑。随着时间的推移,Hollingsworth的品牌价值不断提升,成为电子行业中的佼佼者。

优先(苏州)半导体公司的发展小趣事

1994年,三星电子(苏州)半导体有限公司在苏州工业园区成立,成为园区首批入驻的外资企业之一。公司初期主要生产配套、低附加值产品,但随着市场的变化和竞争的加剧,公司开始寻求转型。2003年,苏州工厂开始转型生产核心产品,标志着公司从低端生产向高端制造的转变。此后,公司不断加大在智能制造方面的投入,采用先进的半导体自动化生产管理系统和ERP管理系统,实现了“无人化”自动化生产,生产自动化率可达90%以上。同时,公司始终坚持“绿色经营”的可持续发展理念,致力于保护及改善周边环境,履行企业的环保社会责任。

Galaxy Microelectronics公司的发展小趣事

飞翼科技(FEIYI)在多个领域的发展均体现了其创新驱动的发展战略。无论是无人机技术的智能化应用,还是绿色矿山技术的创新突破,亦或是电容式触摸感应芯片的市场领先,都离不开公司对技术创新的不断追求。飞翼科技积极与高校、研究机构及行业专家开展合作,集聚顶尖科技人才,共同推动技术进步和产业升级。同时,公司还注重知识产权保护,拥有国家专利技术300余项,为企业的持续发展提供了有力保障。通过这些努力,飞翼科技在电子行业中不断崛起,成为行业内的佼佼者。

Electronic Sensor + Resistor GmbH公司的发展小趣事

Electronic Sensor + Resistor GmbH(简称ESR公司)的创立源于两位电子工程师的远见卓识。他们发现市场上对于高精度电子传感器和定制电阻器的需求日益增长,但现有产品往往无法满足特定应用的性能要求。于是,ESR公司应运而生,专注于研发和生产高性能的电子传感器和电阻器。

在创业初期,ESR公司面临着资金、技术和市场的三重挑战。但凭借其卓越的研发实力和坚持不懈的市场推广,公司逐渐在市场上树立起高品质、高可靠性的品牌形象。通过与多家知名企业的合作,ESR公司的产品逐渐获得了市场的认可。

EM Microelectronic-Marin SA公司的发展小趣事

多年来,EM Microelectronic-Marin始终保持着对技术的热爱和追求。公司不断投入资源进行研发,推动电子技术的持续发展。在未来,随着物联网、人工智能等技术的不断兴起,EM Microelectronic-Marin将继续致力于技术创新和产品升级,为电子行业的发展贡献自己的力量。

问答坊 | AI 解惑

中国汽车第一“心”

奇瑞新一代发动机ACTECO,今年3月28日成功下线点火、让无数中国发动机专家与汽车专业记者激动不已的划时代产品。 它标志着中国人在新一代高性能汽车发动机领域零的突破,使中国汽车产业彻底告别了50年以来由于缺乏“心脏”而受制于人的历史。 ...…

查看全部问答>

别傻了(5):报销时偷偷带一点儿私

报销单是公司测试你的一个工具        看到这个题目或许你会纳闷?报销单也能测试员工?是的,我们平时不以为常的报销单也是公司或领导测试你的一个工具。     大部分公司都会有月底报销(餐费、交通费、电话费等)或出差报销吧?   ...…

查看全部问答>

硬件高手在where????

在嵌入式系统中中断相关寄存器 常有 一个中断使能寄存器和一个中断屏蔽寄存器 一个是使能相应位,一个是屏蔽相应位;请问这两个寄存器的实现的作用一样吗?为什么用两个而不只用一个寄存器来实现 中断 使能/屏蔽 功能呢? …

查看全部问答>

wince驱动开发

请问朋友们,wince驱动开发可以有什么具体的开发项目,介绍几个,要求能够拿出台面展示或者能够参加程序设计比赛的。 …

查看全部问答>

STM32串口发送问题

 while(1) {  while((USART1->SR & 0x80)==0);  //检查发送缓冲器是否为空   USART1->DR=0x0012;   //写进数据寄存器的数据   while((USART1->SR & 0x40)== ...…

查看全部问答>

DDR 的瓶颈

  最近一直在调试DDR,调试几天,仍然是毫无结果,真是郁闷,纠结中啊!!ddr的初始化是uboot 里面的,应该没有问题,也就是想把重定位到DDR 中运行,由于IRAM容量有限,只能运行16KB的程序!板子是QT210,A8的板子,cpu是S5PV210,明天继续~~ ...…

查看全部问答>

求前辈指路

毕业不久,对硬件感兴趣,想做一个硬件工程师,请问各位前辈,如果要做一个硬件工程师需要学习些什么东西呢?需要怎样入行呢?或者可以参加什么样的培训呢?多谢各位指导。…

查看全部问答>

S3C2416数据手册。

    到时候能用得上。省的大家再花时间去找。 …

查看全部问答>

E8卡片电脑、OK335xS-II谁更适合您?

由树莓派引发的卡片电脑热潮,国内嵌入式开发商也纷纷开发体积小的卡片电脑。国内著名嵌入式开发也开发卡片电脑。现在,将对天嵌的E8卡片电脑与OK335xS-II开发板进行基本参数的对比。 基本参数对比:  基本参数     ...…

查看全部问答>

为什么CSS一直停留在下载界面?

为什么CSS一直停留在下载界面?如图 …

查看全部问答>