学过SPI总线后,不难发现SPI总线通信时序与DS1302通信时序有相似之处。

关于SPI总线的内容请参考:https://blog.csdn.net/cax1165/article/details/87001618

然而DS1302模块却仅有三根线,事实上,DS1302的通信是SPI的变异种类,它采用了SPI的通信时序,但是通信的时候没有完全按照SPI的规则来,下面我们将逐步分析DS1302的变异SPI通信方式

首先来看DS1302单字节写入操作(图一):

然后我们再对比一下CPOL=0并且CPHA=0的情况下的SPI的操作时序(图二):

在两者的通信时序中,使能信号是相反的。对于通信写数据,都是在SCK的上升沿,从机进行采样,下降沿的时候,主机发送数据(为什么从机是在上升沿采样,请看下文注释1)。DS1302的时序里,单片机要预先写一个字节指令,指明要写入的寄存器的地址以及后续的操作是写操作,然后再写入一个字节的数据。

注释1:DS1302时序图时钟信号上的箭头是针对DS1302而言的,即:时钟模块在箭头进行数据采样或数据输出。同样,在非箭头处,主机(单片机)进行数据采样或数据输出。而上图时序图为写数据,即时钟模块接收数据,因此时钟模块在箭头处进行的是数据采样工作(接收单片机输出的数据)。单片机向外发送数据,因此主机在下降沿进行的是数据输出工作。

对于DS1302的单字节读操作,时序图如下:

需要注意的是:

一、DS1302的单字节读操作分为两步,第一步主机向从机写入地址(与上文中单字节写操作的时序图相同),第二步DS1302才开始向主机发送数据。观察第二步时序图中时钟信号上面的箭头可以发现,DS1302在下降沿向外传输数据(根据上文中对于箭头的解释,此时正在进行读操作,即DS1302向单片机发送数据,所以时钟模块此时进行的是数据传输工作)。那么在没有箭头的上升沿,单片机进行的则是数据采样工作。

二、我们的单片机没有标准的SPI接口,和I2C一样需要用IO口来模拟通信过程。在读DS1302的时候,理论上SPI是上升沿读取,但是我们的程序是用IO口模拟的,所以数据的读取和时钟沿的变化不可能同时了,必然就有一个先后顺序。通过实验发现,如果先读取IO线上的数据,再拉高SCLK产生上升沿,那么读到的数据一定是正确的,而颠倒顺序后数据就有可能出错。这个问题产生的原因还是在于DS1302的通信协议与标准SPI协议存在的差异造成的,如果是标准SPI的数据线,数据会一直保持到下一个周期的下降沿才会变化,所以读取数据和上升沿的先后顺序就无所谓了;但DS1302的IO线会在时钟上升沿后被DS1302释放,也就是撤销强推挽输出变为弱下拉状态,而此时在51单片机引脚内部上拉的作用下,IO线上的实际电平会慢慢上升,从而导致在上升沿产生后再读取IO数据的话就可能出错。因此这里的程序我们按照先读取IO数据,再拉高SCLK产生上升沿的顺序。

最后需要注意的是:只有在SCLK为低电平时,才能将CE置为高电平。因为SCLK连接的是单片机IO口,默认情况下为高电平。若CE置为高电平(置为高电平后DS1302开始工作)后将SCLK拉低,这相当于在时钟模块开始工作后,SCLK来了一个下降沿,这与时序图是不符合的。

DS1302时钟模块通信原理(SPI总线)相关推荐

  1. 蓝桥杯单片机之DS1302时钟模块的使用

    蓝桥杯单片机之DS1302时钟模块的使用 DS1302简介 SPI串口简介 BCD码 阅读手册获取寄存器信息 日历时钟寄存器 控制字 将手册中的数据进行分析可得 完整代码示例: 总结 DS1302简介 ...

  2. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  3. 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  4. DS1302时钟模块

    DS1302时钟比起DS18B20而言要简单的多. 需要注意的大概三点: 1. 写入时分秒 void set_time(unsigned char shi, unsigned char fen ,un ...

  5. 蓝桥杯单片机-DS1302时钟模块

    一.简介 1.采用SPI三线接口通信(SCK.SDA.RST) 上升沿数据被写入DS1302,下降沿被读出 二.应用 1.在ds1302.c文件中定义三个数组 unsigned char code R ...

  6. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章       STM32H7的SPI总线基础知识和HA ...

  7. 简述SPI总线通信协议笔记

    一.SPI总线简介 SPI总线是串行.高速.全双工.同步通信总线.采用主从方式工作,一般有一个住设备和一个或多个从设备.SPI需要至少4根线,分别是MISO(主设备输入从设备输出).MOSI(主设备输 ...

  8. STM32F103和DS1302时钟

    STM32F103和DS1302时钟 DS1302模块讲解 源文件演示 源文件下载链接 最近在写了一些关于STM32F103C8T6对于模块的时候方面的代码的整合,想把之前用到的代码全部都整合成一个一 ...

  9. 【Arduino】ESP8266DS1302时钟模块

    前言 ​ ESP8266基于Arduino IDE的DS1302时钟模块使用,的过程记录.DS1302时钟模块就不详细介绍了,网上还是有很多资料的,这里只说如何快速上手. 下载文件 代码理解 实际测试 ...

  10. SPI的模拟应用——OLED以及时钟模块的应用(一)SPI协议介绍及利用协议实现两机通信(51单片机)

    链接:https://pan.baidu.com/s/1g8jkENjO8v4eXq0bN0acEw?pwd=45c8  提取码:45c8 目录 一. 什么是SPI 1-1 SPI简介 1-2 SPI ...

最新文章

  1. tensorflow1
  2. 9月7日学习内容整理:内置函数
  3. 法流程图_【对反应过程的笔记整理方法——时间轴法】
  4. PHP面试题:在PHP中error_reporting这个函数有什么作用?
  5. [BUUCTF-pwn]——not_the_same_3dsctf_2016
  6. 牛客题霸 [ 树的直径] C++题解/答案
  7. uploadify java 上传_jquery使用uploadify插件实现多文件的上传(java版)
  8. 常用JS正则匹配函数
  9. OpenShift 4 之 Hello-OpenShift
  10. linux如何压缩磁盘,Linux初级运维(十二)——磁盘及文件系统管理
  11. 用计算机亩换算成平方,平方换算成亩怎么算(平方米换算亩计算器)
  12. 【网络传输协议】RTSP即RealTimeStreamingProtocol流媒体网络传输协议
  13. Qt-FFmpeg开发-保存视频流裸流(11)
  14. 【算法基础12】最小生成树的两种解法(普里姆、克鲁斯卡尔)
  15. 老调重弹-access注入过主机卫
  16. weboffice使用
  17. Android 最详细的图片压缩攻略(建议收藏)
  18. 为啥app没有menu键?
  19. 卧槽,3D错觉!这脑洞简直了...
  20. POJ2507 Crossed ladders

热门文章

  1. 基于单片机的光立方设计
  2. RS232,RS485 标准DB9接口(串口通信线标准接口)
  3. 虚拟机安装windows xp系统时,找不到网络连接
  4. 疯狂软件Oracle数据库视频
  5. 五、应用程序与驱动程序交互(缓冲模式)
  6. coreseek mysql_coreseek 与 php mysql 的联合使用
  7. 【聚沙成塔】将Mon Jun 01 2020 00:00:00 GMT+0800 (中国标准时间) 转换为 2020-06
  8. 惠普打印机驱动服务器系统,在打印机服务器(系统WIN2003)上安装了HP5100 打印机,客户机系统WIN7 64位,现没法添加HP5100的驱动...
  9. 浏览器插件检测淘宝订单是否淘客下单
  10. 新一配:iPod及其系列产品【转载】