Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
2024-RSOC
【2024——RSOC】设备驱动
发布于 2024-07-29 17:54:21 浏览:323
订阅该版
[tocm] # 设备驱动 ## Rt-thread IO/设备框架概念 ### I/O派生设备种类 ![](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725204752661.png) ### 字符/块设备特点 + 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反, 此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型 的字符设备。 + 块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、 软盘、CD-ROM驱动器和闪存都是典型的块设备,应用程序可以寻址磁盘上的任何位 置,并由此读取数据。此外,数据的读写只能以块(通常是512B)的倍数进行。与字符 设备不同,块设备并不支持基于字符的寻址。 **字符设备只能顺序读取**,**块设备可以随机读取**。 ## RT-thread I/O API ### 创建/销毁设备 rt_device_t rt_device-create (int type , int attach_size); void rt_device-destroy (rt——device device); ### 注册设备flags `rt_device_t rt_device-register(rt_device_t dev, const char* name. uint8_t flags); rt_device_t rt_device-unregister(rt_device_t dev);` ![image-20240725205333686](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725205333686.png) ### 访问I/O设备 应用程序通过I/O设备管理接口来访问硬件设备,当设备驱动实现后,应用程序 ### 查找设备、初始化设备 `rt_deviece_find(rt_device_t dev, rt_uint16_t oflags);` `rt_err_t rt_device_close (rt_device_t dev)` ### 打开关闭设备 `• rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags);` `• rt_err_t rt_device_close(rt_device_t dev)` ### 控制设备 rt_err_t rt-devic_control (rt_device_t dev ,rt_uint8_t cmd ,void *args); ### 读写设备 `• rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos,void* buffer, rt_size_t size); • rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos,const void* buffer, rt_size_t size)` ### 数据接收回调 当硬件设备收到数据时,可以通过如下函数回调另一个函数 来设置数据接收指示,通知上层应用线程有数据到达: `• rt_err_t rt_device_set_rx_indicate(rt_device_t dev,` `rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size))` ### 调用关系 ![image-20240725205614618](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725205614618.png) ## RT_thread GPIO 外设开发 ### GPIO概念与原理 #### 引脚的分类: + 电源,时钟,控制 ,I/O ### 可编程控制中断 + 上升沿触发,下降沿触发,高电平触发,低电平触发, ### 常用接口 应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO, 相关接口如下所示: ```C • rt_pin_mode():设置引脚模式` `• rt_pin_write() :设置引脚电平` `• rt_pin_read() :读取引脚电平` `• rt_pin_attach_irq() :绑定引脚中断回调函数` `• rt_pin_irq_enable() :使能引脚中断` `• rt_pin_detach_irq() :脱离引脚中断回调函 ``` ### 配置引脚模式 引脚在使用前需要先设置好输入或者输出模式,通过如下 函数完成: void rt-pin_mode(rt_base_t pin rt_base_t mode) • mode 可取以下宏定义值之一 ![image-20240725205916617](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725205916617.png) ### 输出高低电平 `void rt_pin_write(e(rt_base_t pin,rt_base_t value);` ## rtthread I2C外设开发 ### I2C总线简介 I2C 是 Inter-Integrated Circuit 的简称,读作:I-squared-C。由飞利浦公司于1980年代 提出,为了让主板、嵌入式系统或手机用以连接低速周边外部设备而发展。 常见的I2C总线以传输速率的不同分为不同的模式: • 低速模式:10Kbit/s • 标准模式:100Kbit/s • 快速模式:400Kbit/s • 高速模式:3.4Mbit/s ### 传输格式 ![image-20240725210128910](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725210128910.png) ### API调用 ## Rt_thread SPI外设开发 ### SPi原理与概念 SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全 双工、同步通信总线,常用于短距离通讯,主要应用于 EEPROM、 FLASH、实时时钟、AD 转换器、还有数字信号处理器和数字信号 解码器之间。SPI 一般使用 4 根线通信,如下图所示 ![image-20240725210343648](C:\Users\27545\AppData\Roaming\Typora\typora-user-images\image-20240725210343648.png) ### 开发模式 • 编写 SPI BUS 驱动 • 注册 SPI Device 设备 • 打开 SPI Device 设备 • 使用 SPI 框架提供 API 编程发送接收数据 • 关闭 SPI Device 设备 ### 注册SPI设备 • 挂载 SPI 设备:SPI 驱动会注册 SPI 总线,SPI 设备需要挂载到已 经注册好的 SPI 总线上。 `rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device ,const char * name ,const char *bus_name, void * user _data);` ### SPI api
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
才淇高理
这家伙很懒,什么也没写!
文章
6
回答
1
被采纳
0
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部