正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563
学习正点原子STMMP开发板上的外置RTC芯片PCF驱动开发,首先了解PCF基本特性与结构。PCF是一个CMOS RTC芯片,具备时间、日历功能与可编程时钟输出、中断输出及低电压检测能力。3d相册源码它以两线式IIC接口进行数据传输,支持最大Kbit/S的传输速率,在读写寄存器时,地址会自动递增。其主要功能包括时钟输出、中断输出、低电压检测等。PCF的特性与结构如下:
PCF拥有个内部寄存器,全部为8位。前两个寄存器作为控制/状态寄存器,0x-0x寄存器保存时间与日期信息,0x-0x0C为闹钟寄存器,而0x0D为时钟输出频率寄存器,0x0E和0x0F为时钟控制寄存器。BCD格式用于存储时间与日期信息。
接下来,详细探讨PCF的寄存器结构与用途。控制状态寄存器1与2用于控制RTC的运行模式、停止状态与中断功能,准爱挂源码而时间与日期寄存器则分别对应秒、分、时、日、星期、月与年。闹钟寄存器用于设定闹钟信息,时钟输出频率寄存器调整RTC的输出频率,时钟控制寄存器用于控制RTC的时钟输出。
此外,PCF支持中断功能,中断引脚与外部硬件相连接。Linux系统集成PCF驱动,因此在开发板上使用时,只需要在设备树中添加相应的配置信息,如IIC接口的引脚配置与中断引脚的定义。内核内部的驱动使得使用过程非常简单,只需通过修改设备树添加PCF节点信息,并使能内核中的PCF驱动即可。
硬件原理图显示PCF通过IIC接口连接到STMMP上,中断引脚连接到PI3,用于中断处理。在实验中,首先在设备树中配置IIC引脚与中断引脚信息,拓客游戏源码然后按照Linux内核提供的文档说明使用自带的PCF驱动。配置内核与设备树后,重新编译,启动开发板验证驱动功能。
测试结果显示系统可以识别PCF并提供时间信息,即使在开发板掉电后,纽扣电池仍能继续为RTC供电,确保时间的连续性。驱动源码分析揭示了核心功能在于初始化PCF并使用RTC驱动框架进行时间与闹钟的读写操作。
总结,通过设备树配置与Linux内核集成的驱动,使用PCFRTC芯片非常简便。对于IIC接口的RTC芯片驱动开发,基本思路相似,可根据实际项目需求选择合适的芯片。
磁力计LIS2MDL开发(1)----轮询获取磁力计数据
本文将阐述如何利用 LIS2MDL 传感器获取数据,包括初始化传感器、验证设备ID、配置数据输出率与滤波器,以及通过轮询方式持续获取磁力与温度数据。该传感器常用于电子设备,提供精确磁场强度数据,适用于指南针应用、位置追踪或动作检测。引流爆文源码 LIS2MDL 传感器的通信模式为 SPI 或 IIC。最小系统图显示了在 CS 管脚为 1 时,进入 IIC 模式。具体板子的原理图未在此处展示。 LIS2MDL 支持普通、快速、快速+与高速模式的速度,分别为 k、k、1M 及 3.4M。 提供了一个视频教程,具体链接为:<a href="/video/BV1p... 如果您需要样品,可加入群 申请,并通过链接 进行申请。 源码下载链接为: <a href="/STMicroelect...。 初始化时,使能 CS 为高电平,配置为 IIC 模式。 获取设备 ID,通过访问 WHO_AM_I (4Fh) 注册获取固定值,验证是否为 0x。 包含获取 ID 的驱动程序。 复位操作,通过向 CFG_REG_A (h) 的万喜堂源码 SOFT_RST 寄存器写入 1 进行复位。 包含复位驱动程序。 数据更新模式(BDU = '0')下,输出寄存器内容持续更新,可能导致读取数据不准确。而块数据更新(BDU = '1')模式下,读取 MSB 和 LSB 时,寄存器内容稳定,避免数据拼凑。 开启 BDU 功能,通过向 CTRL3 (h) 的 BDU 寄存器写入 1 实现。 配置速率,通过 CFG_REG_A (h) 的 ODR 设置。 启用偏移消除,使用 CFG_REG_B 的 OFF_CANC。 开启温度补偿,通过 CFG_REG_A (h) 的 COMP_TEMP_EN。 设置工作模式为连续模式,通过 CFG_REG_A (h) 的 MD1 和 MD0。 轮询数据是否准备好,查看 STATUS_REG (h) 的 Zyxda 位。 获取数据,从 OUTX_L_REG(h) 到 OUTZ_H_REG(6Dh)。 主程序演示。Linux驱动开发 - Linux 设备树学习 - DTS语法
设备树(Device Tree)是一种描述硬件设备的树形结构文件,主要用于Linux系统中描述板级设备信息,如CPU数量、内存基地址、IIC接口和SPI接口所连接的设备等。设备树的主干是系统总线,IIC控制器、GPIO控制器、SPI控制器等设备是系统总线上的分支。例如,IIC控制器分为IIC1和IIC2,其中IIC1连接了FT和ATC这两个IIC设备,IIC2仅连接了MPU一个设备。
在开发Linux设备驱动时,需要了解DTS(Device Tree Source)、DTB(Device Tree Binary)和DTC(Device Tree Compiler)之间的关系。DTC工具依赖于特定的源代码文件,最终生成主机文件DTC。要编译DTS文件,只需在Linux源码根目录下执行命令“make all”或“make dtbs”,后者仅编译设备树。
在开发板中,每个板子都对应一个DTS文件,以I.MX6ULL芯片为例,打开arch/arm/boot/dts/Makefile文件,可以找到特定编译配置。当选中I.MX6ULL芯片后,与该芯片相关的DTS文件会被编译成DTB文件。若要为新的板子编写DTS文件,只需新建此板子对应的DTS文件,并在dtb-$(CONFIG_SOC_IMX6ULL)下添加对应的DTB文件名,这样在编译设备树时会自动编译为二进制文件。
在Linux内核源码分析学习方面,可参考指定地址。此外,Linux内核源码分析交流群提供学习资源,包括书籍、视频等,通过加入该群可以获取这些资源。
在编写设备树文件时,需要了解DTS语法。DTS文件支持头文件,扩展名为.dtsi。设备树节点通过属性信息描述,属性是键值对形式。例如,在imx6ull.dtsi文件中,描述了CPU架构、频率、外设寄存器地址范围等信息。设备节点是树形结构中描述设备的节点,通过节点名字和地址来描述。
兼容性属性(compatible)是设备树中非常重要的属性,用于将设备与驱动绑定。属性值是一个字符串列表,格式为“厂商名称, 设备名称”。Linux下的外设驱动通常会使用这些兼容性属性来查找与设备匹配的驱动程序。
模型属性(model)描述设备模块信息,如设备名字。状态属性(status)记录设备状态,可选状态包括正在运行、已停止、错误等。地址属性(address-cells和size-cells)用于描述设备子节点的地址信息,reg属性用于描述设备地址空间资源信息。ranges属性用于描述设备子地址和父地址的映射关系。
在产品开发过程中,设备树文件需要随着硬件需求的变更而更新。例如,需要在I.MX6U-ALPHA开发板的I2C1接口上添加一个新设备时,需要在对应的DTS文件中向已有节点添加新子节点。
在Linux内核启动时,设备树信息会被解析并在根文件系统中以目录/proc/devicetree的形式体现。通过该目录可以查看根节点的属性和子节点,如模型、兼容性、地址等信息。这些信息与设备树文件中的描述相匹配。
演示案例 | 使用昉·星光 2的IIC读取SHTC3数据
使用昉·星光 2的IIC总线,通过Python读取SHTC3数据的步骤详解如下: 本应用说明旨在指导用户使用昉·星光 2进行IIC读取SHTC3数据的操作。通过Python编程,实现与感测设备的数据交互。以下是具体步骤:产品简介
本应用说明将展示如何利用昉·星光 2的IIC总线,运行示例程序来读取SHTC3数据。-Pin GPIO Header定义
了解-Pin GPIO header的位置是进行硬件连接的前提。请参考下图进行位置确认。准备
在执行演示代码前,确保设备齐全。准备所需的硬件设备,确保环境满足运行需求。运行环境要求
按照运行环境要求进行配置,确保软件环境兼容。硬件准备
正确连接硬件,确保感测设备与昉·星光 2系统成功对接。软件准备
确认软件环境满足应用需求,确保Python应用VisionFive.gpio正确安装。安装包
使用pip命令安装VisionFive.gpio包,或通过以下命令自行操作。源代码准备
确保源代码文件已下载至昉·星光 2 Debian系统中,方便后续执行。执行演示代码
按照以下步骤操作,实现昉·星光 2系统上执行演示代码:获取目录
通过命令获取VisionFive.gpio所在目录,确保后续操作的准确性。进入目录
根据上一步输出结果,进入指定目录,确保代码执行环境正确。运行代码
在样本代码目录下执行演示代码,或通过命令执行,获取温湿度数据输出。演示源代码
示例代码提供参考,通过I2C_Sense_Hat.py文件实现与SHTC3的数据读取。2024-12-22 21:38
2024-12-22 21:19
2024-12-22 20:55
2024-12-22 20:37
2024-12-22 19:44