RISC_V_外设篇_SPI
SPI--详解
- 1.0 原理
- 2.0 SPI协议的种类
- 2.1 Single-SPI-master
- 2.1.1 wishbone端口
- 2.1.2 SPI 总线端口
- 2.1.3 寄存器列表
- 2.1.3.1 SPCR控制寄存器
- 2.1.3.2 SPSR状态寄存器
- 2.1.3.3 SPDR数据寄存器
- 2.1.3.4 SPER扩展寄存器
- 2.2 Single-SPI-Slave
- 2.3 Dual-SPI
- 2.4 Quad-SPI
1.0 原理
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。
SPI是MCU中的常用接口模块,以主从方式工作,通常由一个主设备或多个从设备,需要至少4根线(支持全双工方式)或者3根线(支持半双工方式)工作,分别为SDI(数据输入),SDO(数据输出),SCK(时钟输入),CS(片选).
下面分别予以介绍:
- MOSI:SPI总线主机输出/从机输入 (Master Output/Slave Input)
- MISO:SPI总线主机输入/从机输出(Master Input/Slave Output)
- SCK:时钟信号,由主设备产生。
- CS:从设备使能信号,由主设备控制,有些IC的cs也称为SS。
CS控制芯片是否被选中,也就是说只有片选信号为预先规定的的使能值时(高电平或低电平),对此芯片的操作才有效。此方法使得在同一总线上连接多个SPI设备成为可能。
如图所示,是主设备和从设备的连接示意图。
2.0 SPI协议的种类
基本的SPI协议也称为Single-SPI,在基本的Single SPI协议基础上,扩展出了Dual-SPI和Quard-SPI协议,简介如下:
2.1 Single-SPI-master
Single-SPI协议是串行通信协议,因此数据逐位进行传输,由SCK提供时钟脉冲,MOSI,MISO则基于时钟脉冲完成数据传输。
数据输出通过MOSI线传输,数据在SCK时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被采样完成一位数据传输,输入MISO也是同样的原理。
opencore的开源SPI协议就是Single-SPI协议,详细如下:
2.1.1 wishbone端口
在端口方面,和I2C一样,采用了Wishbone总线进行连接,看代码很简单,主要是为了方便数据的输入输出。
2.1.2 SPI 总线端口
从上图看,在single-spi协议里面,定义了三个端口,SCK,MOSI,MISO作为连接SPI总线的端口,端口的详细作用在上文已经讲过了,这里就不多作诠释,对code有兴趣的可以在网上自行下载,有一堆。
2.1.3 寄存器列表
简单SPI协议定义了四个寄存器,分别是SPCR,SPSR,SPDR和SPER,分别为控制寄存器,状态寄存器,数据寄存器和扩展功能寄存器,下面一个一个介绍。
2.1.3.1 SPCR控制寄存器
这是SPCR控制寄存器的bit位功能表,
- SPIE是SPI中断的使能,
- SPE是SPI总线的使能,看名称比较容易搞混哈哈,
- MSTR是主从模式选择,1为master,0为slave,这个bit位比较特殊,因为在code里,这个bit位只是这么定义的,具体的逻辑没有,所以他其实一点用都没有,换句话说,simple-spi就是一个master的device。
- SPR是用来配置clock rate的,与spre组成一个4bit的espr信号用来配置clock rate。
- CPOL和CPHA是SPI总线的极性配置选项,具体配置效果看下图。
需要注意的是,master和slave的极性配置需要一致,否则无法正常工作。
2.1.3.2 SPSR状态寄存器
SPSR是一个状态输出寄存器,用来显示SPI总线master的状态。
- SPIF是一个中断flag,当SPIF和SPIE都置1时,会产生一个中断信号,
- WCOL是一个写满flag。
- SPSR[3:0]则分别表示FIFO的读写状态。
2.1.3.3 SPDR数据寄存器
2.1.3.4 SPER扩展寄存器
- ICNT是一个中断计数器,在传输数据时,计数数据的bit位已确定数据正常传输。
- ESPR是clock rate配置的,在上文有介绍。
2.2 Single-SPI-Slave
在opencore给出的simpleSPI协议里,他的slave代码特别简单,就是一个移位寄存器,所以就不多解释了。
2.3 Dual-SPI
- 由于在实际使用中很少使用全双工模式,因此为了能够充分利用数据线,DualSPI协议被引入。
- 在Dual-SPI协议中,MOSI,MISO数据线被重命名位SD0和SD1,变成既可以作输入也可以作输出的双向信号线。
- SD0和SD1数据线和真正的双向信号线还是有一定区,这两根线需要同时作输入或者同时作输出,所以它是半双工的方式。
- 由于使用两根数据线进行传输,所以,它相比single-spi,一个周期可以传输2bit的信号,因此在单向传输时,数据的吞吐率能够提高一倍。
2.4 Quad-SPI
- Quad-SPI是Dual-SPI的升级版,在原来的基础上在新添加的2根数据线,变为4根,分别是SD0,SD1,SD2,SD3。
- Quad-SPI协议同样使用半双工的方式,但因为有四根数据线,所以一个周期可以传送4bit的信号。
在E203 MCU SoC里,它支持3个QuadSPI模块。分别位QSPI0,QSPI1和QSPI2,都有四根数据线,但是可以通过寄存器配置,使它变成单线,双线,和四线工作模式。
本来想学习一下E203的SPI协议代码,但是看过代码的同学应该知道,乱得很。。。。。
咨询了我leader,他讲这是别的语言通过机器转换过来的,也就只能到此为止,想了解具体功能的同学可以参考《RISC-V架构与嵌入式开发快速入门》这本书,我就不再作这个搬运工了,溜了。
RISC_V_外设篇_SPI相关推荐
- 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...
原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...
- z490 linux raid,PC硬件与外设 篇二十三:光威弈系列Pro Z490平台装机评测(含raid模式)...
PC硬件与外设 篇二十三:光威弈系列Pro Z490平台装机评测(含raid模式) 2020-06-16 09:53:51 0点赞 0收藏 0评论 创作立场声明:raid模式值得体验 存储颗粒与主控的 ...
- 【STM32】标准库与HAL库对照学习教程外设篇--红外避障传感器
[STM32]标准库与HAL库对照学习教程外设篇--红外避障传感器 一.前言 二.准备工作 三.红外避障传感器 1.传感器原理说明 2.传感器特性 四.标准库使用红外传感器 1.实验程序 2.实验效果 ...
- 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器
[STM32]标准库与HAL库对照学习教程外设篇--超声波测距传感器 一.前言 二.准备工作 三.超声波测距传感器 1.原理说明 2.使用说明 四.标准库使用传感器 1.实验程序 2.实验效果 五.H ...
- 安卓系统百变USB OTG之输入外设篇
安卓系统百变USB OTG之输入外设篇 转自:http://www.sina.com.cn 2012年09月29日 09:27 斑马网 近日小米2的开箱照频频曝光,而在小米的随箱"嫁妆 ...
- Esp8266 进阶之路36【外设篇】乐鑫esp8266芯片SDK编程驱动时间芯片 ds1302,同步网络时间到本地,再也不怕掉电断网也可以同步时间了!(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
- Esp8266 进阶之路31【外设篇】分享一个乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- Esp8266 进阶之路19 【外设篇①】esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- ARM 之 STM32F407zgt6 外设篇 ----------- FLASH 存储部分数据
一.关于STM32F407 的FLASH 根据掉电数据是否丢失存储器可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失. ...
最新文章
- 深度学习模型轻量化(下)
- 源文件的编码会对编译结果有影响
- java rsa数字签名_RSA 数字签名算法(Java版)
- ORACLE11G RAC增加节点操作
- 2019.01.27【NOIP普及组】模拟赛C组总结
- linux 远程权限不够,Eclipse连接远程Hadoop集群开发时权限不足问题解决方案
- Aptana插件安装到eclipse和myeclipse的详细过程
- Solaris 的防火墙ipfilter设置
- JQuery学习笔记 [Ajax] (6-1)
- Zabbix监控配置
- 电脑广告太多,请避免安装这些软件
- 电音风靡全球,不了解一下吗?
- 【CS224n】(lecture1)课程介绍和word2vec
- 曲面的法向量+高斯公式曲面的方向余弦的计算
- 人工智能行业知识 - AI应用场景
- python编程100例海绵宝宝-Python_Turtle库画一只派大星
- 计算机第一启动设置u盘启动,怎么设置usb为第一启动_bios设置u盘启动
- 思考与总结:数据分片的一些问题
- 新手操作低客单价时常见的误区有哪些?
- DSP6713 Simulator HelloWorld与LED
热门文章
- h5基于canvas的凹凸拼图碎片生成
- Froala Editor JavaScript WYSIWYG HTML 编辑器
- 火车头采集规则,火车头采集数据发布不小心设置了发布数量怎么修改?
- Xshell7连接VirtualBox虚拟机
- LaTeX技巧心得28:如何在文中实现带圈的数字和圈中加号
- [go学习笔记.第十六章.TCP编程] 3.项目-海量用户即时通讯系统-redis介入,用户登录,注册
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第37讲:HTTP协议请求(响应)
- 调试OpenGL ES应用程序
- 贝叶斯公式与随机点名中的学生可信度
- ktv无线服务器,KTV,酒店无线wifi上网无线AP服务器