USBHost总线解决设计方案_第1页
USBHost总线解决设计方案_第2页
USBHost总线解决设计方案_第3页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、USB Host总线解决方案ARM读写U盘/移动硬盘模块说明书目 录1. 概述32. 应用33. USB 简介34. 硬件介绍44.1 CPU 结构44.2管脚定义44.3接口使用85. 工作指示灯说明96. 软件开发1.06.1 概述.1.0.6.2功能实现 .12.数据结构12.代码的实现1.9.系统命令/响应消息196.222系统命令/响应及其数据部分2.16.223用户系统创建文件及其实现过程 2 2用户系统写文件的过程实现26INTR触发用户系统外部中断服务程序327. 说明32.1概述ARM 读写U盘/移动硬盘模块 USB Host总线解决方案(也即 Master )作为一个 模块

2、嵌入到应用方的系统中,通过总线方式实现与应用方系统的通信。该解决方案实现了将应用方基于文件系统级操作,将命令通过总线写入 Master模块的双口 RAM的指定地址,在完成相应的操作后,再从双 RAM的指定地址读出相应的响应, 以此实现通过Master模块对USB接口磁盘进行访问。用户对USB磁盘的访问总体上分为 三大类:磁盘操作(如打开 /关闭磁盘、读取磁盘信息等)、目录操作(创建/删除目录、Dir 等)和文件操作(打开/关闭文件、读/写文件等)。具体操作见USB Host解决方案HostModule 系统协议 v2.0。用户对Master模块的使用主要包括 2个方面:硬件说明和软件开发。2.

3、 应用ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案适用于工业中的数据采集, 如:绣花工业中的花样采集等等。3. USB简介因为本产品用到的是移动硬盘,而目前市场上移动硬盘基本都是以USB接口而进行通信的,所以简单介绍 USB。USB( Un iversal Serial Bus )是由 Compaq、HP、In tel、Luce nt (朗讯)、Microsoft 、NEC和Philips七家公司联合推出的新一代标准接口总线。该总线是一种连接外围设备的机外总线,最多可连接 127个设备,为微机系统扩充和配置外部设备提供了方便。USB规有多种版本,最早的版本是1994年11月推

4、出的USB 0.7版。1996年1月推出了标准版本 USB 1.0,目标是为中低速的外围设备提供双向、低成本的总线,数据传输率最高为12Mb/s。但是随着微机系统及其外设性能和功能的增强,需处理的数据量越来越大,2000年4月又推出了新的USB规一USB 2.0。在新版本中,增加了一种 480Mb/s的数据传输率,以满足 日益复杂的高级外设与 PC机之间的高性能连接需求。USB2.0是USB的自然升级,它在保留原有 USB规的基础上又提供了更高的带宽,并 且与现有的外设保持完全兼容。USB还有一个显著优点就是支持热插拔,也就是说在开机的情况下,你也可以安全地连接或断开USB设备,达到真正的即插

5、即用。今后,USB将取代当前PC上的串口和并口。4. 硬件介绍ARM读写U盘/移动硬盘模块一一USB Host总线解决方案的硬件主要为 ARM 系列 主控芯片,NOR flash,双口 RAM,SDRAM,它是通过双端口 RAM,直接以总线方式与用 户系统相连。就用户系统而言,ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案表现为一个外置的 RAM,而该RAM中的部分区域被用作协议命令和数据的交互、部分 区域保留和作用双方同步信息交互。4.1 CPU概述ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案采用的是 ARM核来控制系 统和处理各种不同的数字信号。4KB数据

6、存储和4KB的指令存储。工作方式是以文件形式工作。4.2管脚定义ARM读写U盘/移动硬盘模块一一USB Host总线解决方案模块提供了与用户相关的三个接插接口,分别 J1、J6和USB-B1。(J7是为接JTAG仿真用,用户可以不用关心。)实物图如图1和图2所示,分别说明如下。J7*1OOfl Taa o0-c00 ocJ1-图1 ARM 读写U盘/移动硬盘模块 USB Host总线解决方案实物图USB-B1-图2转接王1型实物图J1 与用户系统总线接口用于通过访问双口 RAM实现与用户系统交互的接口,如图3所示。图3 Master J1 接口示意图该接口 5个管脚定义如表1所示。管脚号描述管

7、脚号描述管脚号描述1INTR13AR1125DR42BUSYR14AR1026DR53AR115AR1327DR24AR016AR1228DR35AR317AR1529DR06AR218AR1430DR17AR519SEMR31GND8AR420CER32VCC+5V9AR721RDR33GND10AR622WRR34VCC+5V11AR923DR612AR824DR7表1 Master J1 接口定义上表中,有关管脚定义如下:1. AR0 AR15 :地址总线;2. DR0 DR7 :数据总线;3. INTR、BUSYR、SEMR、CER、RDR、WRR :系统控制线;INTR为双端口 RA

8、M向用户MCU提供的外部中断;BUSYR用于双端口 RAM忙指示(目前未使用);SEMR用于信号量同步,需要上拉到高电平;CER与SEMR用于实现片选;RDR与WRR分别用于读写操作。5.33 与 34 分别为 GND 和 VCC-5V。有关连接方式见参考电路图Eval Sch.pdf 。在本系统的实现中,目前使用到的管脚是:INTR、CER、SEMR、RDR和 WRR。 BUSYR目前未使用,可以不接。特别地,建议用户将INTR连接到用户系统 MCU的外部中断管脚,并使用外部中断。注意,使用中需要将SEMR拉高(始终拉高即可)以确保读取操作正常。J6 2.00mm 间距的 USB 接口J6的

9、接口定义与 USB-B1是完全相同的,设置 J6只是针对用户无法使用板上 USB母 插座时,将USB线连接到用户板上,由用户在自己的板上决定 USB母插座的位置(或者使 用连接直接连接到固定在面板上的 USB母插座上)。USB-B1 标准 USB 接口USB-B1为标准USB接口,用户焊接A类USB母插座。用户可以根据需要 (用户产品 的外壳定义等)决定是否使用该插座。如果不使用该插座可以将USB-B1悬空,通过J6将USB接口连接到用户板上。4.3接口使用ARM读写U盘/移动硬盘模块一一USB Host总线解决方案通过双口端口RAM,直接通过总线与用户的单片机系统相连。因此,就用户单片机系统

10、而言,ARM读写U盘/移动硬盘模块 USB Host总线解决方案表现为一个外置的RAM,而该RAM中的部分区域不能使用、部分区域被用作协议命令和数据的交互,剩余的部分可以由用户自行控制使用。有关双端口 RAM中区域的划分如图所示:其基地址为0x40000000.0x0008Command/ResponseDataBuf(65520 Bytes)协议命令和数据区域消息交互区域0xFFF80xFFFE0xFFFF保留区域图4 ARM 读写U盘/移动硬盘模块USB Host总线解决方案上双口 RAM存区域分配软件开发在双端口 RAM中,区域分配如下:0x0000-0x0007共8子节用于存放系统命令

11、/响应;0x0008-0xFFF7共65520字节用于存放数据部分;0xFFF8-0xFFFD共6字节保留;0xFFFE-0xFFFF区域的2个字节被用作系统协议交互指示,用户不可用于数据存放。用户系统与ARM读写U盘/移动硬盘模块一一USB Host总线解决方案系统的协议交互分为2种:命令和响应。命令由用户系统发往 ARM读写U盘/移动硬盘模块一一 USB Host 总线解决方案系统,而响应为相反方向,由 ARM读写U盘/移动硬盘模块一一 USB Host 总线解决方案发往用户系统。命令和响应都有可能有数据部分(也可以没有数据部分,见HostModule系统协议v2.0)。命令的数据部分存放

12、于CommandData中。5. 工作指示灯说明ARM读写U盘/移动硬盘模块一一USB Host总线解决方案模块提供了 6个LED : D1 D6,来指示系统状态。其中 D6为电源指示,系统通电后, D6即点亮。D5为系统调 试用。D1 D4联合指示系统状态。目前只使用了 D1与D2。D3与D4尚未定义当系统加电时,首先是D6指示灯点亮,表明系统已经加上电了,紧跟着 D1与D2灯同时被点亮,这时系统正在进行自检和初始化, 完成后,D1与D2同时关闭。 该自检过程很快,应当在300ms以完成,如果D1与D2同时点亮时间超过1s即 说明Master板出现故障。当系统正常启动完成之后,再插上 USB

13、磁盘,如果磁盘被成功识别,则 D1灯被 点亮,并且保持点亮。直到把 USB磁盘拔出才关闭。如果盘不能被识别,则D1灯不停的闪烁。当串口有命令成功发给 ARM读写U盘/移动硬盘模块一一 USB Host总线解决方 案模块时(ARM读写U盘/移动硬盘模块一一USB Host总线解决方案成功接收 并识别出命令),D2将被点亮,然后ARM读写U盘/移动硬盘模块一一 USB Host 总线解决方案执行该命令,命令执行完成,发回响应后,D2关闭。由于系统对不同的命令执行时间不同,D2点亮的时间长短也不定。系统正常启动后(上述自检完成后),插入USB磁盘,当系统检测到 USB磁盘中存在合法的升级文件时,系统

14、将不会点亮D1,而是点亮 D2,并开始升级,待升级完成后,(如何升级见Master使用指南)关闭D2。6. 软件开发6.1概述ARM读写U盘/移动硬盘模块一一USB Host总线解决方案系统是一个完整的单片机系统,该系统通过双端口 RAM实现与用户单片机系统的命令和数据通信。如下图所示:图5 ARM 读写U盘/移动硬盘模块USB Host总线解决方案与用户系统集成示意ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案系统工作于命令/响应方式下(在协议中响应也被称为命令),由用户系统发出命令,ARM读写U盘/移动硬盘模块一USB Host总线解决方案系统在根据该命令进行相应处理后,向

15、用户系统返回相关的响 应,该命令即完成。一个命令必须在前一命令完成并返回响应后才能再发送给ARM读写U盘/移动硬盘模块一一USB Host总线解决方案系统。这一过程根据需要重复进行,以此实 现整体系统的工作。有关协议命令的定义参见HostModule 系统协议v2.0。集成后的系统工作方式如下:用户系统将命令写入双端口RAM的Comma nd 区域。如果有数据则将数据写入DataBuf区域。向ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案端发送命令消息。ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案收到命令消息后,即 处理Comma nd 区域的命令。ARM读写

16、U盘/移动硬盘模块一一 USB Host总线解决方案完成命令后,将响应写入Response 域。如果有数据则将数据写入DataBuf区域。向用户系统发送响应消息。至此,一次命令执行完毕。下面的实现就是基于上述过程来说明的。系统命令/响应消息用于在用户系统或 ARM读写U盘/移动硬盘模块一一 USB Host总 线解决方案系统将要发出的命令或响应及相应数据准备好后,通过对方(Master或用户系统)命令或响应已经准备完毕,可以开始执行的消息。该消息通过向双端口 RAM的OxFFFE或OxFFFF地址写数据来完成。该消息通过中断 方式来实现,即:对用户系统而言,当向OxFFFE写入数据时,即为通知

17、 ARM读写U盘/移动硬盘模块USB Host总线解决方案有命令待执行 (ARM读写U盘/移动硬盘模块一一 USB Host 总线解决方案系统会产生一个中断) 。当ARM读写U盘/移动硬盘模块一一 USB Host总线 解决方案系统完成命令后, 准备好响应,然后会在OxFFFF处写一个字节,这时,会导致INTR 拉低,由此产生一个外部中断, 用户系统即可通过读取 0xFFFF字节以清除该中断,并进一 步读出响应,进行响应处理。 目前系统定义:向 0xFFFE写入和从0xFFFF读出的值都是 0x02。6.2功能实现数据结构协议命令和响应的结构如下:typedef _packed structU

18、INT8 TypeCode;/* 类型码 */UINT8 CommandCode;/* 命令码 */UINT8 Data6;/* 数据部分 */BM_Comma nd;说明:1. 结构体之间是相互连接紧密的,如上面的Data6是说明下面的数据部分,比如设置磁盘驱动格式化里面的整个的数据部分。2. TypeCode是说明该信息是命令还是响应。3. Comma ndCode是说明下面的结构体是中是执行什么命令码,比如读 /写等。typedef _packed structUINT8 Drive; /*磁盘驱动器*/UINT8 Reserved5;/* 保留 */BM_CmdSetDefaultDr

19、ive;/*设置默认的磁盘驱动器 */说明:1. 这是接上面的结构体而来,Drive是说明是磁盘驱动器,2. Reserved5说明执行的命令是保留。下面的各个结构体也是依次类推而来。typedef _packed structUINT8 Drive; /*磁盘驱动器*/UINT8 Reserved5;/* 保留 */BM_CmdFormatDrive;/* 格式化磁盘 */typedef _packed structUINT8 Drive;UINT8 Reserved 5;BM_CmdDriveSpacel nfo;/*磁盘的剩余空间*/typedef _packed structUINT8

20、 Drive;UINT8 Reserved5;BM_CmdGetCurre ntDir;/*获取当前目录*/typedef _packed structUINT8Option;/*参数选项,其选择为下面的宏定义*/UINT8Reserved 5;/*保留*/BM_CmdOpe nFile;/*打开文件*/#define NORMAL_OPEN0x00/*以普通方式打开*/#define CREATE0x01/*以创建文件方式打开*/#define CREATE TRUNCATE0x02/*以覆盖方式打开*/typedef _packed structUINT8Index;/*指向文件的指针*/

21、UINT16 DataLen; /* 数据的长度 */UINT8 Reserved3;/*保留*/BM_CmdReadFile;/*读文件*/UINT16 DataLen;/* 数据的长度 */UINT8 Reserved3; /* 保留 */BM_CmdWriteFile;/* 写文件 */typedef _packed structUINT8Index;/* 文件指针 */UINT8 Option;/*文件从哪开始*/UINT32 Position;/*指针移动偏移量*/BM_CmdSetFilePoi nter;typedef _packed structUINT8In dex;UINT

22、8Reserved5;/* 保留 */BM_CmdCloseFile;/* 关闭文件 */typedef _packed structUINT8Index;/* 文件指针 */UINT32 Position; /*指针移动偏移量*/UINT8 Reserved1; /* 保留 */ BM_CmdTru ncate;UINT8 Reserved5; BM_CmdSetAttributes; typedef _packed struct UINT8 Baudrate;UINT8 Reserved5; BM_CmdSetBaudrate; typedef _packed struct UINT8CR

23、CE nable;UINT8 Reserved5; BM_CmdSetCRC;响应结构为:typedef _packed struct /*保留*/*设置属性*/*保留*/*设置波特率*/*1是打开或2为关闭默认值为/*保留*/*打开或关闭CRC校验*/0*/UINT8 TypeCode; /* 类型码 */UINT8CommandCode;/* 命令码 */UINT8 Result;/* 返回 */UINT8 Data4;/* 数据部分 */BM_Respo nse;typedef _packed structUINT8 Number;/*发现的磁盘个数*/UINT8 Reserved3;

24、/* 保留 */BM_RespDetectDisk;/* 响应发现了磁盘 */说明:1:这跟上面的命令是一样的,可参看上面而得出。typedef _packed structUINT8 Number; /* 磁盘号 */UINT8 Reserved3; /* 保留 */BM_RespOpe nDisk;typedef _packed structUINT8 Drive;UINT8 Reserved3; /* 保留 */BM_RespGetDefaultDrive;里面。然后用时直32768Byte。UINT16 BytesPerSector;UINT8 SectorsPerCluster;UI

25、NT32 TotalClusters;UINT32 FreeClusters;BM_RespDriveSpacel nfoData;说明:1.由于数据比较大,考虑到 4字节装不下,就把其放到Databuff接从Databuff里面直接调出来用。typedef _packed structUINT8Index; /*指向文件的指针 */UINT8Reserved3; /* 保留 */BM_RespOpe nF ile;typedef _packed structUINT16 DataLen;/* 数据的长度 */UINT8 Reserved2; /* 保留 */BM_RespReadFile;说

26、明:1. DataLen 说明读的数据的长度,现在定义的最大读数据长度为UINT16 DataLen;/* 数据的长度 */UINT8 Reserved2; /* 保留 */BM_RespWriteFile;说明;1. DataLen说明写的数据的长度,现在定义的最大写数据长度为32768Byte 。typedef _packed structUINT8 Attributes;UINT8 Reserved3; /* 保留 */BM_RespGetAttributes;typedef _packed structUINT8TypeCode; /* 类型码 */UINT8CommandCode;

27、/* 命令码 */UINT8Data6; /* 数据部分 */BM_RespSysTime;代码的实现系统命令/响应消息系统命令/响应消息用于在用户系统或 ARM读写U盘/移动硬盘模块一一 USB Host总 线解决方案系统将要发出的命令或响应及相应数据准备好后,通过对方(ARM读写U盘/USB Host总线解决方案或用户系统)命令或响应已经准备完毕,可以开移动硬盘模块始执行的消息。该消息通过中断方式来实现,通过向双端口RAM的OxFFFE或OxFFFF地址写数据来完成。即:对用户系统而言,当向 OxFFFE写入数据时,即为通知 ARM读写U盘/移动硬盘模块 USB Host总线解决方案有命令

28、待执行 (ARM读写U盘/移动硬盘模块一一 USB Host 总线解决方案系统会产生一个中断) 。当ARM读写U盘/移动硬盘模块一一 USB Host总线解决方案系统完成命令后, 准备好响应,然后会在OxFFFF处写一个字节,这时,会导致INTR 拉低,由此产生一个外部中断, 用户系统即可通过读取 OxFFFF字节以清除该中断,并进一步读出响应,进行响应处理。目前系统定义:向OxFFFE写入和从OxFFFF读出的值都是0x02。(其中的命令/响应格式参看HostModule 系统协议v2.OINTR中断为低有效。参考代码如下:#define DPRAMRI nt(char*) OxFFFFL)

29、#define DPRAMLI nt(char*) OxFFFCL)/*用户系统向ARM读写U盘/移动#define SEND_SYSCMD *DPRAMLI nt = 0x02硬盘模块一一USB Host总线解决方案bRecvCmd = *DPRAMRI nt;发送命令消息的宏*/*用户系统读取响应消息的操作,用于用户系统被INTR触发的外部中断服务程序中*/说明:1.上述代码适用于 Franklin C51和Keil C51系统。(下同)622.2系统命令/响应及其数据部分如前所述,系统的协议是通过在双端口RAM的指定区域写入协议规定的命令来实现的。系统命令在双端口RAM中指定的区域为:#

30、define Comma nd0x40000000#define Respo nse 0x40000000#define Comma ndData0x40000008#define Respo nseData0x4000008说明:1.上述定义的含义是:a)Comma nd 被用于存放从用户系统发往ARM读写U盘/移动硬盘模块一一USBHost总线解决方案的命令,包括BM_CmdSetDefaultDrive 、BM_CmdFormatDrive 、BM_CmdDriveSpacelnfo、BM_CmdGetCurrentDir、BM_CmdOpenFile 、BM_CmdReadFile 、

31、BM_CmdWriteFile 、 BM_CmdSetFilePointer、BM_CmdCloseFile 、BM_CmdTruncate 、BM_CmdSetAttributes 、BM_CmdSetBaudrate 、BM_CmdSetCRC。该存储区 被指定于双端口 RAM的0x0000地址,使用0x08 ( 8字节)字节。b)Response被用于存放从ARM读写U盘/移动硬盘模块一一USB Host总线解决方案发往用户系统的响应,包括BM_RespDetectDisk 、BM_RespOpenDisk 、BM_RespGetDefaultDrive 、BM_RespDriveSpa

32、ceInfoData 、 BM_RespOpenFile 、BM_RespReadFile 、BM_RespWriteFile 、 BM_RespGetAttributes 和 BM_RespSysTime 该存储区被指定于双端口RAM 的0x0000 地址,使用 0x08 ( 8字节)字节。Comma ndData被用于存放命令的数据部分,Respo nseData 被用于存放响应的数据部分。6.223用户系统创建文件及其实现过程用户创建文件的实现过程是先创建目录然后通过打开文件来创建文件。如下V2_CreateDir ()(伪代码)函数所示,包括构造命令包和将命令容放入双端口RAM指定区域

33、两部分:/*创建目录函数*/void V2_CreateDir(BM_Comma nd *pcmd)STATUS status;BM_Resp onse *presp = (BM_Resp onse *)Resp on se;char* pn ame = Comma nd+CMD_LEN;if (!DiskOpened)/*假如磁盘没有打开*/presp->Result = FALSE;presp->ErrCode = GET_V2_ERRCODE(NUF_NOT_OPENED);RespLen = CMD_LEN; /* 赋空间大小 */return;status = NU_Ma

34、ke_Dir(pname); /*创建目录名 */if (status < 0)/*创建目录错误*/ presp->Result = FALSE;presp->ErrCode = GET_V2_ERRC0DE(status);else/*创建成功*/presp->Result = TRUE; /* 返回正确 */RespLen = CMD_LEN; /* 赋空间大小 */说明:1. 创建文件是通过创建目录,然后在通过打开文件来创建的。/*打开文件*/void V2_Ope nF ile(BM_Comma nd *pcmd)STATUS status;BM_Resp on

35、se *presp = (BM_Resp onse *)Resp on se;BM_CmdOpe nFile *pcof = (BM_CmdOpe nFile *)pcmd->Data;BM_RespOpe nFile *prof = (BM_CmdOpe nFile *)presp->Data; char* pn ame = Comma nd+CMD_LEN;UINT16 flag;int i;if (!DiskOpened)/*假如磁盘没有打开*/presp->Result = FALSE;RespLen = CMD_LEN; /*赋空间大小 */return;switc

36、h (pcof->Optio n)case NORMAL_OPEN:/*以普通文件打开*/flag = PO_RDWR|PO_NOSHAREANY;break;case CREATE:/*创建新的文件*/flag = PO_CREAT|PO_EXCL|PO_WRONLY|PO_NOSHAREANY;break;case CREATE_TRUNCATE: /* 覆盖文件 */flag = PO_CREAT|PO_TRUNC|PO_WRONLY|PO_NOSHAREANY;break;default :break;if (!DirDo ne)NU_Do ne(& statobj);

37、/*通过读取磁盘系统的信息如时间日期就赋给新文件*/DirD one = TRUE;status = NU_Ope n(p name,flag,PS_IWRITE|PS_IREAD);if (status < 0)/*创建文件错误*/presp->Result = FALSE;presp->ErrCode = GET_V2_ERRCODE(status); /* 根据 status 执行的结果判断错 误*/else/*创建成功*/Global_FD = status; /*打开的文件指针赋值给文件指针*/if (PC_File = pc_fd2file(Global_FD)

38、= NULL)/*ERROR*/elsememset(File_Name,O,EMAXPATH + 1);strcpy(File_Name, pn ame);prof->I ndex = (un sig ned char)Global_FD; /*把打开的文件指针赋值给响应文件*/RespLen = CMD_LEN;说明:1. PO_RDWR为读和写可以运行的路径,PO_NOSHAREANY 假如打开的为错误就需要准备打开另外的一种为打开可能失败则要从现有的文件中打开。Global_FD 为打开的文件指针。2. PO_CREAT为假如文件步存在则要创建文件,PO_EXCL文件存在就不创建

39、,PO_WRONLY仅仅打开的是写文件,PO_TRUNC 假如文件存在则把文件覆盖掉,其中当有PO_CREAT与PO_TRUNC 则不管是同名文件直接创建,而有PO_CREAT与PO_EXCL则在执行时为存在同名的就不创建文件。3. PS_IWRITE|PS_IREAD 表示文件可读也可以写。6.224用户系统写文件的过程实现写文件的过程与创建文件过程相似,不同之外仅在于构造的命令容不同。写文件命令实现如下:void V2_WriteFile(BM_Comma nd *pcmd)STATUS status;BM_Resp onse *presp = (BM_Resp onse *)Resp o

40、n se;BM_CmdWriteFile *pcwf = (BM_CmdWriteFile *)pcmd->Data;BM_RespWriteFile *prwf = (BM_RespWriteFile *)presp->Data;UINT32 fptr;INT le n,i;UINT8 resu;RespLe n = CMD_LEN;if (!DiskOpened)/*假如磁盘没有打开*/presp->Result = FALSE;presp->ErrCode = GET_V2_ERRCODE(NUF_NOT_OPENED);return;if (pcwf->D

41、ataLe n> MAX_DATA_LEN)/假如数据长度超过了提供的最大长度,返回错。presp->Result = FALSE;presp->ErrCode = GET_V2_ERRCODE(NUF_EXCEED_MAX_DATA_LEN);return;elselen = pcwf->DataLe n;memcpy(DataBuf,(char*)(Comma nd + CMD_LEN),le n);/*把文件的数据按实际大小拷贝过去*/fptr = PC_File->fptr;/获取当前文件指针if (status >= 0)presp->Res

42、ult = TRUE;prwf->DataLen = (UINT16)status; status = NU_Flush(Global_FD); if(status < 0)goto errorProcess;elseerrorProcess: /* 错误的处理 */if (status = NUF_IO_ERROR)usb IO的错误for (i=0;i<TotalDriveNum;i+)磁盘中断*/挂载上*/NU_Disk_Abort(Disk_Stri ng+(i+SD_DRIVE)*3); /*if (USBCurrCo nn Status()unmount_usb_

43、host(); /*USB 没有 mountPWR_5V_USB_0FF();TotalDriveNum = 0;/* 磁盘号 */scsi_disk_available = FALSE;DiskOpe ned = FALSE;USB_I nserted = FALSE;NU_Sleep(20);PWR_5V_USB_ON();moun t_usb_host();else/U盘拨出presp->Result = FALSE;presp->ErrCode = GET_V2_ERRCODE(NUF_NO_DISK); return;while(!USB_l nserted)/等待U盘mou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论