首页> 中国专利> 一种基于国产嵌入式操作系统的USB转CF/SD驱动方法

一种基于国产嵌入式操作系统的USB转CF/SD驱动方法

摘要

本发明提供一种基于国产嵌入式操作系统的USB转CF/SD驱动方法,包括手持计算机,该手持计算机内置龙芯处理器,所述龙芯处理器通过USB转换芯片连接CF接口和SD接口,所述手持计算机内部设置有ReWorks操作系统,其具体实现过程为:完成CF/SD设备的探测;配置CF/SD设备;完成CF/SD设备存储;完成CF/SD设备热插拔处理。该一种基于国产嵌入式操作系统的USB转CF/SD驱动方法和现有技术相比,实用性强、安全性能高,适用范围广泛,易于推广。

著录项

  • 公开/公告号CN103279441A

    专利类型发明专利

  • 公开/公告日2013-09-04

    原文格式PDF

  • 申请/专利权人 山东超越数控电子有限公司;

    申请/专利号CN201310189291.9

  • 发明设计人 刘传刚;耿士华;边守华;孙中;

    申请日2013-05-21

  • 分类号G06F13/38(20060101);

  • 代理机构

  • 代理人

  • 地址 250100 山东省济南市高新区孙村镇科航路2877号

  • 入库时间 2024-02-19 20:08:03

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-04-05

    授权

    授权

  • 2014-11-26

    实质审查的生效 IPC(主分类):G06F13/38 申请日:20130521

    实质审查的生效

  • 2013-09-04

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,具体地说是一种基于国产嵌入式操作系统的USB转CF/SD驱动方法。

背景技术

龙芯系列处理器是是中国科学院计算所自主研发的通用CPU,其中龙芯1系列处理器面向工业控制、消费电子(手机/MP4/掌上电脑等)等嵌入式应用。龙芯处理器本身不支持CF或SD扩展,许多特种行业用户如军方用户等有很多CF接口的扩展设备,而SD扩展存储对多数用户也都需要的,因此我们采用一个USB host扩展了一个标准CF/SD接口。

ReWorks嵌入式操作系统是中国电子科技集团第32所基于“九五”、“十五”的技术成果自行研制、拥有全部源代码的嵌入式实时操作系统,适用于多种目标硬件环境(x86、mips)。ReWorks操作系统采用面向对象和微内核技术开发,具有强实时性、可裁剪性和可伸缩性,并提供了VxWorks兼容层。

目前尚没有对国产嵌入式操作系统ReWorks下USB转CF/SD驱动的研究。

发明内容

本发明的技术任务是针对在现有技术的不足,提供一种可保证数据安全、基于国产嵌入式操作系统的USB转CF/SD驱动方法。

本发明的技术方案是按以下方式实现的,该一种基于国产嵌入式操作系统的USB转CF/SD驱动方法,包括手持计算机,该手持计算机内置龙芯处理器,所述龙芯处理器上设置有USB设备控制器,该USB设备控制器通过USB转换芯片连接CF接口和SD接口,所述手持计算机内部设置有ReWorks操作系统,其具体实现过程为:

步骤一,完成CF/SD设备的探测:ReWorks通过USB 设备的类别对USB 设备进行识别,USB 设备的类别包括USB 类、USB 子类和USB 协议三种;

步骤二,配置CF/SD设备:首先,驱动在系统中设置传输CF/SD信号的GPIO,并为其分配好寻址用的IO端口;其次,对CF/SD卡的属性存储空间进行配置;

步骤三,完成CF/SD设备存储:系统向CF/SD发布ATA指令,驱动程序根据系统的I/O请求得到CF/SD卡的块号,利用该块号来计算CF卡的LBA地址,将这些参数值和ATA指令按8位方式写入相应寄存器中,即完成一次存储过程。

步骤四,完成CF/SD设备热插拔处理。

    所述步骤二中的驱动需要对其属性选项寄存器、配置状态寄存器、针替换寄存器、套接字拷贝寄存器的值进行验证,若这些值与默认值不匹配,则要将其值设置为默认值。

所述步骤三中的ATA指令集分为3类,所述ATA指令集中的每类命令都要求CF/SD卡在接收到命令时处于不忙状态且有数据请求时才能处理CF/SD缓冲区中的数据流。

所述步骤三中参数值是指:取块号的低28位,依次对应CF/SD卡的柱面低位寄存器、柱面高位寄存器、扇区寄存器、设备/磁头寄存器。

所述步骤四中热插拔处理过程是指:在ReWorks系统中,系统层和应用层都要对热插拔事件进行处理,在系统层,一方面要探测CF/SD卡的热插拔事件,分配或释放系统资源,并驱动CF/SD设备;另一方面,要将存储卡的热插拔事件及时准确的通知应用层,应用层则根据热插拔事件做出相应的处理。

本发明与现有技术相比所产生的有益效果是:

本发明的一种基于国产嵌入式操作系统的USB转CF/SD驱动方法基于国产龙芯处理器和国产ReWorks嵌入式操作系统而实现手持计算机内部的USB转CF/SD驱动,实用性强、安全性能高,适用范围广泛,易于推广。

附图说明

附图1是本发明的系统硬件框图。

具体实施方式

下面结合附图对本发明所提供的一种基于国产嵌入式操作系统的USB转CF/SD驱动方法作以下详细说明。

结构图如附图1所示,该一种基于国产嵌入式操作系统的USB转CF/SD驱动方法,包括手持计算机,该手持计算机内置龙芯处理器,该龙芯处理器上设置有LCD控制器、SPI控制器、UART控制器、以太网控制器、USB设备控制器、单总线、声卡驱动控制器、GPIO接口、南桥FLASH控制器、DDR2控制器,所述LCD控制器连接有液晶屏;SPI控制器通过触摸屏控制芯片连接触摸屏;UART控制器通过串口转换芯片连接RS232接口和北斗模块;以太网控制器通过网络芯片连接以太网卡;USB设备控制器连接USB接口、摄像头、通过USB转换芯片连接CF接口和SD接口;单总线通过锂电池转换芯片连接电源适配器接口;声卡驱动控制器通过音频芯片连接扬声器、耳机、麦克风;GPIO接口连接矩阵键盘、安全模块;南桥FLASH控制器通过南桥FLASH置入操作系统;DDR2控制器连接DDR2内存,其中RS232接口、以太网接口、USB接口、电源适配器接口均为航插接口,CF接口、SD接口、耳机和麦克均由设置在手持计算机上的小门覆盖遮挡,该手持计算机内部设置有ReWorks操作系统,其具体实现过程为:

步骤一、CF/SD设备的探测。

ReWorks通过USB 设备的类别对USB 设备进行识别,USB 设备的类别从USB 类、USB 子类和USB 协议三方面定义,但实际中由于设备类别比较多,不是所有设备都能很容易找到其设备类别,ReWorks下提供一个比较方便识别USB 设备的方法,ReWorks 下定义一个常量USBD_NOTIFY_ALL,这个常量可以代表所有的USB 类、USB 子类和USB 协议,可识别所有USB 类设备的插拔。探测(probe)函数代码如下:

static int mmc_bus_probe(struct device *dev)        

   {  struct mmc_driver *drv = to_mmc_driver(dev->driver);;  

      struct mmc_card *card = dev_to_mmc_card(dev);     

      return drv->probe(card);   }        

步骤二、CF/SD设备的配置。

在对CF/SD卡进行存储操作之前,驱动程序要对其进行必要的配置。首先,驱动在系统中设置传输CF/SD信号的GPIO,并为其分配好寻址用的IO端口。在Memory模式下,CF/SD卡的IO端口与即为其通用存储空间的16字节数据块。其次,对CF/SD卡的属性存储空间进行配置。为保证能够正确的使用CF/SD卡,驱动需要对其属性选项寄存器、配置状态寄存器、针替换寄存器、套接字拷贝寄存器的值进行验证,若这些值与默认值不匹配,则要将其值设置为默认值。

void Card_SetDevice(void)

{      Card_Dev_Config=Card_DevReg_DEV1+Card_DevReg_b5

+Card_DevReg_LBA+Card_DevReg_b7;

       outportw(Card_Dev_Config,CARD_REG_DEVICE_HEAD);  }

步骤三、CF/SD设备存储功能实现。

要实现CF/SD的存储备份功能,要求CF/SD卡必须能够正确接收并响应系统对它的I/O请求,系统进而向CF/SD发布ATA指令。ATA指令集分为3类,每类命令都要求CF/SD卡在接收到命令时处于不忙(BSY=0)状态且有数据请求(DRQ=1)时才能处理CF/SD缓冲区中的数据流。驱动程序根据系统的I/O请求得到CF/SD卡的块号block,利用该块号来计算CF卡的LBA地址。取block的低28位,依次对应CF/SD卡的柱面低位寄存器、柱面高位寄存器、扇区寄存器、设备/磁头寄存器,将这些参数值和ATA指令按8位方式写入相应寄存器中,即完成一次存储过程。

int Card_Write_Sector(U16 * Buffer, U32 Sector ,U8 count)   //写一个簇

{ ……

       if(!Card_Flag)                    /*存储卡不可用,立即返回*/

         return  FALSE;

       Card_WriteSetting(Sector,count);  /*写扇区设置*/

       do{ count--;

           if(Card_IsBusy())             /*等待设备请求数据传输*/

           {   for(i = 0; i<256;i++)     /*连续写256个字数据,即一个扇区*/           

               outportw(*(Buffer++),CF_REG_DATA); /*向数据寄存器写一个字数据*/                 

               Buffer +=256;            /*调要写入数据缓冲区的指针*/

           }

          ……

       return Status;                     

}

步骤四、CF/SD设备热插拔事件的处理。

    CF/SD等嵌入式存储设备的一大特色就是能做到即插即用。在ReWorks系统中,系统层和应用层都要对热插拔事件进行处理。在系统层,一方面要探测CF/SD卡的热插拔事件,分配或释放系统资源,并驱动CF/SD设备;另一方面,要将存储卡的热插拔事件及时准确的通知应用层。应用层则根据热插拔事件做出相应的处理。采用定时器探测存储卡的热插拔事件,如下表所示。

表1 存储卡热插拔事件

REG_FLAGDETECT_FLAG事件11存储卡卡拔出10无事件,存储卡卡在插槽中00存储卡插入01无事件,存储卡卡不在插槽中

ReWorks操作系统中,创建CF/SD驱动分两步:初始化CF/SD设备驱动和创建设备文件系统。初始化CF/SD设备驱动函数名称为ideDrv,建立设备文件系统函数名称为usrIdeConfig。下面是部分源代码:

If(ideDrv(IDE_INT_VEC,IDE_INT_VEC,type)==ERROR)

    printf(“Could not initialize. ”);

    dosFsInit(NUM_DOSFS_FILES);

    if(usrIdeConfig(drive,fileName)==ERROR)

     ……

    设备驱动程序建立后,应用程序就可以使用基本I/O函数访问CF/SD卡,这些函数包括:create(),open(),read(),write()和remove()函数,方便了在嵌入式系统存储数据文件。

将驱动程序打包进ReWorks系统BSP,编译系统内核,烧写到龙芯手持式计算机平台上,将CF和SD卡分别插入相应插槽即可。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号