总线复习之SPI
SPI总线协议以ds1302为例讲解
1.1概述。
1.2根据时序图来分析。
1.3再熟读一下DS1302的数据手册和SPI总线协议的使用。
1.4结合ds1302功能实现一定的功能。
1.1概述SPI总线协议
首先 SPI,Serial perripheral Interface,串行外围设备接口,全双工同步串行方式,SPI是四根线 SDO、SDI、SCK、CS。
特点是:我们可以采用硬件SPI或者软件模拟SPI。
1.采用主-从模式(Master-Slave)控制方式,而且时钟是由主机产生的。片选信号是主机用来是否使能从机。也是由主机产生。
2.采用同步方式传输数据,这里要注意 时钟极性(CPOL)和时钟相位(CPHA),这两个特别的属性控制着两个SPI设备间何时进行数据交换以及何时对接受到的数据进行采样,来保证数据是在两个设备之间是同步传输的。
3.数据交换
SPI设备间的数据传输之所以又被称为数据交换,是因为SPI设备在每一个时钟周期,SPI设备都会发送并接受一个bit大小的数据,相当于该设备有一个bit大小的数据被交换了。也就是说当发送完一个byte的数据时,也会收到一个Byte的数据,

时序图:这里要说一下时钟极性和时钟相位。时钟极性(CPOL)表示的是SPI在空闲时,时钟信号是高电平还是低电平
时钟相位(CPHA):表示SPI设备在SCK管脚在时钟上升沿时触发数据,还是在时钟信号变为下降沿时触发数据采样。

SSPSR: SPI设备内部的移位寄存器(Shift Register),主要是根据SPI时钟信号状态,往SSPBUF里移入或者移出数据,每次移动的数据大小由 Bus-Width 和 Channel Width决定。
1.2&1.3


先来ds1302与主控芯片的硬件连接
CE---片选 IO---数据线(本来SPI协议需要4根线,但是在读取时间时并不能写,也就是说即使是两根数据线也不能同时使用两条数据线,即就是每次只有一条数据线在使用,那么我们只需要一根数据线就可以了,用读写来区分,这样可以减少一根数据线) SCK---时钟线
1.往DS1302中的地址为add的寄存器中写入数据。
// 往ds1302中adder中写入date 传输数据时是低位在前,高位在后
void Write_date(char add,char date)
{
char i=;
CE=; //先将片选拉低置低电平
Delay();
CLK=; //CLK也拉低
Delay();
CE=; // CE然后拉高
for(i=;i<;i++) //上升沿写入数据
{
IO=add&0x01;
Delay();
add=add>>;
CLK=; //CLK也拉高
Delay();
CLK=; //CLK也拉低
Delay();
}
//在第九个时钟周期的时候
for(i=;i<;i++)
{
IO=date&0x01;
Delay();
date=date<<;
SCK=;
Delay();
SCK=;
Delay();
}
CE=0; //拉低片选
Delay();
}
2.往ds1302地址为 add 读出数据
// 从地址为add中读出数据 传输数据时是低位在前,高位在后
char Write_date(char add)
{
char i=;
char date=;date1; //date1是做一个数据中转
CE=; //先将片选拉低置低电平
Delay();
CLK=; //CLK也拉低
Delay();
CE=; // CE然后拉高
for(i=;i<;i++) //上升沿写入数据
{
IO=add&0x01;
Delay();
add=add>>;
CLK=; //CLK也拉高
Delay();
CLK=; //CLK也拉低
Delay();
}
//在第九个时钟周期的时候
for(i=;i<;i++)
{
date1=IO; // 这里已经有数据了。
date=(date>>1)|(date1>>7);
Delay();
date=date<<;
SCK=;
Delay();
SCK=;
Delay();
}
CE=; //拉低片选
Delay();
return date;
}
接下来就要熟悉ds1302的控制字了,贴上

1.4:我们实现的一些功能
先往ds1302中写入数据,然后我们每个0.5秒读出数据在数码管上显示,这样就实现了一个实时时钟,
当然再读数据手册时,自己要注意一些DS1302的一些特定的规定,这就要仔细读数据手册了,熟悉每一部分的功能作用。
总线复习之SPI的更多相关文章
- SPI总线协议及SPI时序图详解
SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚 ...
- SPI总线协议及SPI时序图详解【转】
转自:https://www.cnblogs.com/adylee/p/5399742.html SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接 ...
- SPI总线(同步)
一.SPI总线简介 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口.SPI 用 于CPU与各种外围器件进行全双工. ...
- 总线接口与计算机通信(二)SPI总线
SPI总线协议及SPI时序图详解 : http://blog.163.com/sunshine_linting/blog/static/44893323201181482335951/ 浅谈SPI总 ...
- SPI总线工作模式
一.SPI总线工作模式 SPI总线有四种工作模式,是由时钟极性选择(CPOL)和时钟相位选择(CPHA)决定的. CPOL = 0 ,SPI总线空闲为低电平,CPOL = 1, SPI总线空闲为高电平 ...
- 关于I2C和SPI总线协议【转】
关于I2C和SPI总线协议 IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral ...
- ARM与FPGA通过spi通信设计1.spi基础知识
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息.SPI总线可直接与各个厂家生产 ...
- [转]SPI通信原理简介
[转自]http://www.cnblogs.com/deng-tao/p/6004280.html 1.前言 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 ...
- RTT下spi flash+elm fat文件系统移植小记
背景: MCU:STM32F207 SPI flash: Winbond W25Q16BV OS: RTT V1.1.1 bsp: STM32F20x 1 将spi_core.c,spi_dev.c及 ...
随机推荐
- 给zTree的treeNode添加class
onNodeCreated 回调,捕获 DOM 创建完毕的回调,然后利用 zTree 的规则找到 treeNode.tId + "_a" 这样的 标签,自行添加 class 就是了 ...
- ifram 局部刷新,不刷新父级
function loadIframe(url) { //获取url链接 var u = window.location.href; //因为每次获取的链接中都有之前的旧锚点, //所以需要把#之后的 ...
- 万能pb_ds头文件—bits/extc++.h
c++中自带了一些非常强大却鲜为人知的功能库—pd_ds库 里面含有红黑树(rb_tree),哈希表(gp_hash_table),可持久化平衡树(rope)等超强数据结构 但是有一件非常令人头痛的事 ...
- springboot项目打包运行
在springboot项目打包成jar包时,在cmd中使用java -jar **.jar时,浏览器无法访问. 解决方法:把项目改成war包项目,在pom文件中更改,并打成war包. 使用maven命 ...
- JMeter 接口测试(一)
之前的篇幅介绍了soapUI测试接口, 因为功能丰富, 操作简单, 可以参数化而深受测试小伙伴的喜欢, 今天再给大家介绍一款利器, Jmeter是Apache组织下的免费工具, 我使用的是Mac 系统 ...
- ffmpeg错误码
以下ffmpeg错误代码及翻译是本人遇到或发现后整理出来的,不保证包含全部错误代码 EPERM(不允许操作,无相应权限) = -1 ENOENT(文件或目录不存在) = -2 ESRCH(线程不存在) ...
- Docker 架构(二)【转】
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于面向对象编程中的对象与类 ...
- Python总结(一)
从大学开始,就对python有了兴趣,毕业设计就是用python做的一个新闻爬取和关键字提取的程序.然而,毕业之后由于一直没有从事python相关的开发,所以就一直没有再使用,一直停留在偶尔看一些资料 ...
- echarts堆叠图添加总量
echarts在使用中往往会遇到需要展示总量信息的情况,比较典型的就是3维统计的堆叠柱状图 堆叠是在柱状图的基础上,给几项设置同一stack来实现的.不考虑在tips中实现总和,有两种方式可以实现总和 ...
- 数据库的设计:深入理解 Realm 的多线程处理机制
你已经阅读过 Realm 关于线程的基础知识.你已经知道了在处理多线程的时候你不需要关心太多东西了,因为强大的 Realm 会帮你处理好这些,但是你还是很想知道更多细节…… 你想知道在 Realm 的 ...