正点原子IMX6UL IIC RTC驱动DS3231

news/2024/9/22 22:26:32/

1 前言

觉得Imx6内部的RTC时钟不是很准,于是外置RTC芯片ds3231

在源码里一查, 发现在driver/rtc/rtc-ds1307.c中

 

 2 修改设备树

ds3231地址可以查询数据表: 0xd0 , 但是linux 设备树要右移一位, 于是就成了0x68

也可以通过i2ctest来检测地址

&i2c1 {clock-frequency = <100000>;pinctrl-names = "default";pinctrl-0 = <&pinctrl_i2c1>;status = "okay";/* EEPROM */at24c512c@50 {compatible = "at24c512c";reg = <0x50>;status = "ok";};/* 时钟芯片 */ds3231mz@68 {compatible = "dallas,ds3232";reg = <0x68>;status = "ok";};

 2 修改内核支持

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
#配置defconfig文件
make imx_v7_defconfig -j 16
make menuconfig

#编译内核模块
make modules -j 16

 3 应用测试


#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/rtc.h>
#include <sys/ioctl.h>int main(int argc, char** argv)
{int fds1302, ret;struct rtc_time rtc_tm;int fd, retvalue;char *filename;if(argc != 2){printf("Error Usage!\r\n");return -1;}filename = argv[1];/* 打开led驱动 */fds1302 = open(filename, O_RDWR);if(fd < 0){printf("file %s open failed!\r\n", argv[1]);return -1;}ret = ioctl(fds1302, RTC_RD_TIME, &rtc_tm);printf("ret:%d\r\n",ret);if(ret == 0){printf("Time: %04d-%02d-%02d %02d:%02d:%02d\n", rtc_tm.tm_year+1900, rtc_tm.tm_mon+1,rtc_tm.tm_mday, rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);}else{memset(&rtc_tm, 0, sizeof(struct rtc_time));rtc_tm.tm_year = 2013 - 1900;rtc_tm.tm_mon = 5 - 1;rtc_tm.tm_mday = 10;rtc_tm.tm_hour = 14;rtc_tm.tm_min = 18;rtc_tm.tm_sec = 59;	ret = ioctl(fds1302, RTC_SET_TIME, &rtc_tm);}return 0;
}

第一次打开会写入时间, 之后打开就是读取时间 

把纽扣电池上了之后, 断电也能读取时间

 

读取时间:

 hwclock -f /dev/rtc1

同步系统时间到RTC

hwclock -f /dev/rtc1 -w

 hwclock -s 将硬件时间同步到系统时间
hwclock -w 将系统时间同步到硬件时间


http://www.ppmy.cn/news/735255.html

相关文章

《ESP32-Arduino开发》GUI设计 LVGL 开发环境搭建教程(从工程目录到模拟器)

前言&#xff1a;最近闲着无聊&#xff0c;看到手头正好有一块tft彩屏&#xff0c;想着拿来玩玩。既然用到了显示屏&#xff0c;自然是离不开ui设计&#xff0c;lvgl是嵌入式一个开源图形库&#xff0c;具备“Light”(轻量)和"Versatile"(可用性强)等特点。对于我而言…

安装单片机开发工具Keil5和仿真开发板proteus

项目场景&#xff1a; 安装单片机开发工具Keil5和仿真开发板proteus 为啥不买开发板? 这里不使用开发板的原因是单独买个开发板其实还行&#xff0c;但是很多外设&#xff0c;而且加上本来自己是自学的&#xff0c;啥也不懂&#xff0c;坏的几率很大。 网上说买开发板实际开…

LeViT: aVision Transformer in ConvNet‘s Clothing for Fast in

摘要 我们设计了一系列图像分类架构&#xff0c;可以在高速模式下优化精度和效率之间的平衡。我们的工作利用了基于注意力的体系结构的最新发现&#xff0c;这种体系结构在高度并行处理硬件上具有竞争力。我们重温了大量文献中关于卷积神经网络的原理&#xff0c;并将其用于tr…

Docker发布JAVA vhr微人事后端(确保打包没问题再发布)

本文代码来源于&#xff08;感谢作者&#xff09; GitHub - lenve/vhr: 微人事是一个前后端分离的人力资源管理系统&#xff0c;项目采用SpringBootVue开发。1.创建DockerFile文件 创建mail文件夹 创建web文件夹 以下为mail dockerfile FROM java:8 Add *.jar /app/app.ja…

Node框架 【Egg-企业级框架】之 【内置对象】

文章目录 &#x1f31f;前言&#x1f31f; 框架内置对象&#x1f31f;Koa 继承对象&#x1f31f;Koa Application&#x1f31f;事件&#x1f31f;获取全局应用对象的方式&#x1f31f;全局应用对象的属性 &#x1f31f;Context&#x1f31f;获取Context的方式 &#x1f31f;Req…

wps如何设置分段页眉

比如有1、2、3、4页&#xff0c;想从第3页开始有页眉&#xff0c;把光标放在第2页最后面&#xff0c;选择【页面布局】→【分隔符】→【下一页分节符】&#xff0c;不要动&#xff0c;接着鼠标操作&#xff0c;选择【插入】→【页眉页脚】→【同前节】即可。鼠标一直点&#xf…

WPS设置大纲级别

第一种方法 1. 点击视图 点击工具栏中的视图 2. 点击大纲 点击工具栏中的大纲 3. 设置级别 选中设置的文字工具栏中进行设置 4. 格式刷 之后我们可以设定标题的基本样式然后用格式刷来完成 第二种方法 1. 选中文字&#xff0c;右击&#xff0c;段落 2. 选择大纲级别…