【科普贴】SPI接口详解

【科普贴】SPI接口详解一、SPI接口简介SPI接口是一种同步串行总线(SerialPeripheralInterface)多用于Flash存储器(如NORFlash&NandFlashd),ADC、LCD控制器等外围器件的通讯接口。大大增强了处理器的外设扩展能力。SPI接口缩写SSEL:slaveselect,常常也被写作CS(chipselect)或SS(slaveselect)SCK:serialclock,常常也写作SCLK或SCLMISO:masterinputslaveoutpu

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

一、SPI接口简介

SPI接口是一种同步串行总线(Serial Peripheral Interface)多用于Flash存储器(如NOR Flash&Nand Flash),ADC、LCD控制器等外围器件的通讯接口。大大增强了处理器的外设扩展能力。
SPI接口缩写
SSEL:slave select,常常也被写作CS(chip select)或SS(slave select)
SCK:serial clock,常常也写作SCLK或SCL
MISO:master input slave output,常常被简写为SO(slave output,也有说是serial output)
MOSI:master output slave input,常常被简写为SI(slave input,也有说是serial input)
在这里插入图片描述
在SPI总线上,当一个主机和多个从机进行通讯时,通过CS来选择和那个设备进行通讯,可以将CS理解为enable信号,低电平有效。当多个从机存在时,这就要求从机的MISO口具有三态特性,使得该接口在器件未被选通时表现为高阻抗。当前多数SPI设备在不做通讯时,默认的状态通常就是高阻抗状态。
如下图是某个SPI Nand Flash中的Timing图。
在这里插入图片描述
SPI接口通常少有被用作一主多从的状态。常常被用作一对一的SPI通讯,常常的连接方式如下方式。
在这里插入图片描述

二、SPI通讯方式

标准的SPI通讯协议,通常会采用时钟的极性和采样的相位,将SPI分为四种工作模式
说人话就是:时钟的空闲状态分为高电平和低电平两种状态。采样方式可以选择上升沿采样或者是下降沿采样两种方式,进行排列组合就是四种状态。详细见下。
在这里插入图片描述
通常设备手册是中会描述SPI设备支持那些模式。下图是某家SPI NAND所支持的SPI模式。
下图中
CPOL :Clock Polarity(时钟极性 )
CPHA :Clock Phase(时钟相位)
时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。
输入数据在上升沿的时候保持,数据在下降沿的时候允许变化。说白了就是上升沿采样。 在这里插入图片描述
SPI通讯常用到的被分为四种通讯方式1)单线模式,2)标准模式,3)双线模式,4)四线模式,各自的应用场景不同。SPI标准模式上面有介绍过这里不过多累述。
SPI单线通讯模式
SPI单线模式是将原来的两根数据线改成一根,通讯方式变成了半双工的通讯方式,在接线上,只需要三根线分别是SCLK、I/O、CS。时钟频率通常可以做到10MHz
在这里插入图片描述
SPI双线通讯模式(Dual SPI)
SPI双线模式,是将原来的SI、SO两个数据线单线数据线,改成双向数据线。也是一种半双工的通讯模式。下图是某家SPI NAND中对于这种模式的描述。
在这里插入图片描述
SPI四线通讯模式
SPI四线模式,通常是Flash使用较多,SPI NOR Flash和SPI NAND Flash都有使用,这种方式是将SI、SO、WP、HOLD全部改成双向IO进行通讯。也是一种半双工通讯模式。下图是某家SPI NAND中对于这种模式的描述。
在这里插入图片描述

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

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

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


相关推荐

  • 关于@NotNull 和 @Nullable

    关于@NotNull 和 @Nullable阅读spring源码发现里面用到两个注解@NotNull和@Nullable,现在做一个简单的分析参考文档:避免Java应用中NullPointerException的技巧和最佳实践安卓中的@Nullable和NotNull注释在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。…

    2022年6月12日
    34
  • 人工智能,这五个行业岗位未来很吃香!

    人工智能,这五个行业岗位未来很吃香!

    2021年11月3日
    203
  • 使用postcss-plugin-px2rem和postcss-pxtorem(postcss-px2rem)-px自动转换rem的配置方法-vue-cli3.0

    使用postcss-plugin-px2rem和postcss-pxtorem(postcss-px2rem)-px自动转换rem的配置方法-vue-cli3.0在vue-cli3.0中使用postcss-plugin-px2rem插件插件的作用是自动将vue项目中的px转换为rempostcss-plugin-px2rem优势:  因为postcss-plugin-px2rem这个插件配置选项上有exclude属性,它可以配置是否对某个文件夹下的所有css文件不进行从px到rem的转换。  所以我们可以利用这个特性,把项目中的node_module文件夹排除掉。这样如果我们项目中是用了,前端UI框架的话,就不会吧UI框架(…

    2025年6月10日
    0
  • VARIANT、COleVariant 和_variant_t

    VARIANT、COleVariant 和_variant_t 在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:structtagVARIANT{ VARTYPEvt; union{  shortiVal;//VT_I2.  longlVal;//VT

    2022年7月18日
    12
  • Eclipse如何让关闭的项目进行隐藏

    Eclipse如何让关闭的项目进行隐藏 、步骤一:步骤二:选中Closed projects点击ok即可

    2022年6月13日
    22
  • CodeBlocks切换中文

    CodeBlocks切换中文下载汉化包,百度搜索“codeblock汉化包”即可, 比如:http://www.jb51.net/softs/545123.html将其拷贝到,此路径:X:\ProgramFil

    2022年7月1日
    24

发表回复

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

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