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中的CPOL和CPHA位,将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通讯时,要确保它们的传输模式设置相同。

其中mode0和mode3最为常见,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,一起讨论硬件问题,分享调试心得,共同成长。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • selenium webdriver下载_webdriver怎么读

    selenium webdriver下载_webdriver怎么读地址:http://npm.taobao.org/mirrors/chromedriver/下载完对应的webdriver后,放到python目录下的Scripts文件夹内测试示例:fromseleniumimportwebdriver#测试用例1driver=webdriver.Chrome()如果能够打开浏览器就表示成功,如果报错Thisversiono…

    2022年9月19日
  • Oracle中字符串和时间类型的相互转换

    Oracle中字符串和时间类型的相互转换字符串转时间to_date(‘2018-12-05′,’yyyy-mm-ddhh24:mi:ss’)时间转字符串to_char(sysdate,’yyyy-mm-ddhh24:mi:ss’) 

    2022年5月18日
  • css属性及定位操作

    字体属性文字字体font-family可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。浏览器会使用它可识别的第一个值。简单实例:body{font

    2022年3月29日
  • Kali更新源签名无效问题[通俗易懂]

    Kali更新源签名无效问题[通俗易懂]一:Kali更新源签名无效问题1.1:问题展示·更换中科大源报错root@kali:~#apt-getupdate获取:1https://repo.huaweicloud.com/kalikali-rollingInRelease[30.5kB]错误:1https://repo.huaweicloud.com/kalikali-rollingInRelease下列签名无效:EXPKEYSIGED444FF07D8D0BF6KaliLinuxReposito

    2022年5月28日
  • android将字符串转化为json,将string转换为JsonArray「建议收藏」

    android将字符串转化为json,将string转换为JsonArray「建议收藏」只是在这里混合另一种方法,我想build议看看Gson。Gson是一个使Java对象序列化和反序列化的库。例如,用你的string,你可以这样做://DeclarethesesomewherethatisontheclasspathpublicclassArrayItem{publicintid;publicdoubleatt1;publicboole…

    2022年6月20日
  • pandas的columns函数_python value_counts

    pandas的columns函数_python value_counts一般常用的有两个方法:1、使用DataFrame.index=[newName],DataFrame.columns=[newName],这两种方法可以轻松实现。2、使用rename方法(推荐):DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False…

    2022年9月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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