在imx 6q的4.1.15版本linux系统上适配hym8563这款rtc芯片,配置上驱动后产生了如上面的问题,设置时间没有问题,设置年份会比减六年存储。但是如果设置的是15年及以下就不会有这个问题。

这是时间的读取程序,使用了bcd2bin函数,将存入的bcd格式数据转成bin格式。
关于bcd格式和bin的区别:
Bcd格式有的也叫8421格式,或者叫8421bcd,学过数电肯定有印象。
Bin格式就是直接转成二进制数。
例如一个十进制15,转成二进制是1111
转成bcd格式是,0001 0101
再看一下时间写入的函数:

这里是用了bin2bcd函数,将bin数据转成bcd格式。
比如要存入一个15,程序读进来是1111,用bin2bcd转成0001 0101存入buf数组。
为什么要用,bcd码来存储?用1111这种方式不是很直观,16直接进位变成10000

这个和芯片的计算有关
Rtc芯片内部有七个与时间、日期有关的寄存器(寄存器中的数据格式为BCD码),以及一个写保护寄存器,我们要做的就是将初始设置的时间、日期数据写入这几个寄存器,然后再不断地读取这几个寄存器来获取实时时间和日期。

秒钟寄存器的BIT7定义为时钟暂停标志(CH)。当初始上电时该位置为1,时钟振荡器停止,时钟的计时保持最后一次的状态,DS1302处于低功耗状态;只有将秒寄存器的CH位清0,时钟才能开始运行,时间从最后一次状态中继续计时。低四位(BIT0,BIT1,BIT2,BIT3)记录秒钟的个位,高四位除BIT7外记录秒钟的十位。

分钟寄存器低四位记录个位,高四位除BIT7外记录分钟的十位。

时钟寄存器的BIT7设置DS1302是运行于12小时模式还是24小时模式。BIT7高电平时为12小时模式,低电平时为24小时模式。当选择12小时模式时,BIT5位是AM/PM标志(BIT5高电平时为PM,BIT5低电平时为AM);当选择24小时模式时,BIT5位是第二个十位(2023小时)。低四位记录时钟的个位,BIT4记录第一个十位(12小时模式:1011;24小时模式:10~19)。

日寄存器低四位记录个位,高四位(实际上仅有BIT4和BIT5)记录十位。

月寄存器低四位记录个位,高四位(实际上仅有BIT4)记录十位。

周寄存器仅有低四位中的BIT0,BIT1和BIT2记录个位。

年寄存器低四位记录个位,高四位记录十位。

然后找到年份的写入:

可以看到源码中对于年份写入没有用bin2bcd函数。

所以源码中直接用了年份后两位的15的bin码进行了写入。也就是1111。所以现在年寄存器中的值是00001111
读取的时候将这个码值通过bcd转bin,转成了0 f,就是0 15。
所以读出的时间和设置的时间一样,这个思路同样适用于15以下的数字。
当我们设置的值是16时,bin值是10000,直接写入寄存器,寄存器的值是00010000
当读取的时候,把bin转成bcd,就成了10。所以16年变成了10年。这个同样也适用于16年以后。

RTC保存年份不正确的问题排查及解决相关推荐

  1. php 阴历年份,阳历转农历时的数字年份不正确

    公历转农历时的数字年份不正确 在下面的代码中 $lunarCalendar = getLunarCalendar(2015,1,12); echo $lunarCalendar['year'];//这 ...

  2. EasyCVR接入RTSP视频流,显示在线但是视频无法播放的原因排查与解决步骤

    EasyCVR视频融合云服务平台具备丰富灵活的视频能力,具体表现在可支持多协议.多类型的设备接入,如国标GB28181协议.RTMP/RTSP/Onvif协议.海康EHOME.海康SDK.大华SDK等 ...

  3. 由Linux内核bug引起SSH登录缓慢问题的排查与解决

    快杰云主机是UCloud推出的具备优秀性能与极高性价比的新一代主机,网络最高可达 1000 万 PPS,存储最高可达 120 万 IOPS.为了提升产品综合表现,Host内核.KVM和Guest内核等 ...

  4. java 获取年 两位,java使用jxl读取日期年份只显示前两位的解决方法

    上传的excel日期为"1988/9/1",java使用jxl包读取结果为"19-9-1",年份缺少了前面的两位. 解决方法是使用DateCell. 如下面的代 ...

  5. VTP冲突的排查与解决

    *案例名称: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...

  6. 瑕疵全记录,数据库毛刺问题的排查与解决

    日常数据库运维管理工作中,监控数据中往往会出现一些不正常的信号,如突然增高的 I/O 流量.短期内增大的时延等,这些信号称为"毛刺".它们的出现可能会造成在线业务出现部分请求超时, ...

  7. vscode win10笔记本 蓝屏_教你win10电脑蓝屏原因排查及解决方法大全

    相信每个人用过电脑的人都遇到过windows10蓝屏的时候,对于很多小白来说,只能按电源键重起,祈祷电脑能自己修复,不过今天,看过这篇后,希望大家对windows10蓝屏自主排查及解决有帮助,让我们开 ...

  8. CPU占用过高问题的排查及解决

    CPU占用过高问题的排查及解决 排查步骤 1.使用top 定位到占用CPU高的进程PID      然后按shift+p按照CPU排序 2.查看Java进程里面的线程的占用情况 或者是再用ps -mp ...

  9. 苹果cms采集后无法播放原因排查及解决教程

    声明:除特殊声明外本站文档均由作者原创,转载请注明出处,原文地址:苹果cms采集后无法播放原因排查及解决教程 苹果cmsv10采集后无法播放黑屏原因排查,首先确定是否导入播放器,采集资源后如果没有添加 ...

最新文章

  1. 使用git进行源代码管理
  2. 商务智能 “软肋”何在?
  3. ldap 高级查询 禁用_化妆水有治疗耳部疾患、痔疮等11大功效?专家表示或含禁用物质...
  4. 一步一步学Vue(四)
  5. jdk8新特性(接口新特性、lambda表达式、方法引用、函数式接口、Stream流)和单例设计模式
  6. 案例分析|能源行业大数据案例分析
  7. E+H流量计5P3B15-BBDBAAAFADEA1S1AA1+AK
  8. 修改echarts饼状图位置
  9. 中国水墨动画系列 内容简介
  10. Excel里怎么冻结某一行某一列
  11. 光波叠加matlab,光波的叠加教程.ppt
  12. pyth命令_如何:在Windows上设置用于从命令行运行.py文件的Python可执行文件
  13. 小程序商城制作一个需要多少钱?
  14. Java代码简洁-validation参数校验
  15. 计算机上的游戏怎么不见了怎么办,电脑自带小游戏消失怎么找回?高手教你找回电脑自带小游戏...
  16. 【微信小程序】小程序实现轮播图效果--swiper组件(一步步教你如何实现)
  17. 基于SSM的停车场管理系统
  18. 记录一次有关Windows的蓝屏及修复事件-WHEA_INTERNAL_ERROR-DELL戴尔G3
  19. 台式计算机逗号怎么打,电脑逗号怎么打(逗号怎么打在上面)
  20. 使用MobaXterm的ssh登录阿里云服务器总是acess deind

热门文章

  1. Terraria及tModloader开服教程
  2. 开放世界游戏中的大地图的实现——内容制作篇/异次元篇
  3. 侯延堂-FlashGet
  4. svn: E155017: 工作副本的参考文件损坏【解决方案】
  5. 银联快捷支付退款 Pay
  6. 使用hibernate通过修改实体类文件更新数据库失效解决办法
  7. 2020.10.2--PS--铅笔工具、历史记录画笔、修复画笔工具
  8. scikit-learn:逻辑回归
  9. SQL效率轻优化【白丁水笔知其然】
  10. 【taro】taro编译h5报React Refresh runtime should not be included in the production bundle