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的输入 ...
随机推荐
- 【Win 10应用开发】分阶段进行数据绑定
使用x:Bind扩展标记进行数据绑定,是在编译阶段完成,至于说性能优化方面,大概主要是优化CPU资源的使用,因为免去了运行阶段进行绑定的过程.当然,使用这个标记仅仅是绑定上的优化,并不包括数据源.数据 ...
- Node+fs+定时器(node-schedule)+MySql
目标:将本人写博客时候的截图保存到桌面的图片 执行保存到指定文件进行整理 并写入数据库 先看最终的目录结构: package.json文件: { "name": "zqz ...
- ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...
- blocking and unblocking mechanism for linux drivern code
概念: 1> 阻塞操作 是指在执行设备操作时,若不能获得资源,则挂起进程直到满足操作条件后再进行操作.被挂起的进程进入休眠,被从调度器移走,直到条件满足: 2> 非阻塞操作 在 ...
- SQLServer学习笔记系列1
一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习Sqlserver写起,自己本身对数 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- 解决微信授权回调页面域名只能设置一个的问题 [php]
最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...
- Kafka资源汇总
终于下定决心写一点普及类的东西.很多同学对Kafka的使用很感兴趣.如果你想参与到Kafka的项目开发中,很多资源是你必须要提前准备好的.本文罗列了一些常用的Kafka资源,希望对这些develope ...
- c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】
字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...
- 上升沿发送。需理解电平从低到高也是时间的。上升沿发送标准的是,在低电平上升至1/2高电平时进行发送,所以如果是软件模拟,必须是SCL=1后,不要有任何时延,立即拉低或拉高Data口。例图:1/2处发送