本申请实施例涉及信息处理领域,尤指一种主机与外接设备通信的方法、存储介质和电子装置。
背景技术:
sdio(securedigitalinputandoutput,安全数字输入输出)协议与sd(securedigital,安全数字)协议相比,提供了更精简的通信协议以及更快速访问设备内寄存器的指令(命令提示符cmd52和cmd53),但是sdio的协议指令的接口通常只在内核中可以访问,用户层无法直接访问该接口。
为了实现用户层直接访问该sdio接口,在相关技术中,sdio设备厂家需要针对不同的平台去适配该平台对应的驱动,其中该驱动需要与主机平台厂家合作和支持,并在该主机平台的操作系统上提供用户空间访问该驱动的权限;否则,将无法实现安装驱动的权限和用户空间的访问权限的目的。
由于上述过程需要多方配合,导致设备厂商的维护成本增加,耗时较长。
技术实现要素:
为了解决上述任一技术问题,本申请实施例提供了一种主机与外接设备通信的方法、存储介质和电子装置。
为了达到本申请实施例目的,本申请实施例提供了一种主机与外接设备通信的方法,包括:
获取控制信息,其中所述控制信息用于使主机上的操作系统识别本设备为存储设备;
在连接所述主机后,利用所述控制信息向所述主机宣告本设备为存储设备;
在所述主机上的操作系统成功识别本设备为存储设备后,对所述操作系统发送的读写指令进行响应。
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文所述的方法。
一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文所述的方法。
上述技术方案中的一个技术方案具有如下优点或有益效果:
通过获取控制信息,其中所述控制信息用于使主机上的操作系统识别本设备为存储设备,在连接所述主机后,利用所述控制信息向所述主机宣告本设备为存储设备,在所述主机上的操作系统成功识别本设备为存储设备后,对所述操作系统发送的读写指令进行响应,使sdio设备被操作系统识别为存储设备,从而实现基于存储设备的访问方式对sdio设备进行访问的目的,无需针对平台安装额外的驱动,降低维护成本,缩短维护耗时。
本申请实施例的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请实施例的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本申请实施例技术方案的进一步理解,并且构成说明书的一部分,与本申请实施例的实施例一起用于解释本申请实施例的技术方案,并不构成对本申请实施例技术方案的限制。
图1为本申请实施例提供的主机与外接设备通信的方法的流程图;
图2为本申请实施例提供的sdio设备的ram中映射的存储空间的示意图;
图3为本申请实施例提供的操作系统访问sdio设备的示意图;
图4为本申请实施例提供的主机访问sdio设备的方法的流程图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请实施例的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请实施例中的实施例及实施例中的特征可以相互任意组合。
用于其他具备存储器功能的接口如:usb或sd等。
图1为本申请实施例提供的主机与外接设备通信的方法的流程图。如图1所示,图1所示方法,包括:
步骤101、获取控制信息,其中所述控制信息用于使主机上的操作系统识别本设备为存储设备;
在一个示例性实施例中,该外接设备为具备存储器功能的设备。
在一个示例性实施例中,该控制信息中携带本设备为存储设备的指示信息,从而将本设备模拟成存储设备。
步骤102、在连接所述主机后,利用所述控制信息向所述主机宣告本设备为存储设备;
在一个示例性实施例中,外接设备可以通过主机提供的接口与主机连接,该接口可以为sd接口或usb接口。
在一个示例性实施例中,可以将控制信息发送至操作系统,使得该操作系统根据该控制信息进行设备的识别操作。
步骤103、在所述主机上的操作系统成功识别本设备为存储设备后,对所述操作系统发送的读写指令进行响应。
在一个示例性实施例中,由于操作系统将本设备识别为存储设备,因此,可以沿用存储设备的访问机制对本设备进行读写操作,即,只需操作系统为用户提供具备访问存储设备的权限即可,无需安装额外驱动。
本申请实施例提供的方法,通过获取控制信息,其中所述控制信息用于使主机上的操作系统识别本设备为存储设备,在连接所述主机后,利用所述控制信息向所述主机宣告本设备为存储设备,在所述主机上的操作系统成功识别本设备为存储设备后,对所述操作系统发送的读写指令进行响应,使sdio设备被操作系统识别为存储设备,从而实现基于存储设备的访问方式对sdio设备进行访问的目的,无需针对平台安装额外的驱动,降低维护成本,缩短维护耗时。
下面对本申请实施例提供的方法进行说明:
在一个示例性实施例中,所述控制信息包括用于声明本身具备存储能力的协议指令,其中所述协议指令符合与主机连接的接口对应的通信协议;
所述利用所述控制信息向所述主机宣告本设备为存储设备,包括:
在执行本设备的通信协议初始化时,向所述操作系统发送所述协议指令。
发明人发现,操作系统通常不会限制用户空间对存储设备的访问权限,在接口的通信协议上增加协议指令,使其成为存储能力的外接设备,在未适配过驱动的系统上通过存储设备的协议指令访问,实现免驱动访问的目的。
以主机访问sdio设备为例进行说明,由于sdio接口和sd接口在硬件上完全兼容,因此在原有的sdio通信协议上增加部分sd指令,该sd指令用于在初始化流程中声明具备存储能力,使主机系统可以将其识别为存储设备,使其成为存储能力的sdio设备,即sdiocombo设备。在未适配过驱动的系统上通过sd协议的指令访问实现免驱动访问,同时也保留了对适配过驱动的系统上,通过sdio协议指令访问获得更好的性能。
通过在外接设备添加协议指令宣告该设备为存储设备,实现使主机的操作系统识别外接设备为存储设备,对于现有的外接设备不需要修改硬件,仅需要对固件进行更新即可实现。
在一个示例性实施例中,所述利用所述控制信息向所述主机宣告本设备为存储设备之前,所述控制信息还包括:
获取磁盘格式信息;
在检测到本设备上电后,将磁盘格式信息存储到本设备的随机存取存储器(randomaccessmemory,ram)中,并基于所述磁盘格式信息在ram中映射成对应的存储空间。
以磁盘格式为fat32格式为例进行说明,在实际应用中除了以fat32格式访问外,也通过修改预存的磁盘格式信息,变为其他格式的存储设备,如:fat16,exfat等。
在sdio设备中,预存磁盘格式信息,其中磁盘格式信息可以包括主引导记录(mbr,masterbootrecord)、分区引导扇区dbr、fat表和根目录。该预存磁盘格式信息可根据用户需求定制。在sdio设备上电时,将磁盘格式信息读取到ram中,使主机的操作系统能够正常识别并读写该ram上的数据。主机端操作系统识别ram上的磁盘格式信息后,会将该设备识别为已格式化过的存储器。
使用ram模拟nandflash成为“存储设备”,对于现有的外接设备不需要修改硬件,仅需要对固件进行更新即可实现;另外,采用ram执行存储空间的映射,从而使得操作系统读写的磁盘数据的介质为ram而非flash,因此不存在擦写寿命限制,降低了硬件的成本。
在一个示例性实施例中,所述ram映射的存储空间包括至少一个磁盘分区,每个磁盘分区对应一个或至少两个存储单位的存储地址;其中在磁盘分区对应至少两个存储单位的存储地址时,至少一个存储单位的存储地址为物理地址,剩余存储单位的存储地址为虚拟地址;其中,全部磁盘分区对应的虚拟地址映射到一个预置的ram区域。
外接设备利用ram基于所述磁盘格式信息执行映射操作,并对相应的地址分别映射到物理地址和虚拟地址,使得该ram中仅部分存储空间为实际存在的物理地址,其他的fat表区域和数据区均为虚拟地址。
图2为本申请实施例提供的sdio设备的ram中映射的存储空间的示意图。如图2所示,图2中磁盘分区fat1、fat2、数据区均有物理地址和虚拟机地址,其中磁盘分区fat1和fat2中第1扇区、数据区中的第1簇和第2簇,均为物理地址,剩余的存储空间均为虚拟地址。
从图2所示的存储空间中可以看出,在操作系统进行存储空间的识别时,可以使操作系统将该设备的存储空间识别成大于实际空间,通过非对称方式映射fat表和数据区,比起映射完整的存储区域,更加节省ram空间,降低了硬件需求。
在一个示例性实施例中,所述ram映射的存储空间包括数据区,其中所述数据区包括:
第一区域,为物理地址对应的存储空间,用于为所述操作系统提供写入指令数据的地址空间和读取响应数据的地址空间,作为操作系统提供给用户的标准读写接口;
第二区域,为数据区中虚拟地址在ram中映射的物理地址所对应的存储空间。
图3为本申请实施例提供的操作系统访问sdio设备的示意图。如图3所示,sdio设备通过ram中保存的磁盘格式信息和数据区与操作系统进行指令数据的交互;且该虚拟地址在被访问时会重复映射到一个预置的ram区域。
操作系统可以根据ram存储空间,为用户封装一组针对指定地址作为标准文件读写接口,例如windows系统下的fread和fwite,linux下的read和write。在图3所示的存储空间中,可以将图3中数据区1对应的用于写入指令数据的地址空间和用于读取响应数据的地址空间,使得用户能够访问该硬件功能。
在ram映射的存储空间中包括虚拟地址时,基于上述两个数据区的划分,实现高效管理外接设备实际存储空间与ram映射的存储空间的对应关系的目的。
在一个示例性实施例中,在对所述操作系统发送的读写指令进行响应之前,所述方法还包括:
获取写入到ram中的数据对应的访问地址;
判断所述访问地址是否为物理地址,得到判断结果;
如果所述判断结果为所述访问地址是物理地址,则将数据存储到ram中第一区域中对应的物理地址中;
如果所述判断结果为所述访问地址不是物理地址,则如果所述判断结果为所述访问地址不是物理地址,则发送ram预置数据以提示用户该区域不是设备的有效数据区;或发送通知信息指示访问地址不存在。
其中操作系统发送的读写指令可以为cmd17、cmd18、cmd24或cmd25。
在操作系统读写数据区1时,通过访问根目录和fat表计算出要读/写的数据地址,由于数据区1对应的磁盘格式信息和数据区1在外接设备的ram的物理地址上真实存在,因此系统可以正常的读写该区域,则将数据存储到ram中第一区域中对应的物理地址;反之,如果操作系统在访问数据区2,则返回预置数据,其中该预置数据指示访问地址不存在。
基于上述判断流程,可以保证外接设备与操作系统之间的指令交互操作中存储空间读写的正常运行。
在一个示例性实施例中,所述第二区域对应的物理地址中预先存储有所述通知信息;
所述发送通知信息,包括:
读取所述第二区域中物理地址存储的数据,得到所述通知信息;
发送所述通知信息。
可以在该第二区域预先写入访问失败或地址不存在等信息,在主机访问ram中处于不存在的地址区域时,表示访问的地址均为虚拟地址,则将该虚拟地址映射到所述第二区域,读取该第二区域内的预置数据,将所述预置数据返回给主机。
在一个示例性实施例中,所述ram映射的数据区包括用于存放指令数据的存储空间和用于存放响应数据的存储空间;
所述对所述操作系统发送的读写指令进行响应,包括:
在检测到有数据写入ram中的数据区后,如果数据存放的地址为预设的存放指令数据的地址,则将所述数据作为指令进行解析;
根据解析结果,获取所述解析结果对应的响应数据;
将所述响应数据存储到预设的用于存放响应数据的地址中。
从图2中数据区第1簇和第2簇,以及图3中的第一数据区,可以看出,ram映射的数据区包括用于存放指令数据的存储空间和用于存放响应数据的存储空间。在有数据写入ram数据区中用于存放指令数据的地址时,将其作为指令进行解析处理,实现对应的硬件操作;同理,将需要发送给主机的数据存储到ram数据区中用于存放响应数据的地址中,主机可从该地址读取到设备发给主机的数据。
下面以本申请实施例提供的方法进行说明:
本申请实施例提供一种主机访问sdio设备的方法,该方法可以在不改变sdio设备原有硬件设计的情况下,实现在多种操作系统下,不安装额外驱动即可实现用户层对设备进行访问。
图4为本申请实施例提供的主机访问sdio设备的方法的流程图。如图4所示,图4所示方法包括:
步骤401、上电初始化;
sdio设备可以通过主机的接口与主机相连,实现上电初始化。
步骤402、读取磁盘格式信息到ram中;
在读取该ram后,在ram中实现存储空间的映射;
步骤403、通信协议初始化;
在该步骤中,可以通过向主机发送sd指令,宣告本设备具备存储能力,使得主机的操作系统将本设备识别为存储设备;
步骤404、判断接收的指令是否为读写指令;
如果接收的指令不是读写指令,则执行步骤405,按照通信协议规定执行处理,并返回响应。
如果接收的指令不是读写指令,则执行如下步骤:
步骤406、判断访问的地址是否为物理地址;
如果是物理地址,则执行步骤407,执行对应物理地址的控制操作,再执行步骤405;
如果是虚拟地址,则执行步骤408,执行对应虚拟地址的控制操作,再执行步骤405;
以图3所示的应用场景为例,操作系统在读写数据区1时,会通过访问根目录和fat表计算出要读/写的数据地址,由于数据区1对应的磁盘格式信息和数据区1在sdio设备的ram的物理地址上真实存在,因此系统可以正常的读写该区域,sdio设备在收到主机写入数据区1中用于保存指令数据的地址时,会将写入该区域的数据进行解析,实现对应的硬件操作,并且将需要发送给数据的数据写入数据区1中用于保存响应数据的地址,主机可通过读取该地址的数据,获得sdio设备发送给主机的数据。
操作系统在访问数据区2时,读取则返回预置的固定数据,写入则返回失败或其他预置参数。
本申请实施例提供的方法,通过sdio接口与sd接口在硬件上完全兼容的特性,在不改变sdio设备原有硬件设计的情况下,提出一种针对不同操作系统平台,只需要用户空间具备访问存储器的权限,不用安装额外驱动就可以访问sdio设备。
综上所述,本申请实施例提供的方法具有如下优势,包括:
1、通过在外接设备添加协议指令并使用ram模拟nandflash成为“存储设备”,实现使主机的操作系统识别外接设备为存储设备,对于现有的外接设备不需要修改硬件,仅需要对固件进行更新即可实现。
2、设备通过操作预存的磁盘格式信息,并对相应的地址分别映射到物理地址和虚拟地址,可以使操作系统将该设备的存储空间识别成大于实际空间,通过非对称方式映射fat表和数据区,比起映射完整的存储区域,更加节省ram空间,降低了硬件需求;
3、采用ram执行存储空间的映射,从而使得操作系统读写的磁盘数据的介质为ram而非flash,因此不存在擦写寿命限制,降低了硬件的成本;
4、用户空间使用操作系统的标准读写接口,通过对指定地址读写来和设备通信,实现对映射的存储空间的访问,实现免驱动访问外接设备的方案;
5、仅需要操作系统提供访问存储设备的权限即可,无需安装驱动,降低了设备的维护成本。
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文任一项中所述的方法。
一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文任一项中所述的方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。