一种在Bootloader层实现SDIO接口驱动的方法

文档序号:6535571阅读:451来源:国知局
一种在Bootloader层实现SDIO接口驱动的方法
【专利摘要】本发明公开了一种在Bootloader层实现SDIO接口驱动的方法,包括:修改、剪切操作系统内核中的SDIO接口驱动;把SDIO接口驱动移植到Bootloader中;移植完成后编译Bootloader;把编译好的Bootloader移植到开发板中;开发板上电启动后运行Bootloader,在Bootloader运行过程中对SDIO接口设备进行检测;如果检测到SDIO接口设备则对设备进行初始化,然后根据用户的需求对设备进行读写,读写完成后继续执行Bootloader启动操作系统;如果未检测到SDIO接口设备则顺序执行Bootloader启动操作系统。本发明可以在无操作系统环境下实现对SDIO接口设备的检测、初始化和数据读写,解除了SDIO设备的使用对操作系统的依赖。
【专利说明】—种在Bootloader层实现SDIO接口驱动的方法
【技术领域】
[0001]本发明涉及嵌入式【技术领域】,特别是一种在Bootloader层实现SDIO接口驱动的方法。
【背景技术】
[0002]SDIO (Secure Digital Input and Output)接口是由传统 SD 存储卡的 SD 总线发展来的一种兼容多种存储卡及SDIO设备的接口设备,该接口设备支持SDIO卡、复合SDIO卡、SD存储卡和MMC卡,在电路、功耗和软件上完全兼容SD存储卡。SDIO接口具有很强的可扩展性和较快的传输速度,支持即插即用,为移动设备提供了高速低功耗10数据传输解决方案,在手机、PAD等各种移动与固定设备中应用广泛。目前已经有相机、录音器、扫描仪、GPS、蓝牙、无线网卡等多种SDIO接口设备。
[0003]SDIO接口是通用的外围接口之一,目前SDIO接口设备对操作系统有很强的依赖性,SDIO接口驱动集成在操作系统的内核中,操作系统启动后才能对SDIO接口设备进行识别和数据读写。平板电脑等移动设备上电后首先运行系统启动引导程序Bootloader将操作系统内核复制到内存中然后启动操作系统,Bootloader中不具备SDIO接口驱动程序,因此在Bootloader运行阶段SDIO接口设备无法使用。
[0004]Bootloader是在操作系统内核运行之前运行的一段程序,主要负责硬件设备的初始化、内存空间映射图的建立等工作,从而将系统的软硬件环境带到了一个合适的状态,为最终调用操作系统内核准备好正确的环境。因此在Bootloader层实现SDIO接口驱动能够在Bootloader启动阶段增强移动设备与外接设备的联系与通讯,实现在操作系统启动前识别和读写SDIO接口设备,在Bootloader原有功能的基础上扩展和开发新的功能应用,实现一些目前只能在操作系统层面上实现的应用如连接无线网络。
[0005]综上所述,目前的SDIO接口主要使用在操作系统启动后移动手持或固定设备与外接设备之间的通讯方面,国内外尚未有在Bootloader层针对SDIO驱动进行的研究。

【发明内容】

[0006]本发明所要解决的技术问题是,针对现有技术不足,提供一种在Bootloader层实现SDIO接口驱动的方法,实现无操作系统环境下对SDIO接口设备的支持,解决SDIO接口设备只能在操作系统启动后使用的问题。
[0007]为解决上述技术问题,本发明所采用的技术方案是:一种在Bootloader层实现SDIO接口驱动的方法,该方法为:
1)删除操作系统内核中的SDIO接口驱动代码中与操作系统内核相关的部分,得到修改后的驱动,将修改后的驱动移植到Bootloader中,配置Bootloader,编译配置后的Bootloader ;
2)将编译后的Bootloader下载到开发板中,开发板上电后顺序执行Bootloader代
码; 3)在Bootloader的C语言代码中添加检测SDIO接口设备的函数,检测是否有SDIO接口设备插入;若有,进入步骤4);否则,进入步骤8);
4)初始化SDIO接口设备;
5)判断对SDIO接口设备是否有读写操作,若有,则进入步骤6);否则,进入步骤7);
6)选择要进行的操作,产生相应的中断,根据中断调用数据传输控制驱动对SDIO接口设备进行读写;
7)退出对SDIO接口设备的操作;
8)继续执行Bootloader代码,启动操作系统。
[0008]与现有技术相比,本发明所具有的有益效果为:本发明实现了无操作系统环境下对SDIO接口设备的支持,使SDIO接口设备的使用摆脱了对操作系统的依赖,实现了底层对SDIO接口设备的支持,在近似裸机环境的Bootloader运行阶段实现对插入的SDIO接口设备的读取和数据写入,解决了 SDIO接口设备只能在操作系统启动后使用的问题。
【专利附图】

【附图说明】
[0009]图1为SDIO接口软硬件结构图;
图2为本发明方法总体流程图;
图3为本发明一实施例SDIO卡初始化流程图;
图4为本发明一实施例数据传输控制流程图。
【具体实施方式】
[0010]如图2所示,本发明的方法步骤如下:
S1:删除操作系统内核中的SDIO接口驱动代码中与内核相关的部分,把修改后的驱动移植到Bootloader中,移植完成后用#make menuconfig命令配置Bootloader,然后输入#make 命令编译 Bootloader。
[0011]S2:将重新编译后的Bootloader下载到开发板中。
[0012]S3:开发板上电。
[0013]S4:顺序执行Bootloader代码=Bootloader的启动分为两个阶段,第一阶段为汇编语言,第二阶段为C语言,汇编语言执行完成后会跳入到C语言代码入口处继续执行。
S5:检测SDIO接口设备:在Bootloader的C语言代码中添加检测SDIO接口设备的函数,检测是否有SDIO接口设备插入。SDIO接口的开关检测引脚是用来检测SDIO接口设备的插入或拔出,通过检测引脚电平变化引起的中断来判定是否有SDIO接口设备的插入。检测到设备后对设备进行初始化,未检测到设备则继续执行Bootloader代码进而启动操作系统。
[0014]S6:初始化SDIO接口设备:检测到SDIO接口设备插入后,调用SDIO控制器的控制驱动对卡进行初始化操作,初始化流程如图3所示。控制器必须先判断卡的类型是否属于SDIO卡,SD卡、SDIO卡和mmc卡。不同的卡的工作电压范围各不相同,控制器发送命令查询插入设备的工作电压范围,然后根据设备的响应(设备的工作电压范围)判断设备所属的类型,获得卡的基本信息后对rSDIPRE,rSDICON, rSDIDTIMER三个寄存器进行设置。
[0015]S7:是否对设备进行读写操作:初始化SDIO接口设备后,如果对设备有读写操作则根据用户的选择进行相应的操作,如果对设备没有进一步的读写操作则退出对设备的操作。
[0016]S8:对设备进行读写操作:选择要进行的操作,产生相应的中断,根据中断调用数据传输控制驱动对卡进行读写,数据传输流程如图4示。控制器驱动首先设置与数据传输相关的寄存器。控制器对卡进行读操作时,将接收到的串行数据转换为并行数据,存入数据模块,写操作也是相同的,控制器将并行数据从数据模块里取出,串行发出。
[0017]S9:退出对设备的操作:读写操作完成后或者初始化后对设备没有进一步的读写操作则退出对设备的操作。
[0018]SlO:继续执行Bootloader:退出对SDIO接口设备的操作后继续执行Bootloader代码,启动操作系统。
[0019]该实例使用的SDIO接口设备是SDIO接口 WIFI无线网卡,规格型号为FIT-WIF1-SD10,型号为 WM-G_MR-09(Marvell8686),接 口为 SD10( lbit/4bit),支持 IEEE802.llb/g网络标准,数据传输率为54Mbps。
[0020]本实施例是基于智能移动终端开发板0K6410,该移动设备平台包括:ARM架构CPU,型号为S3C6410 ;有线网卡,型号DM9000 ;按键模块;存储模块为2G的Nand Flash。
[0021]本实施例采用Uboot作为Bootloarder的实例,通过把SDIO驱动移植到Uboot中实现在Uboot启动时对SDIO接口的无线网卡的检测识别、初始化和数据收发。在此之前已经完成了 WIFI驱动移植到Uboot中的相关工作。
[0022]为了更好地说明本发明的方法,以下结合附图,对本发明的实施方法作进一步描述。
[0023]S1:剪切、修改操作系统内核中的SDIO接口驱动,把修改后的驱动移植到Uboot中,移植完成后重新编译Uboot。
[0024]S2:将重新编译后的Uboot下载到开发板中。
[0025]S3:开发板上电。
[0026]S4:顺序执行Uboot代码。
[0027]S5:在Uboot执行到第二阶段即C语言阶段时检测SDIO接口无线网卡是否插入。在Uboot的第二阶段即C语言阶段插入SDIO接口设备的检测函数,Sdi0_reScan()。负责检测开关检测引脚来确定是否有SDIO无线网卡插入,如果有网卡插入则返回值为1,如果没有网卡插入则返回值为O。如果返回值为0,说明未检测到SDIO接口无线网卡,则继续执行Uboot代码进而启动操作系统。
[0028]S6:检测到sdiojescanO返回值为1,则根据此条件选择运行SDIO控制器驱动中的命令控制驱动部分对无线网卡进行初始化操作,检测网卡的相关信息,并通过串口打印出检测到的信息。
[0029]S7:初始化无线网卡之后确定用户是否要对网卡进行进一步的读写操作,如果要进行读写操作则对网卡进行读写,如果不进行进一步的操作则退出对无线网卡设备的操作。
[0030]S8:对无线网卡有读写操作则选择要进行的操作,产生相应的中断然后调用数据传输控制驱动对网卡进行读取或者写入数据的操作。
[0031]S9:初始化无线网卡后对网卡没有进一步的操作或者已经完成了对网卡的读取或数据写入工作则退出对网卡的操作。
[0032]SlO:退出对网卡的操作后,继续执行Uboot代码,启动操作系统。
[0033]与现有技术相比,本发明的一种在Bootloader层实现SDIO接口驱动的方法,通过修改SDIO接口驱动,移植SDIO接口驱动到Bootloader,修改Bootloader启动代码,编译Bootloader等,实现了在无操作系统环境下对SDIO接口设备的识别和读写。实现了 SDIO接口设备的使用不依赖操作系统的特性,方便了智能终端用户。
【权利要求】
1.一种在Bootloader层实现SDIO接口驱动的方法,其特征在于,该方法为: 1)删除操作系统内核中的SDIO接口驱动代码中与内核相关的部分,得到修改后的驱动,将修改后的驱动移植到Bootloader中,配置Bootloader,编译配置后的Bootloader ; 2)将编译后的Bootloader下载到开发板中,开发板上电后顺序执行Bootloader代码; 3)在Bootloader的C语言代码中添加检测SDIO接口设备的函数,检测是否有SDIO接口设备插入;若有,进入步骤4);否则,进入步骤8); 4)初始化SDIO接口设备; 5)判断对SDIO接口设备是否有读写操作,若有,则进入步骤6);否则,进入步骤7); 6)选择要进行的操作,产生相应的中断,根据中断调用数据传输控制驱动对SDIO接口设备进行读写; 7)退出对SDIO接口设备的操作; 8)继续执行Bootloader代码,启动操作系统。
2.根据权利要求1所述的在Bootloader层实现SDIO接口驱动的方法,其特征在于,所述 Bootloader 为 Uboot。
3.根据权利要求2所述的在Bootloader层实现SDIO接口驱动的方法,其特征在于,所述SDIO接口设备为SDIO接口无线网卡。
4.根据权利要求3所述的在Bootloader层实现SDIO接口驱动的方法,其特征在于,SDIO接口无线网卡的检测函数为sdio_rescan()。
【文档编号】G06F9/445GK103761129SQ201410013951
【公开日】2014年4月30日 申请日期:2014年1月13日 优先权日:2014年1月13日
【发明者】熊永华, 张尧学, 吴敏, 陈建二, 王建新, 王国军, 陈娅, 王宁 申请人:中南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1