概述
驱动是连接底层硬件跟上层系统的桥梁。这一层是至关重要的,如果不能保证驱动的正确性和完整性,系统就无法跟底层硬件通信,更无法完成上层的开发。
经过好几天的奋斗终于把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的设备系统,其中主要包括设备读写等操作。
下面就列出接口函数,如下:
void rt_hw_sdcard_init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
if (SD_Init() == SD_OK)
{
SD_Error status;
rt_uint8_t *sector;
<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】——驱动篇之文件系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复