DS1302芯片与FPGA之间SPI通信原理

描述

引言: 本文通过以DS1302芯片为基础,介绍该芯片与FPGA之间SPI通信原理,详细描述硬件设计原理及FPGA SPI接口驱动设计。

1. DS1302硬件设计原理

1.1 概述

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它提供秒、分钟、小时、天、日期、月份和年份信息,对于少于31天的月份,月末日期会自动调整,包括闰年的更正。时钟以24小时或12小时的形式运行,带有AM/PM指示器。它通过一个简单的串行SPI接口与微处理器通信,如下图所示。

芯片

图1:DS1302管脚定义及典型应用威廉希尔官方网站

图2显示了DS1302芯片内部的主要组件:电源控制、输入移位寄存器、命令和控制逻辑、振荡器、实时时钟和RAM。

芯片

图2:DS1302芯片内部框图

1.2 管脚定义说明:

VCC2  双电源配置中的主电源引脚。VCC1连接到备用电源(通常为纽扣电池),以在没有主电源的情况下保持时间和日期。DS1302从VCC1或VCC2中较大的一个操作。当VCC2大于VCC1+0.2V时,VCC2为DS1302供电。当VCC2小于VCC1时,VCC1为DS1302供电。

X1/X2: 连接标准32.768kHz石英晶体,石英晶体负载电容典型值为6pF。DS1302也可以由外部32.768kHz振荡器驱动,在该配置中,X1引脚连接到外部振荡器信号,并且X2引脚悬空。

GND: 地信号。

CE: 使能信号,输入CE信号必须在读取或写入期间被断言为高电平。该引脚有一个内部40kΩ(典型值)下拉电阻器,用于接地。

I/O: 输入/推拉输出。I/O引脚是3线接口的双向数据引脚。该引脚有一个内部40kΩ(典型值)下拉电阻器,用于接地。

SCLK: SCLK用于同步串行接口上的数据通信。该引脚有一个内部40kΩ(典型值)下拉电阻器,用于接地。

VCC1: 单电源和电池操作系统中的低功率操作以及低功率电池备份。

1.3 振荡威廉希尔官方网站

DS1302使用外部32.768kHz晶体,由于芯片内部集成了负载电容,振荡器威廉希尔官方网站 不需要任何外部电阻器或电容器来操作。表1规定了外部晶体的参数要求。

表1:外部晶体的参数要求

芯片

1.4 时钟精度

时钟的精度取决于晶体的精度以及振荡器威廉希尔官方网站 的电容性负载与晶体的电容性负荷之间的匹配精度。温度偏移引起的晶体频率漂移将增加额外的误差。耦合到振荡器威廉希尔官方网站 中的外部威廉希尔官方网站 噪声可能导致时钟快速运行。图3显示了用于隔离晶体和振荡器与噪声的典型PC板布局。

芯片

图3:隔离噪声的典型PCB板布局

1.5 原理图设计

DS1302与FPGA通过三线SPI接口进行通信,信号连接较为简单,信号对IO接口速率无要求。

芯片

图4:DS1302原理图设计

2. FPGA软件设计

2.1 SPI接口读写时序

SPI接口读时序操作如图5所示。读操作分为两个阶段,第一阶段进行写命令操作,即往I/O数据线上写入需要读出的寄存器地址,第二阶段是从I/O数据线上读取当前寄存器数据。

芯片

图5:SPI接口读操作时序

(1)使能信号CE为高电平,开启读操作,启动时,SCLK必须为低电平;

(2)在SCLK时钟的上升沿写入命令字节到I/O数据线;

(3)在SCLK时钟的下降沿从I/O数据线读取数据,要注意第一个读取的bit D0是在写命令最后一个bit时钟的下降沿采样的;

(4)使能信号CE为低电平,结束读操作。

SPI接口写时序操作如图6所示。写操作分为两个阶段,第一阶段进行写命令操作,即往I/O数据线上写入需要写入的寄存器地址,第二阶段是往I/O数据线上写入当前寄存器数据。

芯片

图6:SPI接口写操作时序

(1)使能信号CE为高电平,开启写操作;

(2)在SCLK时钟的上升沿写入命令字节到I/O数据线;

(3)在SCLK时钟的上升沿写入数据字节到I/O数据线;

(4)使能信号CE为低电平,结束写操作。

2.2 寄存器说明

命令字节

DS1302地址/命令字节如下表所示。

芯片

(1)bit7(MSB):必须是逻辑1。0:禁用对DS1302的写入;

(2)bit6:0:选择时钟/日历数据,1:选择RAM数据;

(3)bit5~bit1:指定要写或读出的指定寄存器地址;

(4)bit0:0:写操作,1:读操作。

注意:命令字节总是从LSB(位0)开始传输。

时钟和日历寄存器

时间和日历信息是通过读取DS1302的寄存器字节来获得的。表2说明了RTC寄存器。

表2:RTC寄存器

芯片

寄存器说明:

(1)时钟和日历初始化:可以通过写入适当的寄存器字节来设置或初始化时间和日历。

(2)时间和日历寄存器数据格式:二进制编码十进制(BCD)格式。

(3)星期几的寄存器在午夜递增。与星期几对应的值是用户定义的,但必须是连续的(即,如果1等于星期日,则2等于星期一,依此类推)。不合理的时间和日期条目会导致未定义的操作。

(4)每当写入秒寄存器时,就会重置倒计时链。写入传输发生在CE的下降沿。为避免滚动问题,一旦重置倒计时链,必须在1秒内写入剩余的时间和日期寄存器。

(5)DS1302可以在12小时或24小时模式下运行。小时寄存器的第7位定义为12小时或24小时模式选择位。当为高时,选择12小时模式。在12小时模式中,第5位为AM/PM位,逻辑高为PM。在24小时模式中第5位是第二个10小时位(20–23小时)。每当12/24位发生变化时,必须重新初始化小时数据。

(6)时钟停止标志:秒寄存器的bit7被定义为时钟停止(CH)标志。

1:振荡器停止,DS1302进入低功耗待机模式,电流消耗小于100nA;

0:时钟将启动。

(7)WP写保护位:控制寄存器的第7位是写保护位WP。前7位(第0位至第6位)强制为0,读取时始终读取0。在对时钟或RAM进行任何写入操作之前,位7必须为0。当为高时,写保护位防止对任何其他寄存器进行写操作。因此,在尝试写入设备之前,应清除WP位。

2.3 软件设计

软件设计模块划分如下图7所示。

芯片

图7:软件设计模块划分框图

软件主要实现功能:

(1)DS1302芯片SPI接口驱动功能;

(2)DS1302芯片寄存器读写控制功能,可以实现时钟初始化设置;

(2)按键消抖功能;

(3)数码管动态显示功能。

各个模块功能:

(1)ds1302_segma.v模块为顶层模块,用于实现模块间互联;

(2)spi_driver.v实现DS1302 SPI接口通信功能;

(3)ds1302_ctrl_m.v实现DS1302寄存器读写控制功能,包括将设置值写入芯片和将芯片寄存器值读出控制。

(4)set_init_time.v实现通过按键实现时间初始值设置;

(5)Segma.v实现数码管动态显示功能(数码管位有限,只显示时、分、秒);

(6)KeyJitters.v实现按键消抖功能。

3. 软件实测

软件下载至威廉希尔官方网站 板,通过SignaTap II在线逻辑分析仪抓取数据如下图所示。

芯片

图8:软件设计模块划分框图

芯片

图9:数码管显示实时时钟初始值

图8显示计时初始值正确写入ds1302芯片寄存器,图9数码管显示了正确的时、分、秒初始值。

来源:本文转载自FPGA技术实战公众号

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分