相关文章:

SPI总线(二):驱动分析篇

SPI总线(三):驱动实例

1、什么是SPI?

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 
种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

2、SPI优点
 支持全双工通信
 通信简单
 数据传输速率块

3、缺点
     没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据 可靠性上有一定的缺陷。

4、特点
1):高速、同步、全双工、非差分、总线式
2):主从机通信模式

5、协议通信时序详解
1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多 
个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共 
有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDO/MOSI – 主设备数据输出,从设备数据输入;
(2)SDI/MISO – 主设备数据输入,从设备数据输出;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS/SS – 其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。需要注意的是,在具体的应用中,当一条SPI总线上连接有多个设备时,SPI本身的CS有可能被其他的GPIO脚代替,即每个设备的CS脚被连接到处理器端不同的GPIO,通过操作不同的GPIO口来控制具体的需要操作的SPI设备,减少各个SPI设备间的干扰。

SPI是串行通讯协议,也就是说数据是一位一位从MSB或者LSB开始传输的,这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输。 SPI支持4-32bits的串行数据传输,支持MSB和LSB,每次数据传输时当从设备的大小端发生变化时需要重新设置SPI Master的大小端。

2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配 
置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们 
可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来 
控制我们主设备的通信模式,具体如下:
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA 
是用来配置数据采样是在第几个边沿:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

例如:
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第2个边沿,也就是 
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第2个边沿,也就是 
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

       

需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信 
那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的 
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是
保持高电平要么是保持低电平。

6、内部工作机制


SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI 
时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以 
及 Channel-Width 所决定.

--------------------- 作者:kaivenscode 来源:CSDN 原文:https://blog.csdn.net/kai_zone/article/details/78038716?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

SPI总线(一):基本原理篇相关推荐

  1. Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化

    我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...

  2. Linux SPI总线和设备驱动架构之三:SPI控制器驱动

    通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能: 1 ...

  3. clip许可证设备id与绑定设备不匹配_LINUX SPI通用字符设备模型介绍(SPI模块分析结束篇)...

    在前面几篇文章我们分析了SPI驱动框架模型.SPI总线.SPI MASTER.SPI DEVICE.SPI通信接口等内容,本篇是SPI总线的最后一篇,主要介绍SPI通用字符设备. spi通用字符设备说 ...

  4. LINUX SPI设备驱动模型分析之二 SPI总线模块分析

    上一篇文章我们简要介绍了SPI驱动模块,本章我们详细说明一下spi总线.设备.驱动模块的注册.注销以及这几个模块之间的关联. SPI总线的注册 spi模块也是基于LINUX设备-总线-驱动模型进行开发 ...

  5. FPGA——SPI总线控制flash(3)含代码

    前面几篇详细 介绍了SPI的原理,并且实现了对flash芯片的写使能,读状态,擦除,页读,页写 ​​​​​​FPGA--SPI总线详解(概念)_居安士的博客-CSDN博客_fpga芯片 FPGA--S ...

  6. FPGA——SPI总线控制flash(1)(含代码)

    上一篇写了SPI总线的原理,建议先看原理,链接如下: FPGA--SPI总线详解(概念)_居安士的博客-CSDN博客 这一篇分别来实现SPI总线的flash写使能,读状态 目录 flash写使能 fl ...

  7. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章       STM32H7的SPI总线基础知识和HA ...

  8. 【ESP32】16.RFID门禁系统实验(SPI总线 / MFRC522库)

    上一篇: [ESP32]15.OLED显示实验(SPI / 字模提取) 前言: 先放电路连接图: RFID(无线射频识别(radio frequency identification devices) ...

  9. spi总线 上层调用_spi总线驱动详解

    spi总线驱动详解 spi总线驱动详解 Spi总线在实际应用得比较多,所以这篇为文章讲解以实际应用为主,bus总线类型细节不做讲解,感兴趣的读者可以分析源码,研究内核源码我觉得是一件非常有趣的事情,同 ...

最新文章

  1. Virtual PC 2007下虚拟机与本机双XP系统实现互联与上网详解
  2. arcpy 批量投影_怎样用arcgis中的python进行批量投影
  3. android 视频 截图,java – android获取当前视频的截图
  4. linux (centos)下安装 mongodb v3.2 笔记(启动的时候可以指定配置文件)
  5. 安卓进阶系列-04自定义原型图片显示(CircleImageView)的使用
  6. kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做
  7. 【转】C++学习二 vector的用法(使用sort对于vector排序)
  8. 论文浅尝 | 将结构预测作为增广自然语言间的翻译任务
  9. python继承方式是基于原型吗_[译] 为什么原型继承很重要
  10. 设计模式 之 《抽象工厂模式》
  11. Django的rest_framework的视图之Mixin类编写视图源码解析...
  12. Linux使用Wget实现整站下载
  13. 单片机实验(十二)单片机矩阵按键控制数码管
  14. edge里bing必应搜索不了解决办法
  15. 【新书速递】深入浅出Electron
  16. ClickHouse 来自战斗民族的OLAP利器
  17. 创建系统映像时包含了 D、E 盘
  18. MySQL_Windows 下重启MySQL服务
  19. linux系统文件空间清理摸9z,Linux下的文件加密
  20. WPT2F42-6/TR PNP双极功率晶体管WILLSEM

热门文章

  1. 多线程利器-队列(queue)
  2. Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务
  3. Server Error in '/' Application. 报错
  4. Linux内核模块学习笔记(转载)
  5. COJ 1170 A Simple Problem
  6. nodemanager不能正常关闭_Java虚拟机关闭钩子(Shutdown hook)
  7. 计算Gaunt积分 m1m2<0
  8. oracle修改删除数据,[Oracle 错误修改删除数据后的恢复方法
  9. everythingtoolbar.dll”或它的一个依赖项。_ASP.NET Core依赖注入最佳实践、提示和技巧...
  10. 【Paper】2021_Optimal Distributed Leader-following Consensus of Linear Multi-agent Systems: A Dynamic