SPI总线(一):基本原理篇
相关文章:
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总线(一):基本原理篇相关推荐
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...
- Linux SPI总线和设备驱动架构之三:SPI控制器驱动
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能: 1 ...
- clip许可证设备id与绑定设备不匹配_LINUX SPI通用字符设备模型介绍(SPI模块分析结束篇)...
在前面几篇文章我们分析了SPI驱动框架模型.SPI总线.SPI MASTER.SPI DEVICE.SPI通信接口等内容,本篇是SPI总线的最后一篇,主要介绍SPI通用字符设备. spi通用字符设备说 ...
- LINUX SPI设备驱动模型分析之二 SPI总线模块分析
上一篇文章我们简要介绍了SPI驱动模块,本章我们详细说明一下spi总线.设备.驱动模块的注册.注销以及这几个模块之间的关联. SPI总线的注册 spi模块也是基于LINUX设备-总线-驱动模型进行开发 ...
- FPGA——SPI总线控制flash(3)含代码
前面几篇详细 介绍了SPI的原理,并且实现了对flash芯片的写使能,读状态,擦除,页读,页写 FPGA--SPI总线详解(概念)_居安士的博客-CSDN博客_fpga芯片 FPGA--S ...
- FPGA——SPI总线控制flash(1)(含代码)
上一篇写了SPI总线的原理,建议先看原理,链接如下: FPGA--SPI总线详解(概念)_居安士的博客-CSDN博客 这一篇分别来实现SPI总线的flash写使能,读状态 目录 flash写使能 fl ...
- 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章 STM32H7的SPI总线基础知识和HA ...
- 【ESP32】16.RFID门禁系统实验(SPI总线 / MFRC522库)
上一篇: [ESP32]15.OLED显示实验(SPI / 字模提取) 前言: 先放电路连接图: RFID(无线射频识别(radio frequency identification devices) ...
- spi总线 上层调用_spi总线驱动详解
spi总线驱动详解 spi总线驱动详解 Spi总线在实际应用得比较多,所以这篇为文章讲解以实际应用为主,bus总线类型细节不做讲解,感兴趣的读者可以分析源码,研究内核源码我觉得是一件非常有趣的事情,同 ...
最新文章
- Virtual PC 2007下虚拟机与本机双XP系统实现互联与上网详解
- arcpy 批量投影_怎样用arcgis中的python进行批量投影
- android 视频 截图,java – android获取当前视频的截图
- linux (centos)下安装 mongodb v3.2 笔记(启动的时候可以指定配置文件)
- 安卓进阶系列-04自定义原型图片显示(CircleImageView)的使用
- kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做
- 【转】C++学习二 vector的用法(使用sort对于vector排序)
- 论文浅尝 | 将结构预测作为增广自然语言间的翻译任务
- python继承方式是基于原型吗_[译] 为什么原型继承很重要
- 设计模式 之 《抽象工厂模式》
- Django的rest_framework的视图之Mixin类编写视图源码解析...
- Linux使用Wget实现整站下载
- 单片机实验(十二)单片机矩阵按键控制数码管
- edge里bing必应搜索不了解决办法
- 【新书速递】深入浅出Electron
- ClickHouse 来自战斗民族的OLAP利器
- 创建系统映像时包含了 D、E 盘
- MySQL_Windows 下重启MySQL服务
- linux系统文件空间清理摸9z,Linux下的文件加密
- WPT2F42-6/TR PNP双极功率晶体管WILLSEM
热门文章
- 多线程利器-队列(queue)
- Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务
- Server Error in '/' Application. 报错
- Linux内核模块学习笔记(转载)
- COJ 1170 A Simple Problem
- nodemanager不能正常关闭_Java虚拟机关闭钩子(Shutdown hook)
- 计算Gaunt积分 m1m2<0
- oracle修改删除数据,[Oracle 错误修改删除数据后的恢复方法
- everythingtoolbar.dll”或它的一个依赖项。_ASP.NET Core依赖注入最佳实践、提示和技巧...
- 【Paper】2021_Optimal Distributed Leader-following Consensus of Linear Multi-agent Systems: A Dynamic