SPI接口详细介绍

SPI接口详细介绍1.概述SPI=SerialPeripheralInterface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。优点:支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;支持高速(100MHz以上…

大家好,又见面了,我是你们的朋友全栈君。

1. 概述

SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。

  • 优点:

支持全双工,push-pull的驱动性能相比open-drain信号完整性更好

支持高速(100MHz以上);

协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;

硬件连接简单;

  • 缺点:

相比IIC多两根线;

没有寻址机制,只能靠片选选择不同设备;

没有从设备接受ACK,主设备对于发送成功与否不得而知;

典型应用只支持单主控;

相比RS232 RS485和CAN总线,SPI传输距离短;

2. 硬件结构

SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave;

  • 信号定义如下:

SCK : Serial Clock 串行时钟

MOSI : Master Output, Slave Input 主发从收信号

MISO : Master Input, Slave Output 主收从发信号

SS/CS : Slave Select 片选信号

  • 电路连接如下:

单个主设备和单个从设备:

SPI接口详细介绍

单个主设备和多个从设备,通过多个片选信号或者菊花链方式实现:

SPI接口详细介绍

3. 寄存器类型

Motorola定义的SPI寄存器包括:

SPI Control Register 1 (SPICR1)    控制寄存器1

SPI Control Register 2 (SPICR2)    控制寄存器2

SPI Baud Rate Register (SPIBR)    波特率寄存器

SPI Status Register (SPISR)            状态寄存器  (只读   其余均可读可写)

SPI Data Register (SPIDR)              数据寄存器

通过往寄存器中写入不同的值,设置SPI模块的不同属性。

4. SPI传输模式

通过设置控制寄存器SPICR1中的CPOLCPHA位,将SPI可以分成四种传输模式。

CPOL,即Clock Polarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。

1 = 时钟低电平时有效,空闲时为高

0 = 时钟高电平时有效,空闲时为低

CPHA,即Clock Phase,定义SPI数据传输的两种基本模式。

1 = 数据采样发生在时钟(SCK)偶数(2,4,6,…,16)边沿(包括上下边沿)

0 = 数据采样发生在时钟(SCK)奇数(1,3,5,…,15)边沿(包括上下边沿)

四种模式如下图所示:

先看第一列两张图(CPHA = 0),采样发生在第一个时钟跳变沿,即数据采样发生在SCK奇数边沿;再看第二列(CPHA =1),采样发生在第二个时钟跳变沿,即数据采样发生在SCK偶数边沿

第一行两张图,第二行两张图(CPOL = 1),SCK空闲状态为高电平。

SPI接口详细介绍

主从设备进行SPI通讯时,要确保它们的传输模式设置相同。

其中mode0mode3最为常见,SPI接口的flash中均会有标注。

5. 读写操作

  • 标准SPI读写为例

SPI接口详细介绍

片选—读指令—地址—数据读出

SPI接口详细介绍

片选—写指令—地址—数据写入

  • Dual I/O Fast Read Sequence Diagram  双路IO

SPI接口详细介绍

  • Quad I/O Fast Read Sequence Diagram  四路IO

SPI接口详细介绍

与IIC一样,是一种最常见的板内芯片间的串行接口。

欢迎加入硬件QQ群:1018083751,一起讨论硬件问题,分享调试心得,共同成长。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132762.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java 安全之Weblogic 2017-3248分析

    Java安全之Weblogic2017-3248分析0x00前言在开头先来谈谈前面的绕过方式,前面的绕过方式分别使用了streamMessageImpl和MarshalledObject对

    2021年12月12日
  • js实现时钟代码

    js实现时钟代码代码<!DOCTYPEhtml><html><headlang=”en”><metacharset=”UTF-8″><title></title><style>/*全局*/*{margin:0;…

  • opencv中scalar_opencv ffmpeg

    opencv中scalar_opencv ffmpegMat类中的Scalar()成员有什么用呢?先不急着看资料,看下有什么结果出现吧:先将里边的值设为0[html]viewplaincopy#include&amp;amp;lt;opencv2/core/core.hpp&amp;amp;gt;#include&amp;amp;lt;opencv2/imgproc/imgproc.hpp&amp;a

  • kworker_kiekert

    kworker_kiekert通过ps命令查看进程状态时,可以查看到kworker相关,大部分格式都是kworker/u2:0或者kworker/0:0H,查看资料得知:内核中有很多kworker,有绑定cpu的和不绑定cpu的,它支持cpu的hotplug时work的迁移。u:是unbound的缩写,代表没有绑定特定的CPU,kworker/u2:0中的2是work_pool的I…

  • 试题库管理系统–数据库设计[通俗易懂]

    试题库管理系统–数据库设计[通俗易懂]一、概要设计1.1背景和意义目前,许多高校绝大多数课程还采用考教统一的模式来完成教学过程,这种传统的考试模式在教学到实施考试的过程带有很大的主观随意性和不规范性。另外随着各高校近年来学生规模的扩大,教学任务日益繁重,教师的工作量相应的不断增加。迫切需要计算机辅助教学系统来打破这种传统的教学模式,减轻教师的工作负担,提高教学质量。因此,本文研究设计了一个试题库管理系统,来解决和缓解高校课程

  • Python 100道基础入门练习题(附答案)

    Python 100道基础入门练习题(附答案)实例001:数字组合题目有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?程序分析遍历全部可能,把有重复的剃掉。1num=02forainrange(1,5):3forbinrange(1,5):4forcinrange(1,5):5if((a!=b)and(a!=c)and(b!=c)):6print(a,b,c)7nu

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号