SPI协议及IO模拟
SPI协议
SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱。
SPI协议资料比较正规的是:
1.SPI的规约协议英文文档,例如《摩托罗拉spi协议规范》
2.许多IC的datasheet中关于SPI协议的介绍
下图摘自《摩托罗拉spi协议规范》:
- CPOL和CPHA的描述和定义

注意画线部分的描述:第一个边沿锁存(或者叫采样),第二个边沿发送,注意,发送的是之前锁存好的。 - 时序图

- 工作模式的定义

上图《Application Note MLX90363 Getting Started Guide》中关于SPI协议的相关介绍,可以得出SPI 模式0-3的定义
总结:
- CPHA=0,第一个跳变沿采样,第二个跳变沿传送。CPHA=1,则反之。
- CPOL=0,表示空闲为低电平,CPOL=1,则反之
模式 CPOL CPHA 0 0 0 1 0 1 2 1 0 3 1 1 IO口模拟
模拟的关键点主要是对采样和发送的理解,例如以模式1为例,根据前面介绍可以得知上升沿发送,下降沿采样。
关键点:- 上升沿发送。需理解电平从低到高也是时间的。上升沿发送标准的是,在低电平上升至1/2高电平时进行发送,所以如果是软件模拟,必须是SCL=1后,不要有任何时延,立即拉低或拉高Data口。例图:1/2处发送

- 下降沿采样。同理也是高电平下降至1/2除,不要有任何时延,立即读取Data口
- 开始和结束时的设置,以Mode1为例,应该在CS有效之前拉低SCLK半个时钟,结束之后在CS无效之前拉低SCLK半个时钟。CS有效之后应延时半个时钟,CS无效之后也应延时半个时钟
代码如下
//-最小为10-
#define N_Delay 20
unsigned char SPI_Send(unsigned char Data)
{
int i = 0;
unsigned char RecvByte = 0; COMM_CLK_L();
SPI_Delay(N_Delay);
COMM_CS_L();
SPI_Delay(N_Delay); for (i = 0; i < 8; i++)
{
//-发送-
COMM_CLK_H();
if ((Data & 0x80) != 0)
{
COMM_MOSI_H();
}
else
{
COMM_MOSI_L();
}
Data <<= 1;
SPI_Delay(N_Delay); //-接收-
COMM_CLK_L();
if (COMM_MISO_Get() != 0)
{
RecvByte |= 0x01 << (7 - i);
}
SPI_Delay(N_Delay); }
COMM_CLK_L();
SPI_Delay(N_Delay);
COMM_CS_H();
SPI_Delay(N_Delay);
return RecvByte;
}
产生的波形如图:

SPI协议及IO模拟的更多相关文章
- 模拟SPI协议时序
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...
- 关于IO模拟时序(SPI)的注意事项
原则:有硬件I2C.SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试.但在内部资源不够时就要用IO模拟总线了. 关于短延时:模拟时序时是否需要延时要看MCU与device的相对速度.比如I2C如果4 ...
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]
一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...
- [SPI]SPI协议详解
转自:https://my.oschina.net/freeblues/blog/67400 1.SPI协议简介 1.1.SPI协议概括 SPI,是英语Serial Peripheral interf ...
- [SPI&I2C]I2C和SPI协议介绍
IIC vs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身 ...
- SPI协议及工作原理分析
说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...
- SPI协议及其工作原理详解
一.概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控 ...
- SPI协议及其工作原理浅析
转载自:http://bbs.chinaunix.net/thread-1916003-1-1.html一.概述. SPI, Serial Perripheral Interface, 串行外围设备接 ...
- I2C总线协议的软件模拟实现方法
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...
随机推荐
- 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新
本次更新下载:http://pan.baidu.com/s/1skXzG4H 源码文档见官方群(以下为8.1更新内容) 逆天工具 CDN 资源库 国内 http://www.bootcdn.cn/ h ...
- Android 开发环境搭建以及工具(不断更新)
学习android需要学习的编程知识 https://wiki.cyanogenmod.org/w/Doc:_Development_Resources 从http://source.android. ...
- Event Sourcing Pattern 事件源模式
Use an append-only store to record the full series of events that describe actions taken on data in ...
- Java进击C#——语法之IO操作
本章简言 上一章我们对线程同步进行讲解.了解如何去处理可能发生的脏数据.而本章就要讲有关于C#在读取IO文件的时候,常常用到的操作类.这一章的内容会比较少.但是笔者还是总结出来让读者们有一个学习的方向 ...
- GO语言之channel
前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...
- scikit-learn一般实例之四:管道的使用:链接一个主成分分析和Logistic回归
主成分分析(PCA)进行无监督的降维,而逻辑回归进行预测. 我们使用GridSearchCV来设置PCA的维度 # coding:utf-8 from pylab import * import nu ...
- webapi的学习资料
猿教程_-webapi教程-WebAPI教程 猿教程_-webapi教程-Web API概述 猿教程_-webapi教程-新建Web Api项目 猿教程_-webapi教程-测试Web API 猿教程 ...
- R语言:常用统计检验
统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤: 建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 -- 百度百科 假设检验(hypothesis test)亦 ...
- Maven自定义绑定插件目标:创建项目的源码jar
<build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...
- Eclipse安装Spring-tool-suite
目录结构: // contents structure [-] 在Eclipse上安装Spring-tool-suite的方法有那些 如何查看自己的Eclipse版本 如何知道自己的Eclipse对应 ...
- 上升沿发送。需理解电平从低到高也是时间的。上升沿发送标准的是,在低电平上升至1/2高电平时进行发送,所以如果是软件模拟,必须是SCL=1后,不要有任何时延,立即拉低或拉高Data口。例图:1/2处发送