存储介质的数据读取方法和设备的制造方法_2

文档序号:8543445阅读:来源:国知局
定所述地址偏移量所指向的所述mtd分区中的块,读取确定的块中存储的预制内容。
【附图说明】
[0040]图1为本发明实施例提供的方法流程示意图;
[0041]图2为本发明实施例的数据读取流程示意图;
[0042]图3为本发明实施例提供的设备结构示意图。
【具体实施方式】
[0043]为了解决手持设备中的存储介质由于无法加载fat文件系统而无法作为USB挂载介质与上位机进行通信的问题,本发明实施例提供一种存储介质的数据读取方法。该存储介质包含至少一个存储器工艺设备(mtd)分区,每个mtd分区包含至少一个块,每个块包含至少包含一个页。
[0044]参见图1,本发明实施例提供的存储介质的数据读取方法,包括以下步骤:
[0045]步骤10:手持设备在通过USB与上位机连接后,获取该手持设备的存储介质中存储有预制内容的mtd分区的地址,根据该地址信息得到该mtd分区中存储有预制内容的块的信息,具体可以包括存储有预制内容的块的个数;
[0046]步骤11:手持设备接收上位机的查询命令,将该块的信息上报给上位机;
[0047]步骤12:手持设备接收上位机的读取命令,该读取命令中携带上位机根据该块的信息生成的逻辑块地址(LBA)信息,确定该LBA信息所指向的存储有预制内容的mtd分区中的块,读取确定的块中存储的预制内容,并将读取的预制内容通过USB传输给上位机。
[0048]较佳的,在手持设备通过USB与上位机连接后、且获取该手持设备的存储介质中存储有预制内容的mtd分区的地址之前,手持设备在上位机对该手持设备的枚举过程中通知上位机该手持设备的设备类型为只读类型。该只读类型可以为光盘cdrom等。
[0049]具体的,获取该手持设备的存储介质中存储有预制内容的mtd分区的地址,根据该地址信息得到该mtd分区中存储有预制内容的块的信息,具体实现方法可以如下:
[0050]手持设备的内核层向用户层上报USB插入事件,用户层接收到该USB插入事件后,从维护的mtd分区列表中读取存储有预制内容的mtd分区的地址,并将读取到的mtd分区的地址发送给内核层;
[0051]内核层接收用户层发送的所述mtd分区的地址,执行对该地址对应的mtd分区的读操作,得到所述mtd分区中存储有所述预制内容的块的信息。
[0052]较佳的,步骤11中手持设备将块的信息上报给上位机的同时,还将存储介质的页的信息发送给上位机,相应的,步骤12中手持设备接收到的读取命令中还可以携带上位机根据页的信息生成的需要读取的数据量的信息;
[0053]那么,步骤12中手持设备在将读取的预制内容通过USB传输给上位机后,可以根据该数据量的信息判断是否已传输上位机需要读取的数据量,若是,则向上位机发送读操作完成命令,否则,继续进行预制内容的读取,并将读取的预制内容通过USB传输给上位机,直到传输给上位机的数据量达到上位机需要读取的数据量。
[0054]较佳的,在步骤10中手持设备在通过USB与上位机连接之前,手持设备可以获取该手持设备的存储介质中存储有预制内容的mtd分区的地址,对该地址对应的mtd分区进行扫描,根据扫描结果确定该mtd分区中的坏块,并记录坏块的信息;
[0055]相应的,步骤12中手持设备在确定LBA信息所指向的mtd分区中的块之后、并且读取确定的块中存储的预制内容之前,可以根据记录的坏块的信息,判断该LBA信息所指向的块是否为坏块;
[0056]在判断该LBA信息所指向的块不为坏块时,读取确定的块中存储的预制内容;
[0057]在判断该LBA信息所指向的块为坏块时,确定该LBA信息所指向的块的下一个未被标记为坏块的块,读取该块中存储的预制内容,并将读取的预制内容通过USB传输给上位机。
[0058]本方法中,存储介质可以为nand flash或嵌入式多媒体存储卡(EmbeddedMultiMediaCard, EMC)等。
[0059]具体实施例如下:
[0060]本实施例中,需要预先将预制内容烧写到nand flash中的相关mtd分区中,并将该mtd分区的地址信息写入mtd分区列表中。如图2所示,后续流程如下:
[0061]步骤20:手持设备开机启动后,从维护的mtd分区列表中读取该手持设备的nandflash中存储有预制内容的mtd分区的地址,对该地址对应的mtd分区进行扫描,得到并记录该mtd分区中的坏块的信息,具体可以将坏块的信息记录在静态数组中;
[0062]这里,对mtd分区进行扫描,得到并记录该mtd分区中的坏块的信息,具体实现可以为:通过mtd设备的坏块管理函数对当前分区的每个块进行扫描,如果当前块为坏块,则将此块的地址偏移量增加到一个坏块数组里,用以在后续读操作时判断当前要读取的块是否为坏块。
[0063]步骤21:手持设备通过USB与上位机连接后,上位机建立与USB之间的数据传输通路;手持设备的内核层通过USB通知上位机该手持设备的设备类型为只读类型,比如为cdrom ;上位机执行对该手持设备的枚举过程;
[0064]步骤22:手持设备将mtd分区的地址作为介质挂载点进行加载,具体的,手持设备的内核层向用户层上报USB插入事件,用户层接收到该USB插入事件后,从维护的mtd分区列表中读取存储有预制内容的mtd分区的地址,并将读取到的mtd分区的地址发送给内核层;
[0065]步骤23:内核层接收用户层发送的mtd分区的地址,执行对该地址对应的mtd分区的读操作,得到该mtd分区中存储有预制内容的块的个数;存储有预制内容的块的个数会预先被保存在该mtd分区的第一个块中;
[0066]内核层对读容量命令(Read capacity Command)和读地址命令(Read TocCommand)这两条命令的上报内容进行初始化,以使上位机获得nand flash的正确的页大小和存储有预制内容的块的个数。Read capacity Command是代码为0x25的小型计算机系统接口 (small computer system interface, scsi)命令,Read Toc Command 是代石马为0x43的scsi命令。
[0067]初始化完成后,内核层可以向上位机发送初始化完成的通知;
[0068]这里,Read capacity Command的上报内容主要包括存储有预制内容的块的个数和nand flash的页大小。
[0069]Read Toc Command的上报内容主要包括逻辑块地址(logical blockadressing, LBA)以及分秒帧(Minute, Second, Frame,MSF)信息。初始化后的LBA的值等于mtd分区中存储有预制内容的块的个数;MSF信息为将mtd分区中的预制内容作为媒体进行播放的总播放时长信息,总播放时长信息包括帧分、秒、帧信息。
[0070]步骤24:上位机向手持设备依次发送Read capacity Command和Read TocCommand这两条命令;
[0071]手持设备接收到Read capacity Command后,将初始化后的mtd分区中存储有预制内容的块的个数以及页大小的信息上报给上位机;
[0072]手持设备接收到Read Toc Command后,将初始化后的LBA信息和MSF信息上报给上位机。
[0073]步骤25:上位机获得相关信息后,向手持设备发送读取命令,
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1