模拟SPI协议时序
来源:互联网 发布:算法与数据结构pdf 编辑:程序博客网 时间:2024/05/20 03:44
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制。
在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE)。
所以,在以下的介绍中,都是默认单片机是主机模式进行说明的。
SPI总线相对于IIC总线,无总裁机制,无应答机制。
SPI常用的四线制分别是,MISO(主入从出)、MOSI(主出从入)、SCK(同步时钟线)、CS(片选线,也有是NSS)。
主从机之间典型的接线方式如下所示:
按照时钟线的时钟极性(CPOL)和相位(CPHA),将SPI总线区分成4种工作方式。
具体区分如下:
当时钟极性(CPOL==0)时:表示时钟线空闲状态为低电平;
当时钟极性(CPOL==1)时:表示时钟线空闲状态为高电平;
当时钟相位(CPHA==0)时:表示数据在时钟的第一个边沿输出;
当时钟相位(CPHA==1)时:表示数据在时钟的第二个边沿输出;
如上所示,CPOL和CPHA两两组合,可表示4种工作方式,假设配置CPOL=0,CPHA=0,表示数据线在空闲时处于低电平,主机数据在时钟的第一个边沿(也就是上升沿被输出),在第二个边沿(也就是下降沿被读入)。
需要注意的是,主机的配置必须根据从机设计,例如,从机是上升沿输出,下降沿输入。那么,主机在配置的过程当中,必须采用上升沿输出,下降沿输入,即SPI0工作方式。
采用I/O端口模拟SPI协议时序,可以很好地加深对于SPI总线的理解。
SPI写时序模拟:
void SPI_write(unsigned char dat){ unsigned char temp; for(temp=0x80;temp!=0;temp>>=1) { SCK=0; if(temp&dat==0) { MOSI=0; } else { MOSI=1; } SPI_delay(); //让MOSI稳定 SCK=1; }}
SPI读时序模拟:
unsigned char SPI_read(void){ unsigned char temp; unsigned char dat; for(temp=0x80;temp!=0;temp>>=1) { SCK=1; SPI_delay(); //让SCK稳定 SCK=0; if(MISO==1) { dat|=temp; } else { dat&=~temp; } } return dat; }
0 0
- 模拟SPI协议时序
- 软件模拟写SPI时序
- 模拟IIC协议时序
- C51 模拟spi协议
- IO 模拟 SPI协议
- 利用单片机来模拟SPI时序
- STM32 软件模拟SPI时序驱动NRF24L01
- 【转】SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- SPI总线协议及SPI时序图详解
- java swing JscrollPanel
- 模拟IIC协议时序
- ArcGIS Geodatabase for DB2安装指南
- SpringMVC中的文件上传和下载
- C#命令行解析工具
- 模拟SPI协议时序
- java十大低级错误和常见注意点
- codeforces 779B Weird Rounding
- 一天一个知识点-枚举
- C# 复制列表
- 20170227心情总结
- 归并排序
- C#同步方法转异步
- WINDOWS编程常用API函数