PCF8563是PHILIPS 公司推出的一款工业级内含I2C 总线接口功能的具有极低功耗的多功能时钟/日历芯片。在使用芯片时出现一个现象:读取的时间偶发性的出错;针对这个问题,做了一系列的猜测,最终定位问题根因。
问题现象:偶发性(概率较高)发现读取的日期不对,星期REG值的范围是0~6,出现了此范围以外的数值,其它REG值也有错误。
问题硬件环境:GD32F450,使用I2C2,时钟400KHz 。
问题软件环境:FreeRTOS 多任务。
问题根因:在芯片手册中有如下描述,见下图:
所以揣测是由于FreeRTos多任务调度,其它任务耗时较长,导致整个读取周期时间大于1s(未使用示波器抓图确认),所以在读写寄存器的代码中,先关闭中断,待读写结束后,再开启中断,修改后此现象不再出现,修改方式见下图: