SPI通信
2017-01-18 15:13
267 查看
1 管脚
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。 SDI – 主设备数据输入,从设备数据输出;
SDO – 主设备数据输出,从设备数据输入;
SCLK – 时钟信号,由主设备产生;
CS – 从设备使能信号,由主设备控制。
2 时序
SPI接口通信时序上注意两个概念:极性与相位。1. 边沿:即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge),对于一个时钟周期内,有两个edge,分别称为上升沿与下降沿。第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;
2. 极性:先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。其英文精简解释为:Clock Polarity = IDLE state of SCK。SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;
3. 相位:对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。
3 数据交换
两个SPI设备之间通信必须由主设备来控制次设备。一个主设备可以通过提供Clock以及对从设备进行片选(SlaveSelect/ss)来控制多个从设备,SPI协议还规定从设备的Clock由Master设备通过SCK管脚提供给从设备,从设备本身不能产生或控制Clock,没有Clock则从设备不能正常工作。SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一个”发送者(Transmitter)”或者”接收者(Receiver)”。在每个Clock周期内,SPI设备都会发送并接收一个bit大小的数据,相当于该设备有一个bit大小的数据被交换了。
一个从设备要想能够接收到Master发过来的控制信号,必须在此之前能够被Master设备进行访问(Access)。所以,Master设备必须首先通过SS/CSpin对从设备进行片选,把想要访问的从设备选上。
在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最终失效。因此,在程序中一般都会在SPI传输完数据后,去读取SPI设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的。非中断形式的通信操作流程如下:
(一) 设置正确的片选信号,循环开始下面操作;
(二) 等待发送数据寄存器为空,则写入一个要发送的数据;
(三) 等待接收数据寄存器为满,则读取一个被接收的数据;
相关文章推荐
- 2.7寸1325黄字OLED显示模组
- 1309控制器 蓝字 2.4寸oled模组 12864 oled 2.42oled屏 128x64
- 1305控制器 绿字 2.4寸oled模组 12864 oled 2.42oled屏 128x64
- 一个电源管理系统界面设计
- 60 spi通信协议
- httpclient工具类
- 如何让一个简单的maven项目支持one-jar 做成一个jar fatjar
- hibernate向mysql数据库插入中文显示??
- struts2注解路径问题
- gcc降级
- jQuery Jcrop 图像裁剪
- ibatis开发入门
- Linux设备驱动之字符设备驱动
- equals hashCode
- 摄像头驱动之实现数据传输3_设置参数_学习笔记
- Binary search (4) -- Find Right Interval,Count Complete Tree Nodes,Divide Two Integers
- OID-----利用SNMP获取、走访节点值【程序代码+分析
- hive异常MetaException-Metastore contains multiple versions
- PHP最常用的正则表达式,让你少写1000行代码
- CAMERA学习(二)--------HAL