单片机RTC及时钟芯片的时间到底从哪一年起始? |
您所在的位置:网站首页 › 芯片1809 › 单片机RTC及时钟芯片的时间到底从哪一年起始? |
一、前言
实时时钟RTC在嵌入式系统中是常用的功能,有的单片机有RTC功能,也有专用的RTC芯片,如DS1302、DS1307等。但RTC的“年寄存器”长度有限,一般不会包含所有年份,都是从0开始,到某个数字结束。这个开始的年份“0”到底是哪一年呢?很多人说是1970年1月1日开始,真是这样吗? 没有调查就没有发言权,本文笔者将测试多种单片机,使用内部RTC功能,以及专用的RTC芯片,考证单片机RTC及常用时钟芯片的时间到底从哪一年起始。 要讨论RTC等等时间从哪一年开始,需要用到历法知识,我们需要在特殊的时间点检验RTC的时间是如何变化的,比如闰年的闰月2月28日23:59:59秒之后,时间变成了哪一天。 二、实验测试 1.STM32F103系列内部RTC功能在STM32F103单片机内部RTC实时时钟驱动程序中,我们讨论了STM32F103C8T6单片机内部RTC功能,该功能只有一个计数器,每1秒加1,没有年月日及时间寄存器,读取计数器的值后,需要使用软件计算出时间,才能实现日历、时钟功能,软件算法需要考虑历法中的闰年等特殊情况,因此,可得出结论:STM32F103系列内部RTC没有具体的起始时间,起始时间由软件算法确定;在前述的博文中,选择用UTC时间戳(以1970年1月1日00:00:00为开始时间),可以使程序通用性更强。 2.STM32F407系列内部RTC功能该型号芯片是STM32具有完整RTC功能的代表,先看F407数据手册中关于RTC的描述: 可看出时间确实是从00年1月1日00时00分00秒,星期一开始的,与手册一致。把时间设置为00-02-28 23:59:50,星期几忽略,看10秒后时间如何变化: R5F100FE是瑞萨RL78/G13系列较常用的芯片,对RTC功能的描述如下: DS1302手册中描述如下,带闰年补偿功能,可到2100年: D31307是IIC接口的设备,除此之外,与DS1302有非常多的相似之处,都有闰年补偿功能,可计时到2100年,以下是DS1307的主要寄存器: 1.文中用到的设备,初始年份大多为00年,即四位年份yyyy格式的后两位,且当作闰年处理,如果是指1970年的话,1970年不是闰年;无论是单片机还是RTC专用芯片,没有一个手册中提到1970年1月1日这个时间,因此,说RTC功能的起始时间是1970-01-01 00:00:00的,不准确,也没有依据;认为单片机的RTC及时钟芯片时间从1970年1月1日00:00:00开始,是因为这个时间点是Unix时间戳的起始时间,在很多计算机系统和编程语言中被广泛使用;但RTC和时钟芯片的实际初始时间可能会因不同的硬件设备、制造商或系统设计而有所差异,因寄存器大小的限制,一般只计时0~99年的范围,而起始时间,实际上可由使用者自己规定; 2.对于类似STM32F103C8T6这样,RTC功能只有一个计数器,没有年月日时分秒这种时间寄存器的,需要由软件算法配合来计时,起始时间可以任意; 3.对于计时范围00~99年的设备,每4年为一个闰年,在前后100年范围内可用,但要注意的是,并不是每个整百年都是闰年,例如,2000年是闰年,但是1900年、2100年就不是闰年,因此这种情况不能单纯的将年份加1900或者2000处理,而是要经过特殊处理,可以看出,这些器件都是为本世纪设计的;如果时间来到下一世纪2100年,这些芯片没有升级换代,有程序员把00年直接当做2100年而且没经过特殊处理,是会出问题的;当然,有摩尔定律在,70多年后,这种情况是不会发生的,因为那时候这些芯片应该不存在了; 4.以上结论仅基于所述的种类有限的设备,经过测验得出,可能以偏概全了;如果有人做过更深入的研究,或者是做芯片相关功能设计的,欢迎批评指正。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |