正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563

要学习在正电原子STM32MP157开发板上开发PCF8563外部RTC芯片驱动,首先了解PCF8563的基本特性和结构。
PCF8563是一款CMOSRTC芯片,具有时间、日历功能、可编程时钟输出、中断输出和低电压检测能力。
它采用两线IIC接口进行数据传输,支持最大传输速率400Kbit/S。
读写寄存器时,地址会自动增加。
其主要功能包括时钟输出、中断输出、低电压检测等。
PCF8563的特点和结构如下:PCF8563内部有16个寄存器,均为8位。
前两个寄存器作为控制/状态寄存器,寄存器0x02-0x08存储时间和日期信息,0x09-0x0C是闹钟寄存器,0x0D是时钟输出频率寄存器,0x0E和0x0F是时钟控制寄存器。
BCD格式用于存储时间和日期信息。
接下来我们详细讨论PCF8563的寄存器结构和用途。
控制状态寄存器1和2用于控制工作模式、停止状态和RTC中断功能,而时间和日期寄存器分别对应秒、分、时、日、周、月和年。
闹钟寄存器用于设置闹钟信息,时钟输出频率寄存器用于调整RTC输出频率,时钟控制寄存器用于控制RTC时钟输出。
另外,PCF8563支持中断功能,中断引脚连接外部硬件。
Linux系统集成了PCF8563驱动,因此在开发板上使用时,只需在设备树中添加相应的配置信息,如IIC接口引脚配置、中断引脚定义等。
内核中的驱动程序使部署过程变得非常简单您只需通过修改设备树并在内核中启用PCF8563驱动程序来添加PCF8563节点信息即可。
硬件原理图显示PCF8563通过IIC接口与STM32MP157连接,中断引脚连接PI3进行中断处理。
实验中,首先在设备树中配置IIC引脚和中断引脚信息,然后根据Linux内核提供的文档使用内置的PCF8563驱动程序。
配置完内核和设备树后,重新编译并启动开发板,验证驱动功能。
测试结果表明,系统能够识别PCF8563并提供时间信息,即使开发板关闭后,纽扣电池也能继续为RTC供电,保证时间的连续性。
分析驱动源码可知,其核心功能是初始化PCF8563,并利用RTC驱动框架来读写时间和闹钟。
总之,通过与Linux内核集成的驱动程序设备树配置,可以非常方便地使用PCF8563RTC芯片。
对于IIC接口RTC芯片驱动的开发,基本思路是类似的,可以根据实际项目需求选择合适的芯片。

正点原子嵌入式linux驱动开发——字符设备驱动开发

在获得有关移植Ubuntu和Linux系统的基本知识后,正电原子教程探索了Linux驱动程序开发,首先关注字符设备驱动程序。
字符设备驱动是驱动开发的主要内容,涵盖了从简单的灯光到I2C、SPI、音频等复杂设备。
字符设备驱动程序由于其广泛性而占用大量空间。
相比之下,块设备(例如EMMC、NAND和其他存储设备)通常由制造商提供。
网络设备驱动包括有线和无线网络,这两种网络都比较复杂,但可以直接使用。
本教程基于Linux内核5.4.31,使用设备树技术。
我们从基本的字符设备驱动程序开发开始,然后转向虚拟设备实例化的理论和实践。
课程重点了解Linux内核中应用程序与驱动程序交互的原理,包括open、close、read、write等系统调用,以及如何通过file_Operations结构体实现驱动程序操作。
字符设备驱动开发包括初始化外设寄存器、加载和卸载驱动模块、注册和注销字符设备。
驱动程序模块可以编译为内核模块或动态加载。
加载模块时需要module_init和module_exit函数,而insmod和modprobe命令在加载模块中起着重要作用。
字符设备驱动程序必须实现文件操作的核心功能,例如打开、释放、读取和写入,以及一些辅助功能,例如轮询和ioctls。
这些功能允许应用程序通过设备文件系统与驱动程序交互。
例如,在我们的实验中,chrdevbase单元包括编写测试APP、使用C库函数进行数据读写操作以及通过Makefile编译驱动程序。
驱动编译和测试通常在Linux内核环境中进行,包括配置Makefile、加载驱动、创建设备节点以及使用APP进行读写测试。
最后总结了开发字符设备驱动的基本步骤和环境配置要点,为后续其他类型驱动的研究提供了基础。