微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于单片机的大容量数据存储技术的应用研究

基于单片机的大容量数据存储技术的应用研究

时间:01-31 来源:互联网 点击:

1A1,将CPU发来的指令变为相应的USB数据流,传送给指定的USB设备进行相应的操作。图1为具有USB主机功能的数据采集系统原理框图。数据采集的固态存储设备采用现在应用非常普遍的U盘或移动硬盘,这些设备可移动性强,均采用标准的USB总线接口,通用性非常好。

图1具有USB主机功能的数据采集系统原理框图

在本例中,软件系统的设计主要涉及五个部分,分别为软件主程序、数据采集部分、数据处理部分、数据的现场大容量存储部分、数据的GSM通信部分。整个系统是在IAR Embedded Workbench的软件环境以及ScomAssistant调试助手下实现的,程序的实现采用C语言。主程序的代码为:

void main(void)

{

SYSInit();

TimeTaskInit();

USBInit();

while(1){

TimerTaskManage();

USBTaskManage();

}

}

SYSInit()实现系统初始化工作,主要对单片机基础参数的设置和定义各个I/O口的工作方式;TimeTaskInit()中先进行单片机定时中断的配置,再将定时任务的所有标志清零初始化,为定时中断处理做准备。USBInit()是对USB事务进行硬软件初始化,先检测和配置USB主控芯片ISP1161A1,再初始化USB软件环境。

早期的U盘对初始化要求不高,有的甚至不需要驱动就可直接对扇区进行读写,所以现有大部分USB主机系统一般都能实现对这些U盘的读写。但随着产品不断更新,初始化信息不能完全获取使得一些不同的USB装置只能针对不同U盘。本实验证明,初始化过程完成后再解决了时序问题,就可以解决大部分U盘的读写。

3.初始化分析

正如前面所述,目前社会上很多人只能完成针对某些特定U盘的读写,本实验中的重点就是先完成U盘的初始化,让单片机先能认识大多数U盘,然后对它们进行批处理方式的读写,再从U盘或移动硬盘加载文件系统,最后完成对U盘或移动硬盘在文件级别上的读写。

当主机检测到一个设备已经连接时,就会自动识别所连接的设备,这个过程称为设备枚举(Device Enumeration).设备枚举使得主机的设备驱动程序能够与USB设备之间进行数据交换.在这个过程中,USB设备需要响应主机的标准设备请求并把描述符传送给主机,这些描述符包括设备描述符,配置描述符,接口描述符和端点描述符等42]。在没有对U盘完成初始化之前,单片机只能看到U盘的端点0,其他端点对于单片机来说是透明的。因此,我们只能从端点0即控制通道中对U盘进行配置,读进U盘的必要的配置信息后再对U盘的各端点进行配置。一般的传输数据大小不为0的控制传输的过程可分为3个阶段[3]。

第一阶段,是控制传输的建立阶段。

在这阶段里,我们首先要建一个用于建立控制传输事务的PTD数据,然后往U盘发送。

这里有一个需要注意的地方,在每次用于发送的函数执行以后,要加上一定的延时,等待U盘对发过来的指令进行处理。我们要读取描述表,就要向U盘发送 USB设备的标准设备请求命令。比如获取U盘描述表的USB标准设备请求命令为“0680 0100 0000 0012”。把上述命令写入PTD数据的负载区,然后发送,延时等待。

第二阶段,是数据阶段。

标准设备请求命令发送后,U盘就会把设备描述表发过来,这时我们就准备接收了。

在这里有一个问题要解决,就是最大包长度的问题。每个U盘在0通道里都规定了一个最大包的长度,可以是8,16,32或64字节。举个例子:这次要传输的描述表的长度为18字节。假设U盘的最大包长度为8字节,那就分三次接收,8+8+2字节。若最大包长度为16字节,就分两次接收,16+2字节。如果最大包长度为32字节或者64字节,就可以一次完成。为了得到这个U盘的最大包长度,可以进行试探,然后用一个公共变量把最大包长度记录下来。判断原理如下:先建立一个大小为8字节的接收区进行接收,然后监视PTD头的COMPLETE CODE字段(参考1161芯片中PTD数据的建立过程),如果该字段出现1000(二进制)的错误,就证明最大包长比8大,然后再建立16字节的接收区接收,如果还出现1000的错误的话,就再用稍大的包进行尝试,直到COMPLETE CODE字段出现0000为止。这样,就得出了该U盘0通道的最大包长度。下图2总结了读入描述表的过程。


第三阶段,是状态阶段。

在状态阶段里,单片机要向U盘发送一个空数据负载的PTD数据,以向U盘汇报此次控制传输已经完成。

配置表的读取过程和描述表过程差不多,这里就不再加以叙述了。在完成描述表和配置表的读取以后,就可以往U盘发送标准设备请求命令SET CONFIG对U盘进行配置了,至此,枚举过程结束。到此为止,本例单片机对U盘的初始化过程也已基本完成。

实验证明,此方案确实解决了大部分U盘的读写,但由于USB单片机系统对时序要求很严,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top