rtc驱动模型及rx8025驱动学习

一、芯片简单了解

RX8025-T是一款 拥有I2C接口和温度补偿功能的新型实时时钟芯片 ,内部集成32.768KHz温度补偿晶体振荡器,可用于各种需要高精度时钟的场合。通过设置相应补偿的控制位,可以实现不同间隔的温度补偿功能,从而大大提高了时钟的精度。芯片可设置四种不同的时段进行温度补偿,默认设置是2S补偿。该芯片采用C-MOS工艺生产,具有极低的功能消耗,可长期使用电池供电。

芯片特点:

1.内置高稳定度的32.768KHz 的DTCXO (数字温度补偿晶体振荡器)

2. 支持I2C 总线的高速模式(400K)

3. 定时报警功能(可设定:天,日期,小时,分钟)

4. 固定周期定时中断功能。

5. 时间更新中断功能。

6. 32.768KHz频率输出(具有使能OE功能)

7. 闰年自动调整功能。(2000 到2099)

8. 宽范围接口电压:2.2V 到 5.5V

9. 宽范围的时间保持电压:1.8V 到 5.5V

10. 低电流功耗:0.8uA/3V (Typ.)

11. 工作温度:-45℃~85℃

操作模式:

1)实时时钟模式

该功能被用来设定和读取年,月,日,星期,时,分,秒 时间信息。年份为后两位数字表示, 任何可以被4 整除的年份被当成闰年处理。(2000 年到2099 年)

2)固定周期的中断发生功能:

固定周期定时中断发生功能可以产生一个固定周期的中断事件,固定周期可在244.14uS 到 4095 分钟之间的 任意时间设定。

3)  定时更新中断功能:

该功能可以根据内部时钟的定时设定,每秒或每分钟产生一个中断事件。 当中断事件产生,UF 标志位的值变成 1 同时/INT 引脚变成低电平表示一个中断事件的产生。

4)闹钟中断功能:

该功能可以根据报警设定来产生一个中断。

5)32.768K Hz 时钟输出:

可以通过FOUT 引脚来输出一个32.768kHz 频率的时钟信号,该功能可以通过FOE 引脚控制。

6)和CPU 的接口功能:

数据的读写都是通过I2C 总线接口的方式来完成。

二、开发板硬件相关

芯片设计原理图:

与主控芯片连接关系:

设备树中定义:

三、RTC设备驱动模型学习

驱动模型结构

与RTC核心有关的文件有:

/drivers/rtc/class.c          这个文件向linux设备模型核心 注册了一个类RTC ,然后向驱动程序提供了注册/注销接口

/drivers/rtc/rtc-dev.c       这个文件定义了基本的设备文件操作函数,如:open,read等

/drivers/rtc/interface.c     顾名思义, 这个文件主要提供了用户程序与RTC驱动的接口函数,用户程序一般通过ioctl与RTC驱动交互,这里定义了每个ioctl命令需要调用的函数

/drivers/rtc/rtc-sysfs.c     与sysfs有关

/drivers/rtc/rtc-proc.c      与proc文件系统有关

/include/linux/rtc.h         定义了与RTC有关的数据结构

        RTC驱动模型结构如下图:(可以看出对于rtc的开发就是对具体的芯片的驱动开发,与应用层交互的字符设备部分内核已经提供,只需建立起相应联系即可)

内核提供的的基本数据结构:

1. struct rtc_device 结构

这个结构是RTC驱动程序的基本数据结构,但是他不像其他核心的基本结构一样,驱动程序以他为参数调用注册函数注册到核心。这个结构是由注册函数返回给驱动程序的。

2. struct rtc_class_ops 结构

这个结构是RTC驱动程序要实现的基本操作函数,注意这里的操作不是文件操作。驱动程序通过初始化这样一个结构,将自己实现的函数与RTC核心联系起来。这里面的大部分函数都要驱动程序来实现。而且这些函数都是操作底层硬件的,属于最底层的函数。

3. struct rtc_time 结构

代表了时间与日期,从RTC设备读回的时间和日期就保存在这个结构体中

4.注册: 为底层驱动提供接口: rtc_device_register,rtc_device_unregister

四、rx8025驱动分析

     首先在probe函数做了如下的工作:

然后实现rx8025读写寄存器的函数,(这里提供了读连续地址的数据的操作函数)

接下来就是填充struct rtc_class_ops结构体的函数:(具体就是对寄存器的操作)

在rtc8025驱动中没有对于相关的字符驱动的函数,所以需要做进一步的分析:   

应用层调用关系解读:(具体的字符设备接口函数在rtc-dev.c中实现)

在probe函数中 rtc_device_register()注册rtc时,中会调用rtc_dev_prepare(rtc)函数,    r tc_dev_prepare()函数rtc-dev.c中定义这就是对具体的字符设备的初始化,从而将 struct rtc_class_ops结构体的函数与struct file_operations rtc_dev_fops结构体中的函数建立起了联系。

当用户open时会调用 rtc_class_ops 中的open,open则会调用到rtc_class_ops中定义的open,如下:

其中应用层使用核心的是ioctl函数,例如以下的指令调用:( 调用了 中的rtc_read_time和rtc_set_time函数 

阅读ioctl会发现每个指令都会调用/drivers/rtc/interface.c  中定义的函数,以RTC_RD_TIME命令的rtc_read_time()为例,继续追踪:

调用了__rtc_read_time();

如上图绿色框,最终是调用了rx8025中struct rtc_class_ops中定义实现的函数,即我们写的读时间函数。

所以 最终结论 就是:rtc驱动开发只需要去实现 struct rtc_class_ops结构体的函数即可,具体与应用层交互的字符驱动函数,linux内核在 rtc-dev.c中定义 已经提供,其会产生相应节点为rtc(x)。

原文

https://www.pianshen.com/article/39211943822/

rtc驱动模型及rx8025驱动学习相关推荐

  1. Linux驱动模型之注册驱动

    前言 驱动的话我们关心几个点: 驱动是怎么添加到总线管理的设备链表上的? 注册驱动后,它是怎么和设备匹配,并最终调用驱动中的probe()函数的? 数据结构 首先看下数据结构: struct devi ...

  2. linux 内核驱动模型,linux设备驱动模型架构分析 一

    linux设备驱动模型架构分析 一 发布时间:2018-07-04 15:14, 浏览次数:584 , 标签: linux 概述 LDD3中说:"Linux内核需要一个对系统结构的一般性描述 ...

  3. LINUX设备驱动模型分析之三 驱动(DRIVER)接口分析

    上一章我们分析了bus-driver-device模型中bus接口部分,本章我们将分析driver接口,在bus-driver-device模型中,driver接口是依附于bus上,而不像device ...

  4. linux RTC 驱动模型分析

    linux RTC 驱动模型分析 RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间.RTC因为是电池供电的,所以掉电后时间不丢失.Linux内核把RTC用作&quo ...

  5. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

    以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...

  6. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

    参考原文:https://www.kancloud.cn/yueqian_scut/emlinux/106829 对原文笔误地方做了修改.重新排版 目录 字符设备驱动.平台设备驱动.设备驱动模型.sy ...

  7. linux驱动开发 - 12_platform 平台驱动模型

    文章目录 platform 平台驱动模型 1 platform 总线 platform匹配过程 2 platform 驱动 platform 驱动框架如下所示: 3 platform 设备 platf ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  9. linux驱动 设备驱动模型

    前言 在早期的Liux内核中并没有为设备驱动提供统一的设备模型.随着内核的不断扩大及系统更加复杂,编写一个驱动程序越来越困难,所以在Liux2.6内核中添加了一个统一的设备模型.这样,写设备驱动程序就 ...

  10. Linux字符设备驱动模型

    版本 颁布日期 修订章节 0.1 2015.08.13 撰写草稿 0.2 2015.12.07 整合字符型设备驱动 0.3 2015.12.07 整理文档,尚未验证驱动源码 0.4 2016.02.2 ...

最新文章

  1. Java进阶篇(五)——Java的I/O技术
  2. 测试字符串读取类: TStringReader
  3. python处理表格数据教程_用Python的pandas框架操作Excel文件中的数据教程
  4. gg参数:dblogreader
  5. where is Angular parts filled
  6. javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败
  7. OpenCV与图像处理学习十二——图像形状特征之HOG特征
  8. java逻辑运算符_Java逻辑运算符
  9. linux安装redis插件,Linux平台安装redis及redis扩展的方法
  10. java parseint(12.0),Java中parseInt()和valueOf(),toString()的区别
  11. oracle 约束 年份,如何在Oracle中确定给定年份是否为Le年?
  12. 机器学习算法总结之朴素贝叶斯法
  13. phpcms的增删改查操作整理
  14. 21秋期末考试电子商务概论10250k2
  15. html text-decoration,如何使用text-decoration
  16. 一文详述 Python 中的 property 语法
  17. Java爬虫爬取网页数据
  18. 计算机系的对联,轻松写对联 微软亚洲研究院推出电脑对联
  19. 嵌入式编程软件基础汇总1
  20. Gitea:从SVN迁移到Git

热门文章

  1. R语言实例:根据中国省份简称绘制着色图
  2. Shapley值法介绍及实例计算
  3. 什么是敏捷项目合同管理?
  4. matlab单枝节匹配器,第八讲微带匹配电路单枝节匹配电路.ppt
  5. OBS录屏软件使用指南
  6. 如何下载衡水市卫星地图高清版大图
  7. 哔哩哔哩助手 for Mac说明书
  8. 计算机网络实验一:网线制作和局域网组建
  9. 自适应盲信号处理的经典
  10. java视频格式转_java 实现 视频格式转换(转)