注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
ID.LODA的个人空间 https://home.eeworld.com.cn/space-uid-499959.html [收藏] [复制] [分享] [RSS]
日志

RT-Thread系统设备框架简析

已有 1989 次阅读2020-4-23 12:07 |个人分类:RT-Thread系统学习

 

I/O设备

设备模型也是建立在内核对象模型基础上

设备继承关系图

目前支持的I/O 设备类型,如下:

RT_Device_Class_Char             /* 字符设备       */
RT_Device_Class_Block            /* 块设备         */
RT_Device_Class_NetIf            /* 网络接口设备    */
RT_Device_Class_MTD              /* 内存设备       */
RT_Device_Class_RTC              /* RTC 设备        */
RT_Device_Class_Sound            /* 声音设备        */
RT_Device_Class_Graphic          /* 图形设备        */
RT_Device_Class_I2CBUS           /* I2C 总线设备     */
RT_Device_Class_USBDevice        /* USB device 设备  */
RT_Device_Class_USBHost          /* USB host 设备   */
RT_Device_Class_SPIBUS           /* SPI 总线设备     */
RT_Device_Class_SPIDevice        /* SPI 设备        */
RT_Device_Class_SDIO             /* SDIO 设备       */
RT_Device_Class_Miscellaneous    /* 杂类设备        */

 

I/O设备支持设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过 rt_device_register() 接口注册到 I/O 设备管理器中。

应用程序可以通过 rt_device_find() 接口查找到设备,然后使用 I/O 设备管理接口来访问硬件。

其他的函数实现

I/O 设备管理接口与 I/O 设备的操作方法的映射关系

 

UART驱动

应用程序通过 RT-Thread提供的 I/O 设备管理接口来访问串口硬件,相关接口如下所示:

函数 描述
rt_device_find() 查找设备
rt_device_open() 打开设备
rt_device_read() 读取数据
rt_device_write() 写入数据
rt_device_control() 控制设备
rt_device_set_rx_indicate() 设置接收回调函数
rt_device_set_tx_complete() 设置发送完成回调函数
rt_device_close() 关闭设备

 

PIN 设备

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:

函数 描述
rt_pin_mode() 设置引脚模式
rt_pin_write() 设置引脚电平
rt_pin_read() 读取引脚电平
rt_pin_attach_irq() 绑定引脚中断回调函数
rt_pin_irq_enable() 使能引脚中断
rt_pin_detach_irq() 脱离引脚中断回调函数

需要注意RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。有2种方式可以获取引脚编号:使用宏定义或者查看PIN 驱动文件。

 

ADC 设备

应用程序通过 RT-Thread 提供的 ADC 设备管理接口来访问 ADC 硬件,相关接口如下所示:

函数 描述
rt_device_find() 根据 ADC 设备名称查找设备获取设备句柄
rt_adc_enable() 使能 ADC 设备
rt_adc_read() 读取 ADC 设备数据
rt_adc_disable() 关闭 ADC 设备

 

CAN 设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问 CAN 硬件控制器,相关接口如下所示:

函数 描述
rt_device_find 查找设备
rt_device_open 打开设备
rt_device_read 读取数据
rt_device_write 写入数据
rt_device_control 控制设备
rt_device_set_rx_indicate 设置接收回调函数
rt_device_close 关闭设备

 

HWTIMER设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问硬件定时器设备,相关接口如下所示:

函数 描述
rt_device_find() 查找定时器设备
rt_device_open() 以读写方式打开定时器设备
rt_device_set_rx_indicate() 设置超时回调函数
rt_device_control() 控制定时器设备,可以设置定时模式(单次/周期)/计数频率,或者停止定时器
rt_device_write() 设置定时器超时值,定时器随即启动
rt_device_read() 获取定时器当前值
rt_device_close() 关闭定时器设备

 

I2C 总线设备

一般情况下 MCU 的 I2C 器件都是作为主机和从机通讯,在 RT-Thread 中将 I2C 主机虚拟为 I2C总线设备,I2C 从机通过 I2C 设备接口和 I2C 总线通讯,相关接口如下所示:

函数 描述
rt_device_find() 根据 I2C 总线设备名称查找设备获取设备句柄
rt_i2c_transfer() 传输数据

 

PWM 设备

应用程序通过 RT-Thread 提供的 PWM 设备管理接口来访问 PWM 设备硬件,相关接口如下所示:

函数 描述
rt_device_find() 根据 PWM 设备名称查找设备获取设备句柄
rt_pwm_set() 设置 PWM 周期和脉冲宽度
rt_pwm_enable() 使能 PWM 设备
rt_pwm_disable() 关闭 PWM 设备

 

RTC 设备

应用程序通过 RTC 设备管理接口来访问 RTC 硬件,相关接口如下所示:

set_date() 设置日期,年、月、日
set_time() 设置时间,时、分、秒
time() 获取当前时间

 

SPI 设备

一般情况下 MCU 的 SPI 器件都是作为主机和从机通讯,在 RT-Thread 中将 SPI 主机虚拟为 SPI 总线设备,应用程序使用 SPI 设备管理接口来访问 SPI 从机器件,主要接口如下所示:

函数 描述
rt_device_find() 根据 SPI 设备名称查找设备获取设备句柄
rt_spi_transfer_message() 自定义传输数据
rt_spi_transfer() 传输一次数据
rt_spi_send() 发送一次数据
rt_spi_recv() 接受一次数据
rt_spi_send_then_send() 连续两次发送
rt_spi_send_then_recv() 先发送后接收

 

QSPI 的数据传输接口如下所示:

函数 描述
rt_qspi_transfer_message() 传输数据
rt_qspi_send_then_recv() 先发送后接收
rt_qspi_send() 发送一次数据

 

WATCHDOG设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问看门狗硬件,相关接口如下所示:

函数 描述
rt_device_find() 根据看门狗设备设备名称查找设备获取设备句柄
rt_device_init() 初始化看门狗设备
rt_device_control() 控制看门狗设备
rt_device_close() 关闭看门狗设备

 

WLAN 设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问看门狗硬件,相关接口如下所示:

初始化相关函数
函数 描述
rt_wlan_init() 初始化连接管理器
rt_wlan_set_mode() 设置工作模式
rt_wlan_get_mode() 获取设备工作模式

 

连接相关函数
函数 描述
rt_wlan_connect() 连接热点
rt_wlan_connect_adv() 无阻塞连接热点
rt_wlan_disconnect() 断开热点
rt_wlan_is_connected() 获取连接标志
rt_wlan_is_ready() 获取就绪标志
rt_wlan_get_info() 获取连接信息
rt_wlan_get_rssi() 获取信号强度

 

扫描相关函数
函数 描述
rt_wlan_scan() 异步扫描
rt_wlan_scan_sync() 同步扫描
rt_wlan_scan_with_info() 条件扫描
rt_wlan_scan_get_info_num() 获取热点个数
rt_wlan_scan_get_info() 拷贝热点信息
rt_wlan_scan_get_result() 获取扫描缓存
rt_wlan_scan_result_clean() 清理扫描缓存
rt_wlan_find_best_by_cache() 查找最佳热点

 

热点相关函数
函数 描述
rt_wlan_start_ap() 启动热点
rt_wlan_start_ap_adv() 无阻塞启动热点
rt_wlan_ap_is_active() 获取启动标志
rt_wlan_ap_stop() 停止热点
rt_wlan_ap_get_info() 获取热点信息

 

自动重连相关函数
函数 描述
rt_wlan_config_autoreconnect() 启动/停止自动重连
rt_wlan_get_autoreconnect_mode() 获取自动重连模式

 

事件回调相关函数
函数 描述
rt_wlan_register_event_handler() 事件注册
rt_wlan_unregister_event_handler() 解除注册

 

功耗管理相关函数
函数 描述
rt_wlan_set_powersave() 设置功耗等级
rt_wlan_get_powersave() 获取功耗等级

 

SENSOR设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问传感器设备,相关接口如下所示:

函数 描述
rt_device_find() 根据传感器设备设备名称查找设备获取设备句柄
rt_device_open() 打开传感器设备
rt_device_read() 读取数据
rt_device_control() 控制传感器设备
rt_device_set_rx_indicate() 设置接收回调函数
rt_device_close() 关闭传感器设备

 

Touch 设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问 Touch 设备,相关接口如下所示:

函数 描述
rt_device_find() 根据 Touch 设备设备名称查找设备获取设备句柄
rt_device_open() 打开 Touch 设备
rt_device_read() 读取触点数据
rt_device_control() 控制 Touch 设备
rt_device_set_rx_indicate() 设置接收回调函数
rt_device_close() 关闭 Touch 设备

 

CRYPTO 设备

硬件加解密框架目前已经支持 AES/DES/3DES/RC4/SHA1/SHA2/MD5/CRC/RNG/BIGNUM 等加解密相关的接口。

访问 hash 算法设备

应用程序通过 RT-Thread 提供的 hash 算法设备管理接口来访问 hash 算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_hash_create() 创建 hash 上下文
rt_hwcrypto_hash_destroy() 释放上下文
rt_hwcrypto_hash_finish() 计算最终 hash 值
rt_hwcrypto_hash_update() 处理一包数据
rt_hwcrypto_hash_cpy() 复制上下文
rt_hwcrypto_hash_reset() 重置上下文
rt_hwcrypto_hash_set_type() 设置 hash 算法类型
访问对称加解密设备

应用程序通过 RT-Thread 提供的 symmetric 设备管理接口来访问 symmetric 算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_symmetric_create() 创建对称加解密上下文
rt_hwcrypto_symmetric_destroy() 释放上下文
rt_hwcrypto_symmetric_crypt() 加解密操作
rt_hwcrypto_symmetric_setkey() 设置加解密密钥
rt_hwcrypto_symmetric_getkey() 获取加解密密钥
rt_hwcrypto_symmetric_setiv() 设置对称加解密初始化向量
rt_hwcrypto_symmetric_getiv() 获取对称加解密初始化向量
rt_hwcrypto_symmetric_set_ivoff() 设置对称加解密初始化向量偏移值
rt_hwcrypto_symmetric_get_ivoff() 获取对称加解密初始化向量偏移值
rt_hwcrypto_symmetric_cpy() 复制上下文
rt_hwcrypto_symmetric_reset() 重置上下文
rt_hwcrypto_symmetric_set_type() 设置加解密类型
访问 gcm 设备

应用程序通过 RT-Thread 提供的 gcm 设备管理接口来访问 gcm 算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_gcm_create() 创建上下文
rt_hwcrypto_gcm_destroy() 释放上下文
rt_hwcrypto_gcm_start() 传入附加值
rt_hwcrypto_gcm_finish() 生成消息认证码
rt_hwcrypto_gcm_crypt() 进行加解密
rt_hwcrypto_gcm_setkey() 设置密钥
rt_hwcrypto_gcm_getkey() 获取密钥
rt_hwcrypto_gcm_setiv() 设置初始化向量
rt_hwcrypto_gcm_getiv() 获取初始化向量
rt_hwcrypto_gcm_set_ivoff() 设置初始化向量偏移
rt_hwcrypto_gcm_get_ivoff() 获取初始化向量偏移
rt_hwcrypto_gcm_cpy() 复制上下文
rt_hwcrypto_gcm_reset() 重置上下文
访问 CRC 设备

应用程序通过 RT-Thread 提供的 CRC 设备管理接口来访问 CRC 算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_crc_create() 创建 CRC 上下文
rt_hwcrypto_crc_destroy() 释放上下文
rt_hwcrypto_crc_update() 计算一包数据
rt_hwcrypto_crc_cfg() 设置上下文计算数据
访问 RNG 设备

应用程序通过 RT-Thread 提供的 RNG 设备管理接口来访问 RNG 算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_rng_update() 获取默认设备随机数
访问大数设备

应用程序通过 RT-Thread 提供的大数设备管理接口来访问大数算法设备硬件,相关接口如下所示:

函数 描述
rt_hwcrypto_bignum_default() 获取默认上下文
rt_hwcrypto_bignum_init() 初始化大数对象
rt_hwcrypto_bignum_free() 释放大数
rt_hwcrypto_bignum_get_len() 获取大数长度
rt_hwcrypto_bignum_export_bin() 以大端模式输出二进制
rt_hwcrypto_bignum_import_bin() 以大端模式输入二进制
rt_hwcrypto_bignum_add() 大数相加
rt_hwcrypto_bignum_sub() 大数相减
rt_hwcrypto_bignum_mul() 大数相乘
rt_hwcrypto_bignum_mulmod 大数乘积取模
rt_hwcrypto_bignum_exptmod 大数幂运算取模

 

AUDIO设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问音频设备,相关接口如下所示:

函数 描述
rt_device_find() 根据音频设备设备名称查找设备获取设备句柄
rt_device_open() 打开音频设备
rt_device_control() 控制音频设备
rt_device_read() 读取数据
rt_device_write() 写入数据
rt_device_close() 关闭音频设备

 

Pulse Encoder 设备

应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问脉冲编码器设备,相关接口如下所示:

函数 描述
rt_device_find() 查找脉冲编码器设备
rt_device_open() 打开脉冲编码器设备(仅支持只读的方式)
rt_device_control() 控制脉冲编码器设备,可以清空计数值、获取类型、使能设备。
rt_device_read() 获取脉冲编码器当前值
rt_device_close() 关闭脉冲编码器设备

 

总结:

RT-Thread系统提供了一系列的通用设备驱动,方便用户直接调用组件,加快平台搭建,专注于应用开发。

缺点:针对总线协议来说,通过牺牲一些性能来提高上层应用的可移植,无可厚非,但像ADC,PWM这类上层组件几乎没有的,可以考虑自己实现,提升性能。





此内容由EEWORLD论坛网友ID.LODA原创,如需转载或用于商业用途需征得作者同意并注明出处

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章