CN114063705A - 一种实时时钟芯片的读写系统及方法 - Google Patents
一种实时时钟芯片的读写系统及方法 Download PDFInfo
- Publication number
- CN114063705A CN114063705A CN202111396162.8A CN202111396162A CN114063705A CN 114063705 A CN114063705 A CN 114063705A CN 202111396162 A CN202111396162 A CN 202111396162A CN 114063705 A CN114063705 A CN 114063705A
- Authority
- CN
- China
- Prior art keywords
- time
- interface
- spi
- read
- chip
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
- G06F1/14—Time supervision arrangements, e.g. real time clock
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/24—Resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0016—Inter-integrated circuit (I2C)
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种实时时钟芯片的读写系统及方法,该系统在使用只具有I2C接口的RTC的守时模块中加入一片MCU芯片,实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,更新并等待外部系统再次读取时间。本发明在不改变系统接口情况下,只需调整系统的时间读写时序,就可兼容采用SPI接口的外部系统和只具有I2C接口的RTC的时间读写。
Description
技术领域
本发明涉及实时时钟芯片技术领域,具体涉及一种实时时钟芯片的读写系统及方法。
背景技术
实时时钟的缩写是RTC(Real_Time Clock)。RTC是集成电路,通常称为时钟芯片。实时时钟芯片是日常生活中应用最为广泛的消费类电子产品之一。它为人们提供精确的实时时间,或者为电子系统提供精确的时间基准。目前市面上常见的实时时钟芯片有DS3234SN、JYC3231、INS5902A等。其中DS3234SN是进口芯片,是一款低成本、超高精度、采用SPI总线的实时时钟,内部集成了温度补偿晶体振荡器(TCXO)和晶体。JYC3231和INS5902A是国产芯片,两者也集成了温度补偿晶体振荡器(TCXO)和晶体,可自动调整时钟精度,具有I2C通信接口。
在采用进口RTC作为守时模块的电子系统上进行国产化改进,由于进口RTC的接口和国产RTC的接口不一样,设计人员需要在时间读写接口上进行区别设计,这样会导致新的守时模块无法兼容老的系统接口,新的系统接口无法兼容老的守时模块。如果把SPI和I2C两种接口都加入设计,则会导致接口设计很复杂,系统结构发生改变,使用场景变得复杂。因此,进口RTC和国产RTC的接口存在不兼容问题。
发明内容
本发明所要解决的技术问题是采用SPI接口的外部系统和只具有I2C接口的RTC的接口存在不兼容问题,本发明目的在于提供一种实时时钟芯片的读写系统及方法,在使用只具有I2C接口的RTC芯片的守时模块中加入一片MCU芯片,负责SPI到I2C接口的数据转发功能;本发明在不改变系统接口的情况下,只需要调整系统的时间读写时序,就可以兼容采用SPI接口的外部系统和只具有I2C接口的RTC芯片的时间读写,解决了采用SPI接口的外部系统和只具有I2C接口的RTC的接口兼容问题。
本发明通过下述技术方案实现:
第一方面,本发明提供了一种实时时钟芯片的读写系统,该读写系统包括MCU芯片、RTC芯片和电源,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;
所述MCU芯片,用于实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
所述电源用于为RTC芯片供电,所述电源可采用电池进行供电。
进一步地,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。其中,所述外部系统是需要读时间的外部系统,且其是SPI接口。
进一步地,从端的SPI接口发送缓存采用固定长度和固定内容的数据,固定长度为8个字节,内容为测试字1+秒+分+时+测试字2+日+月+年;
读时间时,主端发送的数据为0x00+任意预设好的7字节数据,比如0x00+0xff+0xff+0xff+0xff+0xff+0xff+0xff。
写时间时,主端发送的数据为0x80+秒+分+时+周+日+月+年。
进一步地,SPI从端的MCU软件的执行过程为:其中,MCU软件是MCU芯片上运行的软件;
复位所有外设,初始化MCU芯片的内部时钟;
初始化GPIO接口、I2C接口、SPI接口等外设;
将SPI接口回调标志g_SpiCallBack置为无效;
使用默认值初始化SPI接口发送缓存数据Spi_TxBuff;
初始化SPI接口回调函数SPI_TxRxCpltCallback,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志g_SpiCallBack置为有效;
将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
循环检测SPI接口工作状态:
当检测到回调标志为有效时,将回调标志g_SpiCallBack置为无效,并对SPI接口的接收缓存数据Spi_RxBuff进行处理;如果接收到的数据是写时间指令,即Spi_RxBuff[0]==0x80,则进行写时间处理:将SPI接口的接收缓存数据Spi_RxBuff的时间数据赋值给I2C接口的写缓存数据I2c_WriteBuff中,然后将时间数据写入RTC芯片;如果接收到的数据是读时间指令,则进行读时间处理:将RTC芯片的时间读出到I2C接口的读缓存数据I2c_ReadBuff,将I2C接口的读缓存数据I2c_ReadBuff中的时间数据赋值给SPI接口发送缓存数据Spi_TxBuff中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
当检测到SPI接口发生超限错误时,进行SPI超限错误处理:重新初始化SPI接口,将SPI接口回调标志g_SpiCallBack置为无效,使用默认值初始化SPI接口发送缓存Spi_TxBuff,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;SPI接口发送缓存的数据清空后仍然接收到数据时会触发超限错误。
进一步地,SPI主端从守时模块获取时间的过程为:
首次读时间;
进行测试字比对,判断测试字是否一致:判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),再次读时间,读到的时间为RTC芯片的当前时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU软件重置SPI接口,返回首次读时间。
进一步地,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;SPI主端向守时模块设置时间的过程为:
读时间;
进行测试字比对,判断测试字是否一致:判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),获取本地时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU芯片的软件重置SPI接口,返回读时间;
循环判断本地时间的毫秒位是否小于第三预设值:(预设值可以为990ms,此处990ms是时间比对值,可以根据实际情况设置其他值,在990ms时写下一秒的时间,实际是补偿了10ms的时间误差);
如果小于第三预设值,则延时第四预设值(比如1ms,还可以为其他值),获取本地时间;(此处1ms是时间误差补偿的一个步进值,可以根据实际情况设置其他的步进值),继续循环;
如果不小于第三预设值,则将当前时间加1s,跳出循环;
将补偿后的时间通过SPI接口写给MCU芯片;
延时第五预设值(比如5ms,还可以为其他值),再读时间;
将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
第二方面,本发明又提供了一种实时时钟芯片的读写方法,该方法应用于所述的一种实时时钟芯片的读写系统,包括MCU芯片和RTC芯片,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;通过MCU芯片实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;该方法包括:
当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
其中,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。
进一步地,SPI从端的MCU软件的执行步骤为:其中,MCU软件是MCU芯片上运行的软件;
S1-0:复位所有外设,初始化MCU芯片的内部时钟;
S1-1:初始化GPIO接口、I2C接口、SPI接口等外设;
S1-2:将SPI接口回调标志g_SpiCallBack置为无效;
S1-3:使用默认值初始化SPI接口发送缓存数据Spi_TxBuff;
S1-4:初始化SPI接口回调函数SPI_TxRxCpltCallback,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志g_SpiCallBack置为有效;
S1-5:将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
S1-6:循环检测SPI接口工作状态:当检测到回调标志为有效时,进入S1-7;当检测到SPI接口发生超限错误时,进入S1-10;
S1-7:将回调标志g_SpiCallBack置为无效,并对SPI接口的接收缓存数据Spi_RxBuff进行处理;如果接收到的数据是写时间指令,即Spi_RxBuff[0]==0x80,则进入S1-8进行写时间处理;如果接收到的数据是读时间指令,则进入S1-9进行读时间处理;
S1-8:将SPI接口的接收缓存数据Spi_RxBuff的时间数据赋值给I2C接口的写缓存数据I2c_WriteBuff中,然后将时间数据写入RTC芯片;然后进入S1-9;
S1-9:将RTC芯片的时间读出到I2C接口的读缓存数据I2c_ReadBuff,将I2C接口的读缓存数据I2c_ReadBuff中的时间数据赋值给SPI接口发送缓存数据Spi_TxBuff中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
S1-10:进行SPI超限错误处理:重新初始化SPI接口,将SPI接口回调标志g_SpiCallBack置为无效,使用默认值初始化SPI接口发送缓存Spi_TxBuff,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;SPI接口发送缓存的数据清空后仍然接收到数据时会触发超限错误。
进一步地,SPI主端从守时模块获取时间的步骤为:
S2-0:首次读时间;
S2-1:进行测试字比对,判断测试字是否一致;判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
S2-2:如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),进入S2-5;
S2-3:如果测试字比对不通过,判断是否已经错误三次;
S2-4:如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU软件重置SPI接口,返回进入S2-0;
S2-5:再次读时间,读到的时间为RTC芯片的当前时间。
进一步地,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;SPI主端向守时模块时间的设置时间的步骤为:
S3-0:读时间;
S3-1:进行测试字比对,判断测试字是否一致;判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
S3-2:如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),进入S3-5;
S3-3:如果测试字比对不通过,判断是否已经错误三次;
S3-4:如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU芯片的软件重置SPI接口,返回S3-0;
S3-5:获取本地时间;
S3-6:判断本地时间的毫秒位是否小于第三预设值;(预设值可以为990ms,此处990ms是时间比对值,可以根据实际情况设置其他值,在990ms时写下一秒的时间,实际是补偿了10ms的时间误差);
S3-7:如果小于第三预设值,则延时第四预设值(比如1ms,还可以为其他值),进入S3-5;(此处1ms是时间误差补偿的一个步进值,可以根据实际情况设置其他的步进值,通过调整S3-6中的时间比对值和S3-7中的延时步进值,就可以实现更加小的时间误差);
S3-8:如果不小于第三预设值,则将当前时间加1s;
S3-9:将补偿后的时间通过SPI接口写给MCU芯片;
S3-10:延时第五预设值(比如5ms,还可以为其他值);
S3-11:读时间;
S3-12:将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
本发明与现有技术相比,具有如下的优点和有益效果:
本发明在使用只具有I2C接口的RTC芯片的守时模块中加入一片MCU芯片,负责SPI到I2C接口的数据转发功能;本发明在不改变系统接口的情况下,只需要调整系统的时间读写时序,就可以兼容采用SPI接口的外部系统和只具有I2C接口的RTC芯片的时间读写,解决了采用SPI接口的外部系统和只具有I2C接口的RTC芯片的接口兼容问题。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为本发明一种实时时钟芯片的读写系统框图。
图2为本发明SPI从端的MCU软件的执行步骤流程图。
图3为本发明SPI主端从守时模块获取时间的步骤流程图。
图4为本发明SPI主端向守时模块设置时间的步骤流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
如图1至图4所示,本发明展示了一种实时时钟芯片的读写系统,如图1所示,该读写系统包括但不限于MCU芯片、RTC芯片和电源,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;
所述MCU芯片,具有SPI接口和I2C接口,用于实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;所述RTC芯片只具有I2C接口。当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
所述电源用于为RTC芯片供电,所述电源可采用电池进行供电。
所述外部系统是需要读时间的外部系统,且其是SPI接口。
具体地,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。从端的SPI接口发送缓存采用固定长度和固定内容的数据,固定长度为8个字节,内容为测试字1+秒+分+时+测试字2+日+月+年;
读时间时,主端发送的数据为0x00+任意预设好的7字节数据,比如0x00+0xff+0xff+0xff+0xff+0xff+0xff+0xff。
写时间时,主端发送的数据为0x80+秒+分+时+周+日+月+年。
具体地,如图2所示,SPI从端的MCU软件的执行过程为:其中,MCU软件是MCU芯片上运行的软件;
复位所有外设,初始化MCU芯片的内部时钟;
初始化GPIO接口、I2C接口、SPI接口等外设;
将SPI接口回调标志g_SpiCallBack置为无效;
使用默认值初始化SPI接口发送缓存数据Spi_TxBuff;
初始化SPI接口回调函数SPI_TxRxCpltCallback,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志g_SpiCallBack置为有效;
将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
通过while循环检测SPI接口工作状态:
当检测到回调标志为有效时,将回调标志g_SpiCallBack置为无效,并对SPI接口的接收缓存数据Spi_RxBuff进行处理;如果接收到的数据是写时间指令,即Spi_RxBuff[0]==0x80,则进行写时间处理:将SPI接口的接收缓存数据Spi_RxBuff的时间数据赋值给I2C接口的写缓存数据I2c_WriteBuff中,然后将时间数据写入RTC芯片;如果接收到的数据是读时间指令,则进行读时间处理:将RTC芯片的时间读出到I2C接口的读缓存数据I2c_ReadBuff,将I2C接口的读缓存数据I2c_ReadBuff中的时间数据赋值给SPI接口发送缓存数据Spi_TxBuff中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
当检测到SPI接口发生超限错误时,进行SPI超限错误处理:重新初始化SPI接口,将SPI接口回调标志g_SpiCallBack置为无效,使用默认值初始化SPI接口发送缓存Spi_TxBuff,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;SPI接口发送缓存的数据清空后仍然接收到数据时会触发超限错误。
具体地,如图3所示,SPI主端读时间的获取过程为:
首次读时间;
进行测试字比对,判断测试字是否一致:判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),再次读时间,读到的时间为RTC芯片的当前时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU软件重置SPI接口,返回首次读时间。
具体地,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;如图4所示,SPI主端时间的设置过程为:
读时间;
进行测试字比对,判断测试字是否一致:判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),获取本地时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU芯片的软件重置SPI接口,返回读时间;
循环判断本地时间的毫秒位是否小于第三预设值990ms;(此处990ms是时间比对值,可以根据实际情况设置其他值,在990ms时写下一秒的时间,实际是补偿了10ms的时间误差);
如果小于第三预设值990ms,则延时第四预设值(比如1ms,还可以为其他值),获取本地时间,继续循环;(此处1ms是时间误差补偿的一个步进值,可以根据实际情况设置其他的步进值);
如果不小于第三预设值,则将当前时间加1s,跳出循环;
将补偿后的时间通过SPI接口写给MCU芯片;
延时第五预设值(比如5ms,还可以为其他值),再读时间;
将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
工作原理是:本发明在使用只具有I2C接口的RTC芯片的守时模块中加入一片MCU芯片,负责SPI到I2C接口的数据转发功能;本发明在不改变系统接口的情况下,只需要调整系统的时间读写时序,就可以兼容采用SPI接口的外部系统和只具有I2C接口的RTC芯片的时间读写,解决了采用SPI接口的外部系统和只具有I2C接口的RTC芯片的接口兼容问题。即在使用只具有I2C接口的RTC芯片的守时模块中加入一片MCU芯片,负责SPI到I2C接口的数据转发功能;本发明在不改变系统接口的情况下,只需要调整系统的时间读写时序,就可以兼容SPI接口的RTC和I2C接口的RTC的时间读写,解决了SPI接口的RTC和I2C接口的RTC的接口兼容问题。
实施例2
如图1至图4所示,本实施例与实施例1的区别在于,本实施例提供了一种实时时钟芯片的读写方法,该方法应用于实施例1所述的一种实时时钟芯片的读写系统,包括MCU芯片和RTC芯片,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;通过MCU芯片实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;该方法包括:
当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
其中,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。
具体地,如图2所示,SPI从端的MCU软件的执行步骤为:其中,MCU软件是MCU芯片上运行的软件;
S1-0:复位所有外设,初始化MCU芯片的内部时钟;
S1-1:初始化GPIO接口、I2C接口、SPI接口等外设;
S1-2:将SPI接口回调标志g_SpiCallBack置为无效;
S1-3:使用默认值初始化SPI接口发送缓存数据Spi_TxBuff;
S1-4:初始化SPI接口回调函数SPI_TxRxCpltCallback,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志g_SpiCallBack置为有效;
S1-5:将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
S1-6:循环检测SPI接口工作状态:当检测到回调标志为有效时,进入S1-7;当检测到SPI接口发生超限错误时,进入S1-10;
S1-7:将回调标志g_SpiCallBack置为无效,并对SPI接口的接收缓存数据Spi_RxBuff进行处理;如果接收到的数据是写时间指令,即Spi_RxBuff[0]==0x80,则进入S1-8进行写时间处理;如果接收到的数据是读时间指令,则进入S1-9进行读时间处理;
S1-8:将SPI接口的接收缓存数据Spi_RxBuff的时间数据赋值给I2C接口的写缓存数据I2c_WriteBuff中,然后将时间数据写入RTC芯片;然后进入S1-9;
S1-9:将RTC芯片的时间读出到I2C接口的读缓存数据I2c_ReadBuff,将I2C接口的读缓存数据I2c_ReadBuff中的时间数据赋值给SPI接口发送缓存数据Spi_TxBuff中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
S1-10:进行SPI超限错误处理:重新初始化SPI接口,将SPI接口回调标志g_SpiCallBack置为无效,使用默认值初始化SPI接口发送缓存Spi_TxBuff,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;SPI接口发送缓存的数据清空后仍然接收到数据时会触发超限错误。
具体地,如图3所示,SPI主端从守时模块获取时间的步骤为:
S2-0:首次读时间;
S2-1:进行测试字比对是否通过的判断;判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
S2-2:如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),进入S2-5;
S2-3:如果测试字比对不通过,判断是否已经错误三次;
S2-4:如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU软件重置SPI接口,返回进入S2-0;
S2-5:再次读时间,读到的时间为RTC芯片的当前时间。
具体地,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;如图4所示,SPI主端向守时模块设置时间的步骤为:
S3-0:读时间;
S3-1:进行测试字比对是否通过的判断;判断读到的第1个字节是否是测试字1,第5个字节是否是测试字2;
S3-2:如果测试字比对通过,则SPI接口正常,延时第一预设值(比如1ms,还可以为其他值),进入S3-5;
S3-3:如果测试字比对不通过,判断是否已经错误三次;
S3-4:如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值(比如200ms,还可以为其他值),等待MCU芯片的软件重置SPI接口,返回S3-0;
S3-5:获取本地时间;
S3-6:判断本地时间的毫秒位是否小于第三预设值;(预设值可以为990ms,此处990ms是时间比对值,可以根据实际情况设置其他值,在990ms时写下一秒的时间,实际是补偿了10ms的时间误差);
S3-7:如果小于第三预设值,则延时1ms,进入S3-5;(此处1ms是时间误差补偿的一个步进值,可以根据实际情况设置其他的步进值,通过调整S3-6中的时间比对值和S3-7中的延时步进值,就可以实现更加小的时间误差);
S3-8:如果不小于第三预设值,则将当前时间加1s;
S3-9:将补偿后的时间通过SPI接口写给MCU软件;
S3-10:延时第五预设值(比如5ms,还可以为其他值);
S3-11:读时间;
S3-12:将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
本发明方法在使用只具有I2C接口的RTC芯片的守时模块中加入一片MCU芯片,负责SPI到I2C接口的数据转发功能;本发明在不改变系统接口的情况下,只需要调整系统的时间读写时序,就可以兼容SPI接口的RTC和I2C接口的RTC的时间读写,解决了SPI接口的RTC和I2C接口的RTC的接口兼容问题。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种实时时钟芯片的读写系统,其特征在于,该读写系统包括MCU芯片、RTC芯片,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;
所述MCU芯片,具有SPI接口和I2C接口,用于实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;所述RTC芯片只具有I2C接口;当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间。
2.根据权利要求1所述的一种实时时钟芯片的读写系统,其特征在于,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。
3.根据权利要求2所述的一种实时时钟芯片的读写系统,其特征在于,从端的SPI接口发送缓存采用固定长度和固定内容的数据,固定长度为8个字节,内容为测试字1+秒+分+时+测试字2+日+月+年;
读时间时,主端发送的数据为0x00+任意预设好的7字节数据;
写时间时,主端发送的数据为0x80+秒+分+时+周+日+月+年。
4.根据权利要求2所述的一种实时时钟芯片的读写系统,其特征在于,SPI从端的MCU软件的执行过程为:
复位所有外设,初始化MCU芯片的内部时钟;
初始化GPIO接口、I2C接口、SPI接口外设;
将SPI接口回调标志置为无效;
使用默认值初始化SPI接口发送缓存数据;
初始化SPI接口回调函数,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志置为有效;
将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
循环检测SPI接口工作状态:
当检测到回调标志为有效时,将回调标志置为无效,并对SPI接口的接收缓存数据进行处理;如果接收到的数据是写时间指令,则进行写时间处理:将SPI接口的接收缓存数据的时间数据赋值给I2C接口的写缓存数据中,然后将时间数据写入RTC芯片;如果接收到的数据是读时间指令,则进行读时间处理:将RTC芯片的时间读出到I2C接口的读缓存数据,将I2C接口的读缓存数据中的时间数据赋值给SPI接口发送缓存数据中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
当检测到SPI接口发生超限错误时,进行SPI超限错误处理。
5.根据权利要求4所述的一种实时时钟芯片的读写系统,其特征在于,SPI主端从守时模块获取时间的过程为:
首次读时间;
进行测试字比对,判断测试字是否一致:如果测试字比对通过,则SPI接口正常,延时第一预设值,再次读时间,读到的时间为RTC芯片的当前时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值,等待MCU芯片的软件重置SPI接口,返回首次读时间。
6.根据权利要求4所述的一种实时时钟芯片的读写系统,其特征在于,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;SPI主端向守时模块设置时间的过程为:
读时间;
进行测试字比对,判断测试字是否一致:如果测试字比对通过,则SPI接口正常,延时第一预设值,获取本地时间;
如果测试字比对不通过,判断是否已经错误三次;
如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值,等待MCU芯片的软件重置SPI接口,返回读时间;
循环判断本地时间的毫秒位是否小于第三预设值:如果小于第三预设值,则延时第四预设值,获取本地时间,继续循环;如果已经不小于第三预设值,则将当前时间加1s,跳出循环;
将补偿后的时间通过SPI接口写给MCU芯片;
延时第五预设值,再读时间;
将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
7.一种实时时钟芯片的读写方法,其特征在于,包括MCU芯片和RTC芯片,所述MCU芯片设于安装有RTC芯片的守时模块中;所述MCU芯片与外部系统使用SPI接口通信,所述MCU芯片与RTC芯片使用I2C接口通信;通过MCU芯片实现外部系统的SPI接口到RTC芯片的I2C接口的数据转发功能;该方法包括:
当MCU芯片通过SPI接口收到读时间指令时,通过I2C接口去读取RTC芯片的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
当MCU芯片通过SPI接口收到写时间指令时,通过I2C接口去设置RTC芯片的时间,并读取设置后的当前时间,更新SPI接口发送缓存区,等待外部系统再次读取时间;
其中,所述MCU芯片的SPI接口设置为从模式,外部系统的SPI接口设置为主模式。
8.根据权利要求7所述的一种实时时钟芯片的读写方法,其特征在于,SPI从端的MCU芯片的软件的执行步骤为:
S1-0:复位所有外设,初始化MCU芯片的内部时钟;
S1-1:初始化GPIO接口、I2C接口、SPI接口外设;
S1-2:将SPI接口回调标志置为无效;
S1-3:使用默认值初始化SPI接口发送缓存数据;
S1-4:初始化SPI接口回调函数,当SPI接口的发送缓存数据发送完后,回调函数会将回调标志置为有效;
S1-5:将收发缓存与SPI接口关联起来,使SPI接口进入从模式工作状态;
S1-6:循环检测SPI接口工作状态:当检测到回调标志为有效时,进入S1-7;当检测到SPI接口发生超限错误时,进入S1-10;
S1-7:将回调标志置为无效,并对SPI接口的接收缓存数据进行处理;如果接收到的数据是写时间指令,则进入S1-8进行写时间处理;如果接收到的数据是读时间指令,则进入S1-9进行读时间处理;
S1-8:将SPI接口的接收缓存数据的时间数据赋值给I2C接口的写缓存数据中,然后将时间数据写入RTC芯片;然后进入S1-9;
S1-9:将RTC芯片的时间读出到I2C接口的读缓存数据,将I2C接口的读缓存数据中的时间数据赋值给SPI接口发送缓存数据中,将收发缓存与SPI接口关联起来,使SPI接口重新进入从模式工作状态;
S1-10:进行SPI超限错误处理。
9.根据权利要求8所述的一种实时时钟芯片的读写方法,其特征在于,SPI主端从守时模块获取时间的步骤为:
S2-0:首次读时间;
S2-1:进行测试字比对,判断测试字是否一致;
S2-2:如果测试字比对通过,则SPI接口正常,延时第一预设值,进入S2-5;
S2-3:如果测试字比对不通过,判断是否已经错误三次;
S2-4:如果已经错误三次,则读时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值,等待MCU芯片的软件重置SPI接口,返回进入S2-0;
S2-5:再次读时间,读到的时间为RTC芯片的当前时间。
10.根据权利要求8所述的一种实时时钟芯片的读写方法,其特征在于,外部系统的本地时间发生跳秒,收到秒中断后,主端开始写时间,写时间在当前这一秒内完成;SPI主端向守时模块设置时间的步骤为:
S3-0:读时间;
S3-1:进行测试字比对,判断测试字是否一致;
S3-2:如果测试字比对通过,则SPI接口正常,延时第一预设值,进入S3-5;
S3-3:如果测试字比对不通过,判断是否已经错误三次;
S3-4:如果已经错误三次,则写时间失败;如果错误还未到三次,则认为SPI接口异常,延时第二预设值,等待MCU芯片的软件重置SPI接口,返回S3-0;
S3-5:获取本地时间;
S3-6:判断本地时间的毫秒位是否小于第三预设值;
S3-7:如果小于第三预设值,则延时第四预设值,进入S3-5;
S3-8:如果不小于第三预设值,则将当前时间加1s;
S3-9:将补偿后的时间通过SPI接口写给MCU芯片;
S3-10:延时第五预设值;
S3-11:读时间;
S3-12:将写入时间和读出时间进行比对:如果数据一致,则写时间成功;如果不一致,则写时间失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111396162.8A CN114063705B (zh) | 2021-11-23 | 2021-11-23 | 一种实时时钟芯片的读写系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111396162.8A CN114063705B (zh) | 2021-11-23 | 2021-11-23 | 一种实时时钟芯片的读写系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114063705A true CN114063705A (zh) | 2022-02-18 |
CN114063705B CN114063705B (zh) | 2023-05-26 |
Family
ID=80275457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111396162.8A Active CN114063705B (zh) | 2021-11-23 | 2021-11-23 | 一种实时时钟芯片的读写系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114063705B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169673A (zh) * | 2007-10-15 | 2008-04-30 | 中兴通讯股份有限公司 | 实时时钟芯片接口电路的控制方法及实时时钟控制电路 |
CN203849851U (zh) * | 2014-03-13 | 2014-09-24 | 上海计算机软件技术开发中心 | 一种物联网数据采集器 |
CN106950426A (zh) * | 2017-05-03 | 2017-07-14 | 国网四川省电力公司电力科学研究院 | 基于广域同步测量的三相电能表及其测量方法 |
CN106959935A (zh) * | 2017-03-13 | 2017-07-18 | 郑州云海信息技术有限公司 | 一种兼容i2c通信与ipmb通信的方法 |
US20180189464A1 (en) * | 2016-12-30 | 2018-07-05 | Alpa T. Narendra Trivedi | Trusted timer service |
US20180284837A1 (en) * | 2017-03-28 | 2018-10-04 | Dell Products, Lp | System and Method for Enhancing Real-Time Clock Usage in an Information Handling System |
CN109572764A (zh) * | 2019-01-18 | 2019-04-05 | 天津七二通信广播股份有限公司 | 一种带空口校时功能的平面调车系统及校时方法 |
CN110232041A (zh) * | 2019-05-17 | 2019-09-13 | 无锡泰泓信息科技有限公司 | 一种基于申威芯片的国产服务器主板的实现方法 |
CN111614165A (zh) * | 2020-06-04 | 2020-09-01 | 积成电子股份有限公司 | 一种配电自动化终端守时方法及系统 |
CN112462847A (zh) * | 2020-10-29 | 2021-03-09 | 南京因泰莱电器股份有限公司 | 提高配电自动化设备断电守时精度的方法 |
CN112910833A (zh) * | 2020-09-29 | 2021-06-04 | 重庆赛格盾科技有限公司 | 一种基于lora物联网网关的检测系统 |
-
2021
- 2021-11-23 CN CN202111396162.8A patent/CN114063705B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169673A (zh) * | 2007-10-15 | 2008-04-30 | 中兴通讯股份有限公司 | 实时时钟芯片接口电路的控制方法及实时时钟控制电路 |
CN203849851U (zh) * | 2014-03-13 | 2014-09-24 | 上海计算机软件技术开发中心 | 一种物联网数据采集器 |
US20180189464A1 (en) * | 2016-12-30 | 2018-07-05 | Alpa T. Narendra Trivedi | Trusted timer service |
CN106959935A (zh) * | 2017-03-13 | 2017-07-18 | 郑州云海信息技术有限公司 | 一种兼容i2c通信与ipmb通信的方法 |
US20180284837A1 (en) * | 2017-03-28 | 2018-10-04 | Dell Products, Lp | System and Method for Enhancing Real-Time Clock Usage in an Information Handling System |
CN106950426A (zh) * | 2017-05-03 | 2017-07-14 | 国网四川省电力公司电力科学研究院 | 基于广域同步测量的三相电能表及其测量方法 |
CN109572764A (zh) * | 2019-01-18 | 2019-04-05 | 天津七二通信广播股份有限公司 | 一种带空口校时功能的平面调车系统及校时方法 |
CN110232041A (zh) * | 2019-05-17 | 2019-09-13 | 无锡泰泓信息科技有限公司 | 一种基于申威芯片的国产服务器主板的实现方法 |
CN111614165A (zh) * | 2020-06-04 | 2020-09-01 | 积成电子股份有限公司 | 一种配电自动化终端守时方法及系统 |
CN112910833A (zh) * | 2020-09-29 | 2021-06-04 | 重庆赛格盾科技有限公司 | 一种基于lora物联网网关的检测系统 |
CN112462847A (zh) * | 2020-10-29 | 2021-03-09 | 南京因泰莱电器股份有限公司 | 提高配电自动化设备断电守时精度的方法 |
Non-Patent Citations (1)
Title |
---|
张佳慧: "基于Smart-OSEK OS的综合电子系统设计", 中国优秀硕士学位论文全文数据库 工程科技II辑 * |
Also Published As
Publication number | Publication date |
---|---|
CN114063705B (zh) | 2023-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107092568B (zh) | 在低功耗系统中处理数据的数据通信接口 | |
US8156366B2 (en) | Method and apparatus for timing and event processing in wireless systems | |
US5021950A (en) | Multiprocessor system with standby function | |
WO2002069146A3 (en) | Data processing system having an on-chip background debug system and method therefor | |
US7639764B2 (en) | Method and apparatus for synchronizing data between different clock domains in a memory controller | |
CN101089838A (zh) | 一种实现i2c读写时序的方法 | |
CN101923369A (zh) | 基板管理控制器时间管理系统及方法 | |
CN105589085A (zh) | 一种低功耗的北斗定位通讯装置及控制方法 | |
JPS6083166A (ja) | 半導体集積回路装置 | |
CN114063705A (zh) | 一种实时时钟芯片的读写系统及方法 | |
CN113625306A (zh) | 一种高精度多模多频北斗导航SoC芯片 | |
CN115016352A (zh) | 一种mcu的指令读取结构和读取方法 | |
CN105373423A (zh) | 解决处理器的中断口不足的装置、方法及系统 | |
CN111813181B (zh) | Rtc数字电路断电保护方法、rtc数字电路及其芯片 | |
CN2938208Y (zh) | 电源顺序控制装置 | |
US20220269642A1 (en) | Method and apparatus for eliminating glitch, and state machine | |
US20090282176A1 (en) | Computer system and method for processing data signal of memory interface thereof | |
US6463551B1 (en) | Debug circuit and microcomputer incorporating debug circuit | |
CN111552617A (zh) | NAND Flash的温度获取方法、装置、计算机设备及存储介质 | |
CN210780828U (zh) | 一种服务器系统时间校准装置及服务器 | |
WO2010022187A1 (en) | Method for synchronization of peripherals with a central processing unit in an embedded system | |
Feng et al. | A SoC architecture compatible with Cortex-M4 | |
US20140281759A1 (en) | Bus protocol checker, system on chip including the same, bus protocol checking method | |
CN117111682A (zh) | 一种在中标麒麟系统下使用时统板实现时间同步的方法 | |
JPS60211561A (ja) | マイクロコンピユ−タ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |