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

成功!

相关推荐
Doraemomo几秒前
Linux编程-并发TCP服务器实现与IO多路复用
linux·服务器·tcp/ip
也曾看到过繁星10 分钟前
Linux---vim 编辑器
linux·编辑器·vim
是小李呀15 分钟前
Linux 服务器从零部署 kkFileView 完全指南(Docker 方案)
linux
国科安芯18 分钟前
小卫星综合电子系统中RISC-V抗辐射MCU的功能安全与多接口集成架构分析
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
OpenCloudOS19 分钟前
高危|Linux 内核 XFS reflink 本地提权漏洞修复指南
linux·网络·安全
小HANN36 分钟前
保姆级实战:CentOS7 搭建 LAMP 环境部署 WordPress 个人博客
linux·运维·服务器·经验分享
奈斯先生Vector1 小时前
从“能调用”到“可替换”:Coze 多模型 API 编排层设计指南
linux·运维·人工智能·ubuntu·平面·ios
AAA代码批发商1 小时前
Days 32 Linux 多线程:线程分离属性、多进程 vs 多线程、线程同步互斥锁、信号量
linux·笔记
李少兄1 小时前
Linux 服务器从零部署 kkFileView 完全指南(Docker 方案)
linux·服务器·docker
小张同学a.1 小时前
OpenStack 私有云实战 3—— Neutron 网络服务与 Dashboard 控制台部署
linux·运维·服务器·openstack