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;
}

成功!

相关推荐
zhougl99616 分钟前
html处理Base文件流
linux·前端·html
泥土编程1 小时前
kubekey -实现懒人一键部署K8S集群
linux·运维
wirepuller_king4 小时前
创建Linux虚拟环境并远程连接,finalshell自定义壁纸
linux·运维·服务器
在野靡生.5 小时前
Ansible(1)—— Ansible 概述
linux·运维·ansible
风123456789~5 小时前
【Linux运维】查询指定日期的上月
linux·运维·服务器
我没想到原来他们都是一堆坏人6 小时前
利用vmware快速安装一个可以使用的centos7系统
linux·虚拟机
x-cmd6 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
weitinting6 小时前
Ali linux 通过yum安装redis
linux·redis
不可思议迷宫6 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
myloveasuka6 小时前
[Linux]从硬件到软件理解操作系统
linux·开发语言·c++