这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » [转]RT-Thread系统设备框架简析

共3条 1/1 1 跳转至

[转]RT-Thread系统设备框架简析

助工
2020-04-23 13:20:49     打赏
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这类上层组件几乎没有的,可以考虑自己实现,提升性能。





关键词: RT-Thread     框架     硬件     接口    

高工
2020-04-23 14:53:00     打赏
2楼

解析的不错


工程师
2020-05-05 21:38:47     打赏
3楼

解析的很到位


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]