fmql之Linux RTC

模拟i2c,连接rtc芯片。

dts:

cpp 复制代码
/{ // 根节点
    i2c_gpio: i2c-gpio {
		#address-cells = <1>;
		#size-cells = <0>;

		compatible = "i2c-gpio";
		// MIO56-SDA, MIO55-SCL        // 引脚编号
		gpios = <&portc 2 0
			 &portc 1 0 >;
		i2c-gpio,delay-us = <5>; // 100k Hz
			
		rtc@68 {
			compatible = "maxim,ds3231"; // rtc型号
			reg = <0x68>;	//ID
			status = "okay";
		};
	};
};  // 根节点end

APP代码:

介绍Linux下时间处理的相关操作(RTC、延时、闹钟、转换)-腾讯云开发者社区-腾讯云

linux rtc set time_mb60179b8f89f61的技术博客_51CTO博客

cpp 复制代码
/***************************************************************
 Copyright © ALIENTEK Co., Ltd. 1998-2029. All rights reserved.
 文件名                 : rtcAPP.c
 作者                   : Skylar
 版本                   : V1.0
 描述                   : rtc测试
 其他                   : /dev/rtc0
 使用方法                : 
 论坛                   : www.openedv.com
 日志                   : 初版V1.0 2024/10/24 创建
 ***************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/rtc.h>
#include <string.h>

#define RTC_DEV     "/dev/rtc0"

struct rtc_time time;

int main(int argc,char **argv)
{
/*
    if(argc!=2)
    {
        printf("./app /dev/rtcX\n");
        return 0;
    }
*/
    //1.打开设备文件
    int fd=open(RTC_DEV,O_RDWR);
    if(fd < 0)
    {
        printf("%s 设备文件打开失败.\n",RTC_DEV);
        return 0;
    }
    
    //2.获取RTC驱动的时间
    ioctl(fd,RTC_RD_TIME,&time);
    printf("应用层读取的时间: %d-%d-%d %d:%d:%d\n",
            time.tm_year+1900,
            time.tm_mon+1,
            time.tm_mday,
            time.tm_hour,
            time.tm_min,
            time.tm_sec);
    
    //3.设置RTC驱动的时间
    time.tm_year=2024-1900;        //2024年
    time.tm_mon=10-1;              //10月
    time.tm_mday=24;               //24日
    time.tm_hour=14;               //14点
    time.tm_min=17;                //17分
    time.tm_sec=20;                //20秒
    ioctl(fd,RTC_SET_TIME,&time);

/*
    sleep(1);
    // 再次读取
    ioctl(fd,RTC_RD_TIME,&time);
    printf("应用层读取的时间: %d-%d-%d %d:%d:%d\n",
            time.tm_year+1900,
            time.tm_mon+1,
            time.tm_mday,
            time.tm_hour,
            time.tm_min,
            time.tm_sec);
*/    
    //4. 关闭驱动
    close(fd);
    return 0;
}

成功!

相关推荐
君穆南6 小时前
基于 NFS 与 Rsync 实现跨服务器 Seafile 数据平滑迁移实战
linux·运维·git
bloglin999996 小时前
scp、rsync远程文件同步
linux·运维·服务器
迦南的迦 亚索的索6 小时前
LINUX环境
linux·运维·服务器
yuanjj886 小时前
linux下调试域格CLM920 NC5等9x07平台模块 QMI拨号
linux·运维·服务器
IMPYLH7 小时前
Linux 的 printenv 命令
linux·运维·服务器·bash
SilentSamsara7 小时前
SSH 远程管理:密钥登录 + 隧道转发,一次性配置好
linux·运维·服务器·ubuntu·centos·ssh
LN花开富贵7 小时前
【ROS】鱼香ROS2学习笔记一
linux·笔记·python·学习·嵌入式·ros·agv
疏星浅月7 小时前
数据对齐的底层原理与性能优化
linux
Jurio.7 小时前
本机开发 + 多机执行的极简远端运行工具
linux·git·python·github·远程工作
阿巴~阿巴~8 小时前
Git版本控制完全指南:从入门到实战(简单版)
linux·服务器·git