我是靠谱客的博主 自由帅哥,这篇文章主要介绍【RT-Thread】——驱动篇之文件系统,现在分享给大家,希望可以做个参考。

驱动是连接底层硬件跟上层系统的桥梁。这一层是至关重要的,如果不能保证驱动的正确性和完整性,系统就无法跟底层硬件通信,更无法完成上层的开发。

         经过好几天的奋斗终于把SD-Card的驱动成功的移植到了系统中,可以调用系统函数来操作SD卡了。

         首先看看RT-Thread的文件系统的三层结构图:


1.  最顶层的是一套面向嵌入式系统专门优化过的虚拟文件系统(接口)。这层为我们提供了访问文件的各种API:open、close、read、write等等

2.  中间是各种文件系统的实现。具体的配置在rtconfig.h中进行选择配置。

3.  最底层是各类存储驱动,如SD卡,IDE硬盘驱动等。(我就用了SD卡,别的没有用到呢)

 

这个驱动主要分两部分,一部分是SDIO接口对SD的操作,另一部分是将底层接口函数跟上层函数相对应。

SDIO

1.  SDIO简介

SDIO是一个I/O接口规范,是为带有SD卡槽的设备进行外设功能扩展。

2.  SD协议

1-      SDIO的时钟。SDIO_CK时钟是通过PC12引脚连接到SD卡的,是SDIO接口与SD卡用于同步的时钟。

2-      SDIO的命令、数据传输方式。SDIO的所有命令及命令响应,都是通过SDIO-CMD引脚来传输的。

命令只能由host即STM32的SDIO控制器发出。SDIO协议把命令分成了11种,包括基本命令,读写命令还有ACMD系列命令等。

3-      卡的种类。STM32的SDIO支持SD存储卡,SDI/O卡,MMC卡。

3.  剩下的就是具体的代码了,找个例程的驱动好好研究去吧。具体可以看看野火的教程。

上面的就是单纯的SDIO对SD卡的操作,跟操作系统是没有半点关系的。这是走向系统的第一步,一定要操作成功。接下来就是RT-Thread DFS文件系统针对下层媒介 使用的是RT-Thread的设备系统,其中主要包括设备读写等操作。

下面就列出接口函数,如下:

复制代码
1
2
3
4
5
6
7
8
void rt_hw_sdcard_init(void) { NVIC_InitTypeDef NVIC_InitStructure; if (SD_Init() == SD_OK) { SD_Error status; rt_uint8_t *sector;
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<span style="white-space:pre"> </span>NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); <span style="white-space:pre"> </span>{ /* there is no partition table */ part.offset = 0; part.size = 0; } // /* release sector buffer */ // rt_free(sector); /* register sdcard device */ sdcard_device.type = RT_Device_Class_Block; sdcard_device.init = rt_sdcard_init; sdcard_device.open = rt_sdcard_open; sdcard_device.close = rt_sdcard_close; sdcard_device.read = rt_sdcard_read; sdcard_device.write = rt_sdcard_write; sdcard_device.control = rt_sdcard_control; /* no private */ sdcard_device.user_data = &SDCardInfo; rt_device_register(&sdcard_device, "sd0", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE); return; } __return: rt_kprintf("sdcard init failedn"); }
上面就是底层的接口函数与DFS系统相对应上,以后直接调用系统的函数就可以操作底层的SD卡了。

到了这里我们就把SD的驱动跟RT-Thread的文件系统相对应上了。接下来就是应用了,应用层面上我用的不是太好,就没有资格说些什么了,但是把jiezhi的教程上传到这里,感兴趣的可以参考他的教程。http://download.csdn.net/detail/liaoxu02/7545209

最后

以上就是自由帅哥最近收集整理的关于【RT-Thread】——驱动篇之文件系统的全部内容,更多相关【RT-Thread】——驱动篇之文件系统内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部