CN103761129B - 一种在Bootloader层实现SDIO接口驱动的方法 - Google Patents
一种在Bootloader层实现SDIO接口驱动的方法 Download PDFInfo
- Publication number
- CN103761129B CN103761129B CN201410013951.2A CN201410013951A CN103761129B CN 103761129 B CN103761129 B CN 103761129B CN 201410013951 A CN201410013951 A CN 201410013951A CN 103761129 B CN103761129 B CN 103761129B
- Authority
- CN
- China
- Prior art keywords
- sdio
- bootloader
- sdio interface
- interface
- boot loader
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种在Bootloader层实现SDIO接口驱动的方法,包括:修改、剪切操作系统内核中的SDIO接口驱动;把SDIO接口驱动移植到Bootloader中;移植完成后编译Bootloader;把编译好的Bootloader移植到开发板中;开发板上电启动后运行Bootloader,在Bootloader运行过程中对SDIO接口设备进行检测;如果检测到SDIO接口设备则对设备进行初始化,然后根据用户的需求对设备进行读写,读写完成后继续执行Bootloader启动操作系统;如果未检测到SDIO接口设备则顺序执行Bootloader启动操作系统。本发明可以在无操作系统环境下实现对SDIO接口设备的检测、初始化和数据读写,解除了SDIO设备的使用对操作系统的依赖。
Description
技术领域
本发明涉及嵌入式技术领域,特别是一种在Bootloader层实现SDIO接口驱动的方法。
背景技术
SDIO(Secure Digital Input and Output)接口是由传统SD存储卡的SD总线发展来的一种兼容多种存储卡及SDIO设备的接口设备,该接口设备支持SDIO卡、复合SDIO卡、SD存储卡和MMC卡,在电路、功耗和软件上完全兼容SD存储卡。SDIO接口具有很强的可扩展性和较快的传输速度,支持即插即用,为移动设备提供了高速低功耗IO数据传输解决方案,在手机、PAD等各种移动与固定设备中应用广泛。目前已经有相机、录音器、扫描仪、GPS、蓝牙、无线网卡等多种SDIO接口设备。
SDIO接口是通用的外围接口之一(如图1所示),目前SDIO接口设备对操作系统有很强的依赖性,SDIO接口驱动集成在操作系统的内核中,操作系统启动后才能对SDIO接口设备进行识别和数据读写。平板电脑等移动设备上电后首先运行系统启动引导程序Bootloader将操作系统内核复制到内存中然后启动操作系统,Bootloader中不具备SDIO接口驱动程序,因此在Bootloader运行阶段SDIO接口设备无法使用。
Bootloader是在操作系统内核运行之前运行的一段程序,主要负责硬件设备的初始化、内存空间映射图的建立等工作,从而将系统的软硬件环境带到了一个合适的状态,为最终调用操作系统内核准备好正确的环境。因此在Bootloader层实现SDIO接口驱动能够在Bootloader启动阶段增强移动设备与外接设备的联系与通讯,实现在操作系统启动前识别和读写SDIO接口设备,在Bootloader原有功能的基础上扩展和开发新的功能应用,实现一些目前只能在操作系统层面上实现的应用如连接无线网络。
综上所述,目前的SDIO接口主要使用在操作系统启动后移动手持或固定设备与外接设备之间的通讯方面,国内外尚未有在Bootloader层针对SDIO驱动进行的研究。
发明内容
本发明所要解决的技术问题是,针对现有技术不足,提供一种在Bootloader层实现SDIO接口驱动的方法,实现无操作系统环境下对SDIO接口设备的支持,解决SDIO接口设备只能在操作系统启动后使用的问题。
为解决上述技术问题,本发明所采用的技术方案是:一种在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 代码,启动操作系统。
与现有技术相比,本发明所具有的有益效果为:本发明实现了无操作系统环境下对SDIO接口设备的支持,使SDIO接口设备的使用摆脱了对操作系统的依赖,实现了底层对SDIO接口设备的支持,在近似裸机环境的Bootloader运行阶段实现对插入的SDIO 接口设备的读取和数据写入,解决了SDIO接口设备只能在操作系统启动后使用的问题。
附图说明
图1 为SDIO接口软硬件结构图;
图2 为本发明方法总体流程图;
图3 为本发明一实施例SDIO卡初始化流程图;
图4为本发明一实施例数据传输控制流程图。
具体实施方式
如图2所示,本发明的方法步骤如下:
S1:删除操作系统内核中的SDIO接口驱动代码中与内核相关的部分,把修改后的驱动移植到Bootloader中,移植完成后用#make menuconfig 命令配置Bootloader,然后输入#make命令编译Bootloader。
S2:将重新编译后的Bootloader下载到开发板中。
S3:开发板上电。
S4:顺序执行Bootloader代码:Bootloader的启动分为两个阶段,第一阶段为汇编语言,第二阶段为C语言,汇编语言执行完成后会跳入到C语言代码入口处继续执行。
S5:检测SDIO接口设备:在Bootloader的C语言代码中添加检测SDIO接口设备的函数,检测是否有SDIO接口设备插入。SDIO接口的开关检测引脚是用来检测SDIO接口设备的插入或拔出,通过检测引脚电平变化引起的中断来判定是否有SDIO接口设备的插入。检测到设备后对设备进行初始化,未检测到设备则继续执行Bootloader代码进而启动操作系统。
S6:初始化SDIO接口设备:检测到SDIO接口设备插入后,调用SDIO控制器的控制驱动对卡进行初始化操作,初始化流程如图3所示。控制器必须先判断卡的类型是否属于SDIO卡,对于SD卡、SDIO卡和mmc卡,不同的卡的工作电压范围各不相同,控制器发送命令查询插入设备的工作电压范围,然后根据设备的响应(设备的工作电压范围)判断设备所属的类型,获得卡的基本信息后对rSDIPRE,rSDICON,rSDIDTIMER三个寄存器进行设置。
S7:是否对设备进行读写操作:初始化SDIO接口设备后,如果对设备有读写操作则根据用户的选择进行相应的操作,如果对设备没有进一步的读写操作则退出对设备的操作。
S8:对设备进行读写操作:选择要进行的操作,产生相应的中断,根据中断调用数据传输控制驱动对卡进行读写,数据传输流程如图4示。控制器驱动首先设置与数据传输相关的寄存器。控制器对卡进行读操作时,将接收到的串行数据转换为并行数据,存入数据模块,写操作也是相同的,控制器将并行数据从数据模块里取出,串行发出。
S9:退出对设备的操作:读写操作完成后或者初始化后对设备没有进一步的读写操作则退出对设备的操作。
S10:继续执行Bootloader:退出对SDIO接口设备的操作后继续执行Bootloader代码,启动操作系统。
该实例使用的SDIO接口设备是SDIO接口WIFI 无线网卡,规格型号为FIT-WIFI-SDIO,型 号为WM-G-MR-09(Marvell8686),接 口为SDIO(1bit/4bit),支持IEEE 802.11b/g网络标准,数据传输率为54Mbps。
本实施例是基于智能移动终端开发板OK6410,该移动设备平台包括:ARM架构CPU,型号为S3C6410;有线网卡,型号DM9000;按键模块;存储模块为2G的Nand Flash。
本实施例采用Uboot作为Bootloarder的实例,通过把SDIO驱动移植到Uboot中实现在Uboot启动时对SDIO接口的无线网卡的检测识别、初始化和数据收发。在此之前已经完成了WIFI驱动移植到Uboot中的相关工作。
为了更好地说明本发明的方法,以下结合附图,对本发明的实施方法作进一步描述。
S1:剪切、修改操作系统内核中的SDIO接口驱动,把修改后的驱动移植到Uboot中,移植完成后重新编译Uboot。
S2:将重新编译后的Uboot下载到开发板中。
S3:开发板上电。
S4:顺序执行Uboot代码。
S5:在Uboot执行到第二阶段即C语言阶段时检测SDIO接口无线网卡是否插入。在Uboot的第二阶段即C语言阶段插入SDIO接口设备的检测函数,sdio_rescan()。负责检测开关检测引脚来确定是否有SDIO无线网卡插入,如果有网卡插入则返回值为1,如果没有网卡插入则返回值为0。如果返回值为0,说明未检测到SDIO接口无线网卡,则继续执行Uboot代码进而启动操作系统。
S6:检测到sdio_rescan()返回值为1,则根据此条件选择运行SDIO控制器驱动中的命令控制驱动部分对无线网卡进行初始化操作,检测网卡的相关信息,并通过串口打印出检测到的信息。
S7:初始化无线网卡之后确定用户是否要对网卡进行进一步的读写操作,如果要进行读写操作则对网卡进行读写,如果不进行进一步的操作则退出对无线网卡设备的操作。
S8:对无线网卡有读写操作则选择要进行的操作,产生相应的中断然后调用数据传输控制驱动对网卡进行读取或者写入数据的操作。
S9:初始化无线网卡后对网卡没有进一步的操作或者已经完成了对网卡的读取或数据写入工作则退出对网卡的操作。
S10:退出对网卡的操作后,继续执行Uboot代码,启动操作系统。
与现有技术相比,本发明的一种在Bootloader层实现SDIO接口驱动的方法,通过修改SDIO接口驱动,移植SDIO接口驱动到Bootloader,修改Bootloader启动代码,编译Bootloader等,实现了在无操作系统环境下对SDIO接口设备的识别和读写。实现了SDIO接口设备的使用不依赖操作系统的特性,方便了智能终端用户。
Claims (4)
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()。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410013951.2A CN103761129B (zh) | 2014-01-13 | 2014-01-13 | 一种在Bootloader层实现SDIO接口驱动的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410013951.2A CN103761129B (zh) | 2014-01-13 | 2014-01-13 | 一种在Bootloader层实现SDIO接口驱动的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103761129A CN103761129A (zh) | 2014-04-30 |
CN103761129B true CN103761129B (zh) | 2017-04-12 |
Family
ID=50528373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410013951.2A Expired - Fee Related CN103761129B (zh) | 2014-01-13 | 2014-01-13 | 一种在Bootloader层实现SDIO接口驱动的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103761129B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573940B (zh) * | 2014-10-11 | 2019-01-15 | 航天信息股份有限公司 | 一种sdio接口外设的自动探测方法及装置 |
CN105677412A (zh) * | 2016-01-06 | 2016-06-15 | 无锡中太服务器有限公司 | 一种在OpenPower CPU架构服务器BOOT中提供针对PCIE卡配置能力的方法 |
CN108021405B (zh) * | 2016-10-28 | 2020-11-06 | 瑞芯微电子股份有限公司 | 一种soc系统启动过程中存储介质的驱动方法和装置 |
CN107741915B (zh) * | 2017-10-25 | 2019-12-24 | 武汉精测电子集团股份有限公司 | 一种基于sdio接口的fpga板级通信装置及通信方法 |
CN110780189B (zh) * | 2019-09-23 | 2021-12-21 | 福州瑞芯微电子股份有限公司 | 一种基于fpga的sdio接口测试设备与方法 |
CN111198837B (zh) * | 2019-12-25 | 2022-07-26 | 深圳市紫光同创电子有限公司 | 基于fpga的sdio接口系统、控制器桥接方法 |
CN112527706B (zh) * | 2020-12-02 | 2022-04-22 | 中国电子科技集团公司第五十二研究所 | 一种服务器cpu适配pcie板卡的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928820A (zh) * | 2006-09-30 | 2007-03-14 | 四川长虹电器股份有限公司 | 嵌入式系统及其升级方法 |
-
2014
- 2014-01-13 CN CN201410013951.2A patent/CN103761129B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928820A (zh) * | 2006-09-30 | 2007-03-14 | 四川长虹电器股份有限公司 | 嵌入式系统及其升级方法 |
Non-Patent Citations (3)
Title |
---|
不同Boot Loader 之间模块移植的实现;李维 等;《http://www.elecfans.com 电子发烧友》;20071231;1-5 * |
基于U-boot 构建嵌入式系统的BootLoader;马骁 等;《中国科技论文在线》;20100531;1-9 * |
基于嵌入式Linux的3G-WiFi接入功能的研究与实现;陈曾海 等;《中国科技论文在线》;20110422;1-5 * |
Also Published As
Publication number | Publication date |
---|---|
CN103761129A (zh) | 2014-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103761129B (zh) | 一种在Bootloader层实现SDIO接口驱动的方法 | |
CN101110039B (zh) | 终端设备自安装及自启动系统及方法 | |
CN105579953B (zh) | 灵活引导程序代码架构 | |
CN104407874A (zh) | 一种兼容多款lcd屏的嵌入式设备 | |
CN101196819B (zh) | 一种片上系统芯片自适应启动设备的方法 | |
US20070300055A1 (en) | Booting apparatus and method therefor | |
CN113703799B (zh) | 计算设备及其bios更新方法和介质 | |
CN102945173A (zh) | 用户程序在线升级系统和升级方法 | |
GB2463809A (en) | Peripheral device operation method, peripheral device and host | |
US20130040702A1 (en) | Sd switch box in a cellular handset | |
CN102043638A (zh) | 计算机系统以及计算机启动设定方法 | |
CN107526614B (zh) | Fpga开发板的通信方法 | |
CN102446101A (zh) | 固件强制升级的系统及其固件的强制升级方法 | |
CN111756858A (zh) | 嵌入式设备的远程开发处理系统、方法及装置 | |
CN101102562A (zh) | 一种phs手机实现nor flash兼容的方法 | |
CN113360161B (zh) | 资源升级方法及相关产品 | |
CN205620994U (zh) | 一种嵌入式设备处理装置 | |
CN113360440A (zh) | 处理器通信控制方法及相关产品 | |
CN108156310A (zh) | 一种指纹处理的方法和系统、终端设备及计算机可读介质 | |
CN108958837B (zh) | 一种动态配置me固件的方法、系统及介质 | |
CN101311914B (zh) | 电子装置与周边装置的匹配系统及其匹配方法 | |
CN105068835B (zh) | 移动终端及其调试信息显示方法 | |
EP1686510B1 (en) | Electronic device and control method thereof | |
US20100332731A1 (en) | Flash memory apparatus and method for operating the same and data storage system | |
CN104252631A (zh) | 电子装置及该电子装置的控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170412 Termination date: 20180113 |