1.简述
本文档主要描述 N32G45x 系列、N32G4FR 系列、N32WB452 系列、N32G43x 系列、N32L40x 系列、N32L43x 系列 MCU 的 RT_Thread 设备注册和应用例程,让使用者快速熟悉 RT_Thread 设备驱动。
2.设备注册
2.1 I/O 设备
2.1.1 I/O 设备介绍
RT-Thread 提供了一套简单的 I/O 设备模型框架,如图 2-1 所示,它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。
应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层I/O 硬件设备进行数据(或控制)交互。
I/O 设备管理层实现了对设备驱动程序的封装。应用程序通过 I/O 设备层提供的标准接口访问底层设备,设备驱动程序的升级、更替不会对上层应用产生影响。这种方式使得设备的硬件操作相关的代码能够独立于应用程序而存在,双方只需关注各自的功能实现,从而降低了代码的耦合性、复杂性,提高了系统的可靠性。
设备驱动框架层是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。
设备驱动层是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。它负责创建和注册 I/O 设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中,使用序列图如下图所示,主要有以下 2 点:
⊹ 设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过 rt_device_register() 接口注册到 I/O 设备管理器中。
⊹ 应用程序通过 rt_device_find() 接口查找到设备,然后使用 I/O 设备管理接口来访问硬件。
图 2-2 I/O 设备模型框架
2.1.2 创建和注册 I/O 设备
驱动层负责创建设备实例,并注册到 I/O 设备管理器中,可以通过静态申明的方式创建设备实例,也可以用下面的接口进行动态创建:
2.1.3 访问 I/O 设备
应用程序通过 I/O 设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。I/O 设备管理接口与 I/O 设备的操作方法的映射关系如图 2-3 所示:
2.1.4 查找设备
应用程序根据设备名称获取设备句柄,进而可以操作设备。查找设备函数如下所示:
2.1.5 初始化设备
获得设备句柄后,应用程序可使用如下函数对设备进行初始化操作:
2.1.6 打开和关闭设备
通过设备句柄,应用程序可以打开和关闭设备,打开设备时,会检测设备是否已经初始化,没有初始化则会默认调用初始化接口初始化设备。通过如下函数打开设备:
通过如下函数关闭设备:
2.1.7 控制设备
通过命令控制字,应用程序也可以对设备进行控制,通过如下函数完成:
2.1.8 读写设备
应用程序从设备中读取数据可以通过如下函数完成:
向设备中写入数据,可以通过如下函数完成:
2.1.9 数据收发回调
当硬件设备收到数据时,可以通过如下函数回调另一个函数来设置数据接收指示,通知上层应用线程有数据到达: