mass storage class an1169 final -...

28
2009 Microchip Technology Inc. DS01169A_CN 1 AN1169 引言 近年来,基于通用串行总线(Universal Serial BusUSB)的应用迅猛增长,这主要是由于 USB 即插即用 Plug-and-Play)的性质决定的。 本应用笔记讨论并提供了海量存储设备(Mass Storage DeviceMSD)功能驱动程序。对于运行在支持 USB 外设的 Microchip 32 PIC ® 单片机产品上的应用,几 乎都可以集成这一驱动程序。本应用笔记描述了使用安 全数字 (Secure DigitalSD)卡的 USB MSD 功能驱 动程序的设计与实现,有助于开发人员对 USB 海量存 储解决方案的开发。 本应用可用作单独的 MSD 或用作安全数字卡 / 多媒体卡 SD/MMC)的读 / 写器接口。MSD 功能驱动程序使用 的是 Microchip PIC32 USB 设备栈。 假设 假设读者熟悉下列 Microchip 开发工具:MPLAB ® IDE MPLAB REAL ICE™ 在线仿真器。此外,还假设读者 熟悉 C 程序设计语言以及 USB 设备协议和描述符。本 文档中使用了这些技术的术语,但只简要概述了其概 念。建议资深读者阅读相关的规范。 功能与特性 本应用笔记给出了 MSD 设备功能驱动程序的主要构成 部分。Microchip MSD 设备功能驱动程序融合了下列功 能特性: 功能与 RTOS 或应用无关 支持 Microchip MPLAB IDE 工具套件 支持 MSD 1.0 规范 使用两个 USB 端点,经配置用于批量传输 文件系统支持 (FAT16FAT32 NTFS)取决于 主机 OS 无需定制驱动程序 处理标准的 MSD 配置请求,如 Universal Serial Bus Specification, Revision 2.09 章中所述 http://www.usb.org/developers/docs/限制 由于所开发的MSD功能驱动程序是用在嵌入式系统中, 存在的限制是那些通过USB 设备栈继承而来的限制(请 参阅 Microchip 应用笔记 AN1176PIC32 USB 设备栈 编程指南》)。 系统硬件 本应用和固件开发,针对的是下列硬件: • PIC32MX 系列单片机 PIM Processor Interface Module,处理器接口模块),支持 USB Microchip Explorer 16 开发板 USB PICtail™ Plus 子板 针对 SD 卡和 MMC 卡的 PICtail™ 子板 可以修改 USB 设备和 MSD 功能驱动程序源文件,以便 能够使用其他开发板,适应大多数的硬件差异。 作者: Sean Justice Microchip Technology Inc. 嵌入式设备上的 USB 海量存储类

Upload: others

Post on 11-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169嵌入式设备上的 USB海量存储类

引言

近年来,基于通用串行总线 (Universal Serial Bus,USB)的应用迅猛增长,这主要是由于 USB 即插即用(Plug-and-Play)的性质决定的。

本应用笔记讨论并提供了海量存储设备(Mass StorageDevice, MSD)功能驱动程序。对于运行在支持 USB外设的 Microchip 32 位 PIC® 单片机产品上的应用,几乎都可以集成这一驱动程序。本应用笔记描述了使用安全数字(Secure Digital,SD)卡的 USB MSD 功能驱动程序的设计与实现,有助于开发人员对 USB 海量存储解决方案的开发。

本应用可用作单独的MSD或用作安全数字卡 /多媒体卡(SD/MMC)的读 / 写器接口。MSD 功能驱动程序使用的是 Microchip PIC32 USB 设备栈。

假设 假设读者熟悉下列 Microchip 开发工具:MPLAB® IDE和 MPLAB REAL ICE™ 在线仿真器。此外,还假设读者熟悉 C 程序设计语言以及 USB 设备协议和描述符。本文档中使用了这些技术的术语,但只简要概述了其概念。建议资深读者阅读相关的规范。

功能与特性

本应用笔记给出了 MSD 设备功能驱动程序的主要构成部分。Microchip MSD 设备功能驱动程序融合了下列功能特性:

• 功能与 RTOS 或应用无关

• 支持 Microchip MPLAB IDE 工具套件

• 支持 MSD 1.0 规范

• 使用两个 USB 端点,经配置用于批量传输

• 文件系统支持(FAT16、FAT32 和 NTFS)取决于主机 OS

• 无需定制驱动程序

• 处理标准的 MSD 配置请求,如“Universal Serial Bus Specification, Revision 2.0”第 9 章中所述(http://www.usb.org/developers/docs/)

限制

由于所开发的MSD功能驱动程序是用在嵌入式系统中,存在的限制是那些通过USB设备栈继承而来的限制(请参阅 Microchip 应用笔记 AN1176《PIC32 USB 设备栈编程指南》)。

系统硬件

本应用和固件开发,针对的是下列硬件:

• PIC32MX 系列单片机 PIM (Processor Interface Module,处理器接口模块),支持 USB

• Microchip Explorer 16 开发板

• USB PICtail™ Plus 子板

• 针对 SD 卡和 MMC 卡的 PICtail™ 子板

可以修改 USB 设备和 MSD 功能驱动程序源文件,以便能够使用其他开发板,适应大多数的硬件差异。

作者: Sean JusticeMicrochip Technology Inc.

2009 Microchip Technology Inc. DS01169A_CN 第 1 页

Page 2: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

PIC® MCU 存储器资源需求

MSD 功能驱动程序继承了 USB 设备栈的全部存储器需求。更多信息,请参阅 AN1176《PIC32 USB 设备栈编程指南》的“存储器资源需求 ”。

MSD设备功能驱动程序占用的闪存和RAM存储器如下表所示:

MSD 功能驱动程序应用定义下列项:

• USB 描述符表

• MSD 报告结构

任何 MSD 功能驱动程序应用都需要 USB 描述符表和MSD 报告结构。

USB 描述符表的存储器需求如下表所示:

USB 描述符表占用的存储器资源大小可能会有不同,受各种因素(包括但不局限于下列条件)的影响:是否打算使用多个 USB 功能驱动程序。如果使用的驱动程序不止一个,则配置数、接口数和端点配置数都将影响占用的存储器大小。

安装源文件

Microchip MSD 功能驱动程序的完整源代码可以从Microchip 网站下载(见源代码)。源代码以 MicrosoftWindows® 安装文件的形式提供。

执行下列步骤,完成安装:

1. 执行安装文件。Windows 安装向导将指导您完成安装过程。

2. 在继续安装之前,必须点击 I Accept(我接受),接受软件许可协议。

3. 安装过程完成之后,应该看到如下的目录结构:

a) \PIC32 Solutions\Microchip\USB下的 msd_device_driver 目录。此目录中含有 MSD 功能驱动程序的源文件和文档。

b) \PIC32 Solutions\ Microchip\Include下的 USB目录。此目录中含有 MSD 功能驱动程序的包含文件。

c) \PIC32 Solutions 目录下的usb_msd_device_demo 目录。此目录中含有 MSD 功能驱动程序演示的演示项目和源文件。

4. 阅读版本说明,了解 新版本特定的功能特性和限制。

表 1: 存储器需求

存储器 大小

闪存 11,700 字节

RAM 608 字节

表 2: USB 描述符表

存储器 大小

闪存 188 字节

DS01169A_CN 第 2 页 2009 Microchip Technology Inc.

Page 3: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

源文件构成

MSD 设备类由多个文件组成,文件分别在多个目录中。表 3 给出了目录结构。

表 3: MSD 源文件目录结构

演示应用

随 Microchip MSD 功能驱动程序一起提供的,还有一个演示应用,它通过模拟可移动磁盘驱动器演示 MSD 功能驱动程序。演示应用旨在运行在 Explorer 16 开发板上,使用 Microchip USB 设备栈软件。不过,可以修改应用以支持大多数开发板。

磁盘驱动器模拟演示应用提供下列服务:

• USB设备枚举为MSD功能驱动程序(在Windows Explorer 上被看作是可移动磁盘驱动器)

• 在模拟驱动器上写、读、编辑或删除文件

• 文件系统支持(FAT16、FAT32 和 NTFS)取决于主机 OS

• 利用 PC 的磁盘属性功能查看 SD 存储卡容量

文件 目录 说明

msd.c \PIC32 Solutions\Microchip\USB\msd_device_driver USB MSD 设备类驱动程序

msddsc.tmpl \PIC32 Solutions\Microchip\USB\msd_device_driver MSD 描述符模板

mediasd.c \PIC32 Solutions\Microchip\USB\msd_device_driver SD 接口 API

sdcard.tmpl \PIC32 Solutions\Microchip\USB\msd_device_driver 用户可修改的 SD 定义模板

usb_device_msd.h \PIC32 Solutions\Microchip\Include\USB API 定义和可修改的宏

msd_pri.h \PIC32 Solutions\Microchip\USB\msd_device_driver 私有函数和宏定义

mediasd.h \PIC32 Solutions\Microchip\Include\USB SD 接口头文件

2009 Microchip Technology Inc. DS01169A_CN 第 3 页

Page 4: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

编程演示应用

要把演示应用编程到目标器件中,必须使用 MPLABREAL ICE 在线仿真器。下列步骤都假设您将使用MPLAB IDE。如果不是的话,请参考您所用编程器的说明书。

1. 把MPLAB REAL ICE在线仿真器连接到Explorer16 开发板或您的目标板。

2. 给目标板上电。

3. 启动 MPLAB IDE.4. 选中您选择的支持USB的PIC32器件(仅在导入

先前已编译好的十六进制文件时才需要这一步)。

5. 使能 MPLAB REAL ICE,把它作为编程器。

6. 如果打算使用先前已编译好的十六进制文件,把文件导入 MPLAB。

7. 如果要重新编译十六进制文件,打开项目文件,执行编译(build)过程,创建该应用程序的十六进制文件。

8. 演示应用包含了 Explorer 16 开发板所需的必要配置选项。如果要对其他类型的开发板编程,请确保从 MPLAB IDE 配置设定菜单中选择恰当的振荡器模式。

9. 从 MPLAB IDE 中选择 “Programmer” (编程器)菜单项,然后点击 “Select Programmer->6REAL ICE” (选择编译器 ->6 REAL ICE)。

10. MPLAB IDE检测到REAL ICE在线仿真器和PICMCU 后,选择 “Programmer” 菜单项,点击“Program” (编程)对器件进行编程。

11. 几秒钟后,应该看到消息 “Programmingsuccessful”(编程成功)。如果没有看到,仔细检查开发板和 MPLAB REAL ICE 的连接。进一步的帮助请参阅 MPLAB IDE 和 REAL ICE 联机帮助。

12. 移去开发板的电源,把MPLAB REAL ICE电缆从目标板上断开。

13. 重新给开发板上电,确保LCD显示“PIC32 MSDDevice”(PIC32 MSD 设备)。如果没有显示,仔细检查编程步骤,并在必要时重复这些步骤。

编译演示应用

可以使用 Microchip C32 C 编译器编译本应用笔记提供的演示应用。如果需要的话,编译源文件的编译器也可以是您通常与 Microchip 单片机一起使用的编译器。

本应用笔记提供了一个预先定义好的 MSD 项目文件,可以使用 MPLAB IDE 打开它。创建项目时使用的是支持 USB 的 PIC32MX 器件。如果使用其他器件,应该通过 MPLAB IDE 菜单命令选择相应的器件。

此外,演示应用项目使用额外的包含路径,它在MPLABIDE 的 “Build Options” (编译选项)中定义。

需要下列包含路径:

• .\

• ..\Microchip\Include

• ..\..\Microchip\Include

DS01169A_CN 第 4 页 2009 Microchip Technology Inc.

Page 5: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

表 4 列出了编译演示应用所必需的源文件。

表 4: 演示应用项目文件

文件名 目录 说明

main.c \PIC32 Solutions\usb_msd_device_demo 主演示源文件

msddsc.c \PIC32 Solutions\usb_msd_device_demo MSD USB 描述符

sdcard.def \PIC32 Solutions\usb_msd_device_demo SD 卡用户定义

HardwareProfile.h \PIC32 Solutions\usb_msd_device_demo PIC32MX 硬件定义

usb_config.h \PIC32 Solutions\usb_msd_device_demo USB 特定的定义,用于辅助函数

msd.c \PIC32 Solutions\Microchip\USB\msd_device_driver USB MSD 源文件

mediasd.c \PIC32 Solutions\Microchip\USB\msd_device_driver SD 卡 APImsd_pri.h \PIC32 Solutions\Microchip\USB\msd_device_driver 私有函数和宏定义

usb_device_msd.h \PIC32 Solutions\Microchip\Include\USB USB MSD 包含文件

mediasd.h \PIC32 Solutions\Microchip\Include\USB SD 卡 API 原型及定义

usb_device.c \PIC32 Solutions\Microchip\USB USB 设备 APIusb_hal.c \PIC32 Solutions\Microchip\USB USB 硬件 APIusb_hal_core.c \PIC32 Solutions\Microchip\USB USB 硬件内核 APIusb.h \PIC32 Solutions\Microchip\Include\USB USB 定义及 API 原型 usb_ch9.h \PIC32 Solutions\Microchip\Include\USB USB 定义和支持,如

“Universal Serial Bus Specification, Revision 2.0”第 9 章所述

usb_common.h \PIC32 Solutions\Microchip\Include\USB USB 公共定义

usb_device.h \PIC32 Solutions\Microchip\Include\USB USB 设备定义及 API原型 usb_hal.h \PIC32 Solutions\Microchip\Include\USB USB 硬件支持

mstimer.c \PIC32 Solutions\Microchip\Common 1 毫秒定时器

ex16lcd.c \PIC32 Solutions\Microchip\Common Explorer 16 开发板 LCDmstimer.h \PIC32 Solutions\Microchip\Include 1 毫秒定时器定义

ex16lcd.h \PIC32 Solutions\Microchip\Include Explorer 16 开发板LCD定义

2009 Microchip Technology Inc. DS01169A_CN 第 5 页

Page 6: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

下面是编译演示应用的概括性步骤。这些步骤假定您熟悉 MPLAB IDE 并将使用 MPLAB IDE 来编译应用。如果不是的话,请参考您所用编程器的说明书,了解如何创建和编译项目。

1. 确保已经安装了Microchip MSD功能驱动程序的源文件。如果没有安装,请参阅 “安装源文件 ” 。

2. 启动 MPLAB IDE,打开项目文件。

3. 使用MPLAB IDE菜单命令编译项目。注意,如果源文件位于安装向导建议的目录结构中,项目编译将很顺利。如果移动了源文件,或者把源文件安装到了其他位置,必须重新创建项目或修改现有的项目设定,才能进行编译。更多信息,请参阅 “ 编译演示应用 ”。

4. 此时,编译过程应该能够成功完成。如若不然,应确保您正确设置了 MPLAB IDE 和编译器。

应用特定的 USB 支持

在使用 Microchip PIC32 USB 器件固件栈时, MSD 演示实现了下列应用特定的表。

1. USB 描述符表

2. 端点配置表

3. 功能驱动程序表

USB 描述符表

每个 USB 设备都必须提供一组 “ 描述符 ”(数据结构),描述符对设备进行描述,并向主机提供所用类驱动程序的详细信息。至于这些描述符是如何正确提供的以及其中包含了什么信息,在 “Universal Serial BusSpecification, Revision 2.0” 的第 9章以及“UniversalSerial Bus Mass Storage Class, Bulk-Only Transport,Revision 1.0”中有定义。请参阅这些文档,了解全部细节。

USB 设备描述符可以分为以下三个类:

• 设备

• 配置

• 字符串

设备描述符标识设备类型,给出可能配置的数量。

配置描述符说明所使用的接口和端点类型。这类描述符还给出了类特定的描述符。

字符串描述符 ——尽管通常是可选的 ——提供了用户可读的信息,主机可以显示这些信息。

演示应用的描述符表

演示应用提供的描述符表在 msddsc.c 源文件中,其概要见附录C:“USB MSD 功能驱动程序描述符表定义”。可以修改演示应用的描述符表,以添加其他接口或配置。不过,在尝试修改描述符表之前,建议透彻理解“Universal Serial Bus Specification, Revision 2.0” 的第 9 章以及其他适用的设备功能驱动程序特定的规范。

DS01169A_CN 第 6 页 2009 Microchip Technology Inc.

Page 7: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

端点配置表

USB 设备栈使用端点配置表,按照描述符表定义的接口和备用设定,正确配置全部端点。端点配置表表明:应使用哪个功能驱动程序对发生在每个端点上的事件进行服务。

每个表项含有如下信息:

• 大包长度

• 配置标志

• 配置编号

• 端点编号

• 接口编号

• 备用设定

• 设备功能驱动程序表中指向端点处理例程的索引

演示应用的端点配置表只有一项,因为 MSD 功能驱动程序只需要两个端点(Bulk-In 和 Bulk-Out)。在源文件mouse_dsc.c 中可找到下表。关于端点配置表的更多信息,请参阅 AN1176《PIC32 USB 设备栈编程指南》。

例 1: 端点配置表 const EP_CONFIG _EpConfigTlb[] = { {

MSD_EP_OUT_SIZE, // 大包长度

USB_EP_TRANSMIT | USB_EP_HANDSHAKE | USB_EP_RECEIVE, // Tx(发送)和 Rx(接收)配置

// 握手使能

1, // 配置编号

1, // 端点编号

0, // 接口编号

0, // 备用设定

0 // 处理函数索引

},};

2009 Microchip Technology Inc. DS01169A_CN 第 7 页

Page 8: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

功能驱动程序表

Microchip PIC32 USB 设备栈使用一张表来管理对支持的功能驱动程序的访问,因为一个设备可能实现的类或供应商特定的 USB 设备功能驱动程序不止一个。表中的每一项都含有管理单个功能驱动程序所必需的信息。

每个表项中含有下列信息:

• 初始化例程

• 事件处理例程

• 初始化标志

演示应用的功能驱动程序表只有一项,因为只有一个功能驱动程序MSD。在源文件msddsc.c中可找到下表。关于功能驱动程序表的更多信息,请参阅 AN1176《PIC32 USB 设备栈编程指南》。

例 2: 功能驱动程序表

const FUNC_DRV _DevFuncTbl[] ={ { MSDInit, // 初始化例程 MSDEventhandler, // 事件处理例程

0 // 初始化标志

}};

DS01169A_CN 第 8 页 2009 Microchip Technology Inc.

Page 9: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

MSD 功能驱动程序概述

MSD 描述符

每个 USB 设备都有一个与之相关联的描述符结构。每个设备可能含有多个类 (比如 HID 和 CDC 等),这些类在接口层定义。图 1 显示了定义 MSD 类的描述符结构树。

图 1: MSD 功能驱动程序的 USB 描述符

MSD 命令块和状态包 (CBW 和 CSW)

批量传输适用于实时性要求不高的数据传输。只有高速和全速设备可进行批量传输。因为批量传输等待总线的可用时间,所以它能发送大量数据而不会使总线过载。海量存储类支持两种传输协议,协议决定了设备和主机使用哪种传输类型发送命令、数据和状态信息。这两种传输协议是:

• 只使用批量传输 (Bulk-Only Transport , BOT)• 控制 / 批量 / 中断 (Control/Bulk/Interrupt, CBI)

传输

BOT是使用批量传输的传输协议,而CBI传输协议则使用控制传输、批量传输和中断传输。在本应用中,使用BOT 作为数据传输协议。

海量存储类规范定义了两个类特定的请求,即Get MaxLUN和Mass Storage Reset,它们必须由海量存储设备实现。(在单个 SCSI 总线上,总线使用 LUN[ 逻辑单元编号 ] 标识多个驱动器 [ 单元 ]。) Bulk-Only 的Mass Storage Reset用来复位海量存储设备和与之关联的接口。Get Max LUN请求用来确定设备支持的逻辑单元的数量。Max LUN的值介于 0 和 15 之间(代表 1-16 个逻辑设备)。应注意 LUN 从 0 开始。设备可能包含多个逻辑单元,它们共享共同的设备特征。主机不能向不存在的 LUN发送命令块包 (Command BlockWrapper, CBW)。

实现 BOT 的设备至少支持三个端点:Control (控制)端点 (所有 USB 设备必需的), Bulk-In (批量输入)端点和 Bulk-Out (批量输出)端点。 USB 2.0 规范定义控制端点(端点 0)为默认端点,它不需要描述符。Bulk-In 端点用于从设备传输数据和状态到主机; Bulk-Out 端点用于从主机传输命令和数据到设备。

设备描述符 字符串描述符

配置 描述符

接口 描述符

端点 描述符

MSD 功能驱动 程序描述符信息

注: USB 从主机的角度来定义数据流的方向。IN 端点把数据从设备发送到主机,OUT 端点接收来自主机的数据。

2009 Microchip Technology Inc. DS01169A_CN 第 9 页

Page 10: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

只使用批量传输 (BOT)和控制传输一样,只使用批量传输(BOT)也由命令阶段、可选的数据阶段和状态阶段组成。对所有的命令请求而言,数据阶段是可选的。

图 2 显示了 BOT 的命令传输、数据输入、数据输出及状态传输的流程。

命令块包 (CBW)是长度正好 31 字节的短包。 CBW和所有的后续数据及命令状态包 (Command StatusWrapper,CSW)都从新的数据包边界开始传输。特别要注意的是:所有 CBW 传输按小尾数 (little-endian)顺序发送,低有效位 (LSB)(字节 0)在前。

图 2: BOT 的命令 / 数据 / 状态流程

就绪

命令传输 (CBW)

数据输出 数据输入

状态传输(CSW)

(自主机) (到主机)

DS01169A_CN 第 10 页 2009 Microchip Technology Inc.

Page 11: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

表5显示CBW包的格式。在CBW中,dCBWSignature的值 “43425355h”(USB 命令的 ASCII 字符串“USBC”之小尾数表示)代表 CBW 包。

dCBWTag是命令块标志,它在 CSW 中回送,这样可以把相应的 CBW 和 CSW 联系起来。

dCBWDataTransferLength 指示主机希望在 Bulk-In或 Bulk-Out 端点(由方向位指定)上传输的字节数。

只有 bmCBWFlags的第 7 位表明数据流方向,‘1’表示 Data-In (即从设备到主机)。

bCBWLUN字段指定命令块将要送达的设备 LUN。

bCBWCB字段定义命令块的有效长度。

CBWCB是设备将执行的命令块。

表 5: 命令块包 (CBW)格式

命令块包

字节 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0

1

2 dCBWSignature

3

4

5

6 dCBWTag

7

8

9

10 dCBWTransferLength

11

12 bmCBWFlags

13 保留 (0) bCBWLUN

14 保留 (0) bCDMCLength

15... CBWCB

...30

2009 Microchip Technology Inc. DS01169A_CN 第 11 页

Page 12: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

表 6 显示 CSW 的格式,其长度是 13 个字节。

dCSWSignature 的值 “53425355h” (USB 状态的ASCII字符串“USBS”之小尾数表示)代表CSW包。

dCSWTag字段回应来自相应 CBW 的 dCSWTag值。

对于 Data-Out, dCSWDataResidue 是预计的数据与设备处理的实际数据量之差。

对 Data-In, dCSWDataResidue是预计的数据与设备发送的实际相关数据量之差。

dCSWDataResidue 的值始终小于等于 dCBWData-TransferLength的值。

bCSWStatus的值表明命令成功与否。

bCSWStatus的值为00h表明命令成功;01h表明命令失败; 02h 表明状态错误。

表 6: 命令状态包 (CSW) 格式

命令状态包

字节 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0

1

2 dCSWSignature

3

4

5

6 dCSWTag

7

8

9

10 dCSWDataResidue

11

12 bmCSWStatus

DS01169A_CN 第 12 页 2009 Microchip Technology Inc.

Page 13: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

SCSI 命令

目标 USB 设备成功枚举后,主机就根据枚举过程中接口描述符指定的接口子类发起命令。

USB MSD 应用规定接口子类是 06h,表明设备将支持SCSI 基本命令 2(SCSI Primary Commands-2,SPC-2)或更新命令集。接口描述符中接口协议值为 50h,表示正在使用 BOT 协议。如图 2 所示,BOT 传输以 CBW开始。设备通过对 CBW 的接受 (应答)表明 CBW 传输成功。如果在命令传输期间,主机检测到 Bulk-Out 端点的 STALL (停止),主机将响应一个 Reset 复位信号。主机将尝试传输一个准确的字节数到(或来自)设备,方向和大小分别由 dCBWDataTransferLength和方向位指定。设备将通过 Bulk-In 端点把各个 CSW 发送到主机。

在本节中,我们将简要描述在 MSD 实现中支持的SCSI命令。更多细节,读者可参阅 SCSI 基本命令 3(SCSIPrimary Commands-3, SPC-3)和 SCSI 块命令 2(SCSI Block Commands-2,SBC-2)。命令块的第一个字节, CBWCB,始终为操作码(缩写为 opcode)。

• INQUIRY( 查询, Opcode 12h)• READ CAPACITY(读容量, Opcode 25h)• READ (10)(读数据, Opcode 28h)• WRITE (10)(写数据, Opcode 2Ah)• REQUEST SENSE (6)(请求检测, Opcode

03h)• MODE SENSE (6)(模式检测, Opcode 1Ah)• PREVENT ALLOW MEDIUM REMOVAL (防止允许介质移除, Opcode 1Eh)

• TEST UNIT READY (测试单元就绪, Opcode 00h)

• VERIFY (10)(校验, Opcode 2Fh)• START/STOP(启动 /停止, Opcode 1Bh)

下面是操作的说明:

INQUIRY(Opcode 12h):

INQUIRY命令请求把关于逻辑单元和SCSI目标设备的信息发送给应用客户机(主机)。SPC-3规范要求应返回 INQUIRY 数据,即便设备服务器没有准备好响应其他命令。此外,标准的INQUIRY数据应该是现存可用的,不会导致任何介质访问延迟。标准的 INQUIRY 数据至少包含36 个字节,如附录 D:“ 标准查询格式 ” 所示。

READ CAPACITY(Opcode 25h):

READ CAPACITY命令请求设备服务器将描述容量和介质格式的参数数据字节传输到 Data-In 缓冲区。对 READ CAPACITY命令的响应是返回 4字节的 Logical Block Address(逻辑块地址)和 4 字节逻辑块长度(以字节为单位)。返回的 Logical Block Address是直接存储块设备上 近访问逻辑块的逻辑块地址。如果逻辑块的数量超过返回的 Logical BlockAddress字段所能定义的 大值,设备将把返回的 Logical Block Address 字段设置为FFFFFFFFh。

READ (10)(Opcode 28h):

READ (10) 命令指定设备服务器读指定的逻辑块并把数据传输到 Data-In 缓冲区。READ (10)命令是 10 字节的 CBWCB,第 8 和第 9 字节指定TRANSFER LENGTH(传输长度)。 TRANSFERLENGTH字段指定了将要读取并传输到Data-In缓冲区的相邻逻辑块的数据量。相邻逻辑块以Logical Block Address字段(字节 3-6)指定的逻辑块开始。TRANSFER LENGTH字段置为0 表示将不会读取逻辑块。

WRITE (10) (Opcode 2Ah):

WRITE (10)命令请求设备服务器从Data-Out缓冲区传输指定的逻辑块,并写入数据。 WRITE(10)命令和 READ (10)命令的 CBWCB格式相同,用 TRANSFER LENGTH来指定将要从 Data-Out 缓冲区传输并写入的相邻逻辑块数据大小,并以 Logical Block Address字段指定的逻辑块开始。TRANSFER LENGTH字段设置为 0 表示将不会写逻辑块。

2009 Microchip Technology Inc. DS01169A_CN 第 13 页

Page 14: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

REQUEST SENSE (6) (Opcode 03h):

REQUEST SENSE (6)命令请求设备服务器将检测数据传输到应用客户机。附录 E:“ 固定格式检测数据 ” 给出了固定格式的检测数据响应。RESPONSE CODE(响应代码)字段的内容表明错误类型和检测数据格式。RESPONSE CODE 为70h 表明当前错误。RESPONSE CODE 为 71h 指明固定格式检测数据的延迟错误。此外,72h 和73h 的代码值分别表明描述符格式检测数据中的当前和延迟错误。SENSE KEY(检测关键字)、ADDITIONAL SENSE CODE(ASC,附加检测码)和ADDITIONAL SENSE CODE QUALIFIER(ASCQ,附加检测码限定符)字段提供了信息的层次。 SENSE KEY字段指明描述错误或例外情况的一般信息。 ASC 字段进一步指出与 SENSEKEY字段报告的错误的相关信息。ASCQ字段表示ADDITIONAL SENSE CODE 相关的详细信息。SENSE KEY 错误代码、ASC和 ASCQ错误代码分配,请参见 SPC-3 规范的表 27 和表 28。本应用实现了固定格式、当前错误代码检测数据响应。

MODE SENSE (6) (Opcode 1Ah):

MODE SENSE (6) 命令提供了设备服务器向应用客户机报告参数的方法,它是 MODE SELECT(6) 命令的补充命令。 MODE SENSE (6) 和MODE SELECT (6)命令使用的模式参数报头如附录 F:“ 模式检测报头 ” 所示。MEDIUM TYPE(介质类型)和 DEVICE SPECIFIC PARAME-TER(设备特定参数)字段对每个设备类型来说是唯一的。在本应用中, MEDIUM TYPE字段设置为 00h,表明是直接存储块设备。这个值和标准 INQUIRY 数据中的 PERIPHERAL DEVICETYPE(外设类型)字段的值相同。

TEST UNIT READY (Opcode 00h):

TEST UNIT READY命令提供了检查逻辑单元是否准备就绪的方法。该命令不是自检的请求。如果逻辑单元能够接受合适的介质访问命令,而不必返回 Check Condition (检查状况)状态,这个命令将返回 Good (良好)状态。否则,该命令将由 Check Condition 状态中止,设置 SENSEKEY来反映错误状况。

PREVENT ALLOW MEDIUM REMOVAL(Opcode 1Eh):

PREVENT ALLOW MEDIUM REMOVAL命令请求逻辑单元使能或禁用介质的移除。防止介质移除在应用客户机发出 PREVENT ALLOW MEDIUMREMOVAL 命令时开始。该命令有一个 PREVENT字段(CBWCB 的第 5 字节的第 0-1 位),值为01b 或 11b(即,防止媒体移除)。因为没有办法阻止 SD 卡的移除,固件解码命令并准备通知主机 PC:操作已经成功完成。如果介质不可访问,该命令被指定为 Fail (失败, bCSWStatus= 0x01), SENSE KEY设置为 Not Ready (未准备好)。

VERIFY (10) (Opcode 2Fh):

VERIFY (10)命令请求设备服务器校验介质上指定的逻辑块。如果 BYTCHK 位设置为 ‘0’,设备将执行无数据比较的介质校验,且不会从Data-Out 缓冲区传输任何数据。如果 BYTCHK位设置为 ‘1’,设备服务器将对读取自介质的用户数据和从 Data-Out 缓冲区传输来的用户数据进行逐字节比较。固件解码命令并准备通知主机PC:操作已经成功完成。如果介质不可访问,命令指定为 Fail,SENSE KEY设置为 Not Ready。

START/STOP (Opcode 1Bh):

START/STOP 命令请求设备服务器改变逻辑单

元供电状况,装入或弹出介质。这包括通过控制供电状态和定时器,指定设备服务器使能或禁用介质访问操作的直接存储块设备。 POWERCONDITION(供电状态)字段(第 5 字节的第7-4 位)用于指定逻辑单元的供电状况,或者调整定时器。如果这个字段的值不等于 0h,则忽略 START位 (第 5 字节的第 0 位)和 LOEJ位(加载或弹出,第5字节的第1位)。如果POWERCONDITION字段是激活(1h)、空闲(2h)或待机 (3h) ,逻辑单元将转换到指定的供电状态。如果 POWER CONDITION = 0h(START_VALID),则 START, LOEJ = (0,0) 表明逻辑单元将转换到停止供电状态; START,LOEJ = (0,1)表明逻辑单元将卸载介质;START,LOEJ = (1,0)表明逻辑单元将转换到激活的供电状况。如果 START, LOEJ = (1,1),则逻辑单元

将加载介质。

DS01169A_CN 第 14 页 2009 Microchip Technology Inc.

Page 15: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

不支持的命令

如果CBWCB中命令操作码字段是不受支持的,则SENSEKEY设置为非法请求,表明在CDB中有非法参数,同时ASC和 ACSQ码对无效命令操作码作相应设置。

安全数字 (SD)卡

安全数字(Secure Digital, SD)卡是在移动设备上普遍使用的存储介质(如 PDA、数码相机和 MP3 播放器,等等)。市场上可购买各种存储容量的 SD 卡。 SD 卡和 MMC 卡都支持 SPI 传输协议,并且具有几乎相同的电气接口。尽管 SD 卡和 MMC 卡的外观尺寸和形状几乎相同, SD 卡的运行速度能够快上 4 倍,此外还具有写保护开关,可以为有版权的数据提供密码安全保护。相对于 MMC 卡而言,这些特性增加了 SD 卡受欢迎的程度。因此,SD 卡是本设计的重点。然而,测试表明,MSD 设计可以完全实现 MMC 卡的全部功能。

SD卡可在SD Bus(SD总线)模式或SPI(Serial Periph-eral Interface,串行外设接口)模式下工作。在本应用中, SD 卡与 PIC32MX 的 SPI 总线相连并在 SPI 模式下工作。在 SPI 模式下,每个方向上只使用一条数据线来传输数据。因此,该模式下的数据传输速率和用一条数据线的 SD Bus 模式相同(可高达 25 Kbps)。

除电源 (Power)和地 (Ground)之外, SPI 总线由片选(Chip Select,CS)、串行数据输入(Serial DataInput , SDI)、串行数据输出(Serial Data Output,SDO)和串行时钟信号(Serial Clock,SCLK)组成。SD卡和MMC卡在时钟的上升沿采集输入数据,在时钟下降沿设置输出数据。上电时, SD 卡以 SD Bus 模式唤醒。因此,需要初始化例程把SD卡转换到SPI模式。初始化可通过在复位命令 CMD0 接收期间设置 CS 信号(逻辑低)来完成。在 SPI 模式,所选中的卡始终对命令做出响应,这和 SD Bus 模式是不同的。如果出现数据检索问题, SD 卡就回应一个错误响应而不是超时,这和 SD Bus 模式是一样的。关于 SD 卡规范的信息,请参阅 “ 参考文献 ”。

注: 后两段信息的使用可能需要 SD 卡联盟(SD Card Association)的许可。

2009 Microchip Technology Inc. DS01169A_CN 第 15 页

Page 16: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

结论

本文档讨论了 MSD 功能驱动程序,相关的定制演示应用是使用 MSD 功能驱动程序的海量存储演示。

通常,管理通用串行总线需要开发人员处理设备标识、控制和数据传输的协议。不过, Microchip 已经对 USB细节进行了处理,并提供简单的 MSD 功能驱动程序,从而对于使用支持的 Microchip 单片机的开发人员而言,应用的实现相当简单。

参考文献

• Microchip 应用笔记 AN1176,《PIC32 USB 设备栈编程指南》http://www.microchip.com

• “Universal Serial Bus Specification, Revision 2.0” http://www.usb.org/developers/docs

• Directory Snoop™ , Version 5.01,http://www.briggsoft.com/dsnoop.htm

• FAT 文件系统规范 —— 需要许可证,http://www.microsoft.com/mscorp/ip/tech/fat.asp

• MC74VHCT125A 数据手册 , http://www.onsemi.com

• MMC 规范 —— 有些需要获得软件许可证,有些需要购买才可使用,http://www.mmca.org/compliance

• Microchip MPLAB® IDE 集成开发环境,许可证免费,下载地址: www.microchip.com/mplabide

• SCSI Primary Commands-2 (SPC-2),Revision i23, 18 July 2003,http://www.t10.org/ftp/t10/drafts/spc2/spc2i23.pdf

• SCSI Primary Commands-3 (SPC-3),Revision 21d, 14 February 2005,http://www.t10.org/ftp/t10/drafts/spc3/spc3r23.pdf

• SCSI Block Commands-2 (SBC-2), Revision 16, 13 November 2004,http://www.t10.org/ftp/t10/drafts/sbc2/sbc2r16.pdf

• SD Card Specification —— 需要许可证,http://www.sdcard.org

• SnoopyPro 0.22,http://sourceforge.net/projects/usbsnoop/

• “USB Complete: Everything You Need to Develop Custom USB Peripherals” by Jan Axelson, ISBN 0-9650819-5-8

• “Universal Serial Bus Mass Storage Class Bulk-Only Transport, Revision 1.0”http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf

DS01169A_CN 第 16 页 2009 Microchip Technology Inc.

Page 17: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

附录 A: MICROCHIP MSD 功能驱动程序的相关性

MSDEventHandler – USB 设备事件处理函数

Microchip MSD 功能驱动程序应用笔记提供了一个事件处理程序,它与 Microchip 的 AN1176 应用笔记 《PIC32USB 设备栈编程指南》兼容。此例程必须放入已定义的 USB 设备功能驱动程序表。

语法

PUBLIC BOOL MSDEventHandler(USB_EVENT event, void *data, UINT size)

参数

event – 枚举数据类型,表明已发生的事件 (见下文预定义事件)

data – 指针,指向事件相关的数据 (如果可用的话,见下文)

size – 事件相关的数据长度,以字节为单位

返回值

如果成功的话, TRUE;如果失败, FALSE

说明

更多信息,参考 AN1176 《PIC32 USB 设备栈编程指南》。

MSDInit – USB 设备初始化处理函数

初始化与 MSD 功能驱动程序关联的所有数据结构。此例程必须放入已定义的 USB 设备功能驱动程序表中。

语法

PUBLIC BOOL MSDInit(unsigned long flags)

参数

flags – 保留,传递一个 0

返回值

如果初始化通过, TRUE;否则 FALSE

说明

flags 参数作为 USB 设备功能驱动程序表的初始化标志参数传递。

注: 更多关于MSDEventHandler和MSDInit的信息,请参阅应用笔记 AN1176 《PIC32USB 设备栈编程指南》。

2009 Microchip Technology Inc. DS01169A_CN 第 17 页

Page 18: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

附录 B: MSD 功能驱动程序宏

嵌入式设备上的 USB 海量存储类提供了几个功能驱动程序宏,以便根据应用对其进行定制。

下列 MSD 功能驱动程序宏可以在嵌入式设备上的Microchip USB MSD 类中找到,这些宏由应用在usb_config.h中定义。

• MSD_USB_ENDPNT

• MSD_EP_IN_SIZE

• MSD_EP_OUT_SIZE

MSD_USB_ENDPNT

用途: MSD 功能驱动程序将发送和接收数据的端点

缺省值: 1

MSD_EP_IN_SIZE

用途: MSD 功能驱动程序端点 IN (输入)的长度,以字节为单位

缺省值: 32

MSD_EP_OUT_SIZE

用途: MSD 功能驱动程序端点 OUT (输出)的长度,以字节为单位

缺省值: 64

DS01169A_CN 第 18 页 2009 Microchip Technology Inc.

Page 19: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

附录 C: USB MSD 功能驱动程序描述符表定义

表 C-1: 设备描述符

表 C-2: 配置描述符

字段 MSD 功能驱动程序值 说明

bLength 12h 描述符大小

bDescriptorType 1 类型,始终是 USB 设备描述符

bcdUSB 200h USB 规范版本, BCD 码形式

bDeviceClass 0 设备类代码

bDeviceSubClass 0 设备子类代码

bDeviceProtocol 0 设备协议

bMaxPacketSize 10h 端点 0 大包大小

idVendor 4D8h 供应商 ID (VID)

idProduct 9 产品 ID (PID)

bcdDevice 1 设备版本号, BCD 码形式

iManufacturer 1 制造商名字符串索引

iProduct 2 产品描述字符串索引

iSerialNum 0 产品序列号字符串索引

bNumConfigurations 1 支持配置的数目

字段 MSD 功能驱动程序值 说明

bLength 9 描述符大小

bDescriptorType 2 类型,始终为 USB 配置描述符

wTotalLength 20h 所有描述符的总长度

bNumInterfaces 1 接口数量

bConfigurationValue 1 ID 值

iConfiguration 0 字符串描述符索引

bmAttributes

reserved_zero 0 始终为 0

remote_waking 1 1 (如果设备支持远程唤醒)

self_powered 0 1 (如果设备是自供电的)

reserved_one 1 始终为 1

bMaxPower 50 mA/2 (例如, 100 mA = 50)

2009 Microchip Technology Inc. DS01169A_CN 第 19 页

Page 20: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

表 C-3: 接口描述符

表 C-4: 端点描述符

表 C-5: 串行字符串描述符

字段 MSD 功能驱动程序值 说明

bLength 9 描述符大小

bDescriptorType 4 类型,始终为 USB 接口描述符

bInterfaceNumber 0 接口 ID 编号

bAlternateSetting 0 备用接口设置的 ID 编号

bNumEndpoints 2 该接口的端点数

bInterfaceClass 8 USB 海量存储接口类 ID

bInterfaceSubClass 6 USB 海量存储接口子类 ID

bInterfaceProtocol 50h USB SCSI 传输接口 BOT 协议 ID

iInterface 0 接口描述字符串索引

字段 MSD 功能驱动程序值 说明

bLength 7 描述符大小

bDescriptorType 5 类型,始终为 USB 端点描述符

bEndpointAddress

ep_num 1 端点编号

reserved 0 始终为 0

direction 1 输入 (IN)或输出 (OUT)

bmAttribute

transfer_type 0 传输类型

synch_type 1 同步类型

usage_type 0 用法类型

reserved 0 始终为 0

wMaxPacketSize 64 端点能处理的 大包

bInterval 0 端点查询数据的周期

字段 MSD 功能驱动程序值 说明

bLength 4 描述符大小

bDescriptorType 3 类型,始终为 USB 字符串描述符

wLangid[] 409h 字符串

DS01169A_CN 第 20 页 2009 Microchip Technology Inc.

Page 21: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

表 C-6: 制造商字符串描述符

表 C-7: 序列号字符串描述符

字段 MSD 功能驱动程序值 说明

bLength 34h 描述符大小

bDescriptorType 3 类型,始终为 USB 字符串描述符

wLangid[] Microchip Technology Inc. 字符串

字段 MSD 功能驱动程序值 说明

bLength 3Ah 描述符大小

bDescriptorType 3 类型,始终为 USB 字符串描述符

wLangid[] Microchip Mass Storage Drive 字符串

2009 Microchip Technology Inc. DS01169A_CN 第 21 页

Page 22: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

附录 D: 标准查询格式

标准查询格式

字节 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0 外设限定符 外设类型

1 RMB 保留

2 版本

3 过时 NORMACA HISUP 响应数据格式

4 附加长度 (n-4)

5 SCCS ACC TPGS 3PC 保留 保护

6 BQUE ENSERV VS MULTIP MCHNGR 过时 ADDR16

7 过时 WUSB16 SYNC LINKED 过时 CMDQUE VS

8

9

10

11 T10供应商标识

12

13

14

15

16

17

18

19

20

21

22

23 产品标识

24

25

26

27

28

29

30

31

32 产品修订级别

33

34

35

DS01169A_CN 第 22 页 2009 Microchip Technology Inc.

Page 23: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

附录 E: 固定格式检测数据

附录 F: 模式检测报头

固定格式检测数据

字节 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0 响应代码(70h或 71h)

1 过时

2 卷标 EOM ILI 保留 检测关键字

3

4 信息

5

6

7 附加检测长度 (n-7)

8

9 命令特定的信息

10

11

12 附加检测码

13 附加检测码限定符

14 字段替代单元代码 (Field Replacement Unit Code)

15

16 检测关键字特性信息

17

18... 附加检测字节

...n

模式检测报头

字节 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0 模式数据长度

1 介质类型

2 设备特定参数

3 块描述符长度

2009 Microchip Technology Inc. DS01169A_CN 第 23 页

Page 24: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

软件许可协议

Microchip Technology Incorporated (以下简称 “ 本公司 ”)在此提供的软件旨在向本公司客户提供专门用于 Microchip 生产的产品的

软件。

本软件为本公司及 / 或其供应商所有,并受到适用的版权法保护。版权所有。使用时违反前述约束的用户可能会依法受到刑事制裁,

并可能由于违背本许可的条款和条件而承担民事责任。

本软件是按 “ 现状 ” 提供的。任何形式的保证,无论是明示的、暗示的或法定的,包括但不限于有关适销性和特定用途的暗示保证,均不适用于本软件。对于在任何情况下、因任何原因造成的特殊的、附带的或间接的损害,本公司概不负责。

附录 G: 海量存储类功能驱动程序的源代码

Microchip 嵌入式设备上的 USB 海量存储类驱动程序的完整源代码是在免费许可证协议的基础上提供。它以一个档案文件的形式提供,可以从 Microchip 公司网站下载,地址是:

www.microchip.com.

下载档案文件之后,应查阅版本说明,了解当前的版本号以及软件的修改历史。

2009 Microchip Technology Inc. DS01169A_CN 第 24 页

Page 25: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

版本历史

版本 A (2008 年 2 月)

这是本文档的初始版本。

2009 Microchip Technology Inc. DS01169A_CN 第 25 页

Page 26: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

AN1169

DS01169A_CN 第 26 页 2009 Microchip Technology Inc.

Page 27: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

请注意以下有关 Microchip 器件代码保护功能的要点:

• Microchip 的产品均达到 Microchip 数据手册中所述的技术指标。

• Microchip 确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中 安全的产品之一。

• 目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的操

作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。

• Microchip 愿与那些注重代码完整性的客户合作。

• Microchip 或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是“ 牢不可破 ”的。

代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视

为违反了《数字器件千年版权法案(Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的软

件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。

提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含

的英文部分,因为其中提供了有关 Microchip 产品性能和使用

情况的有用信息。Microchip Technology Inc. 及其分公司和相

关公司、各级主管与员工及事务代理机构对译文中可能存在的任何差错不承担任何责任。建议参考 Microchip TechnologyInc. 的英文原版文档。

本出版物中所述的器件应用信息及其他类似内容仅为您提供便

利,它们可能由更新之信息所替代。确保应用符合技术规范,是您自身应负的责任。Microchip 对这些信息不作任何明示或

暗示、书面或口头、法定或其他形式的声明或担保,包括但不

限于针对其使用情况、质量、性能、适销性或特定用途的适用性的声明或担保。 Microchip 对因这些信息及使用这些信息而

引起的后果不承担任何责任。如果将 Microchip 器件用于生命

维持和 / 或生命安全应用,一切风险由买方自负。买方同意在

由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识

产权保护下,不得暗中或以其他方式转让任何许可证。

2009 Microchip Technology Inc.

商标

Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron、dsPIC、 KEELOQ、 KEELOQ 徽标、 MPLAB、 PIC、

PICmicro、 PICSTART、 rfPIC、 SmartShun 和 UNI/O 均为Microchip Technology Inc. 在美国和其他国家或地区的注册商

标。

FilterLab、 Linear Active Thermistor、 MXDEV、 MXLAB、SEEVAL、SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商

标。

Analog-for-the-Digital Age、 Application Maestro、CodeGuard、 dsPICDEM、 dsPICDEM.net、 dsPICworks、dsSPEAK、 ECAN、 ECONOMONITOR、 FanSense、In-Circuit Serial Programming、 ICSP、 ICEPIC、 Mindi、MiWi、MPASM、MPLAB Certified 徽标、MPLIB、MPLINK、mTouch、nanoWatt XLP、PICkit、PICDEM、PICDEM.net、PICtail、PIC32 徽标、PowerCal、PowerInfo、PowerMate、PowerTool、 REAL ICE、 rfLAB、 Select Mode、 Total Endurance、TSHARC、WiperLock 和 ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地区的商标。

SQTP 是 Microchip Technology Inc. 在美国的服务标记。

在此提及的所有其他商标均为各持有公司所有。

© 2009, Microchip Technology Inc. 版权所有。

DS01169A_CN 第 27 页

Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州Gresham 的全球总部、设计和晶圆生产厂及位于美国加利福尼亚州和印度的设计中心均通过了 ISO/TS-16949:2002 认证。公司在 PIC®

MCU 与 dsPIC® DSC、KEELOQ? 跳码器件、串行 EEPROM、单片机外设、非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS-16949:2002。此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证。

Page 28: Mass Storage Class AN1169 Final - ww1.microchip.comww1.microchip.com/downloads/en/AppNotes/01169a_cn.pdf · AN1169 DS01169A_CN 第2 页 2009 Microchip Technology Inc. PIC® MCU 存储器资源需求

DS01169A_CN 第 28 页 2009 Microchip Technology Inc.

美洲公司总部 Corporate Office2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 1-480-792-7200 Fax: 1-480-792-7277技术支持:http://support.microchip.com网址:www.microchip.com亚特兰大 AtlantaDuluth, GA Tel: 678-957-9614 Fax: 678-957-1455波士顿 BostonWestborough, MA Tel: 1-774-760-0087 Fax: 1-774-760-0088芝加哥 ChicagoItasca, IL Tel: 1-630-285-0071 Fax: 1-630-285-0075克里夫兰 ClevelandIndependence, OH Tel: 216-447-0464 Fax: 216-447-0643达拉斯 DallasAddison, TX Tel: 1-972-818-7423 Fax: 1-972-818-2924底特律 DetroitFarmington Hills, MI Tel: 1-248-538-2250Fax: 1-248-538-2260科科莫 KokomoKokomo, IN Tel: 1-765-864-8360Fax: 1-765-864-8387洛杉矶 Los AngelesMission Viejo, CA Tel: 1-949-462-9523 Fax: 1-949-462-9608

圣克拉拉 Santa ClaraSanta Clara, CA Tel: 408-961-6444Fax: 408-961-6445加拿大多伦多 TorontoMississauga, Ontario, CanadaTel: 1-905-673-0699 Fax: 1-905-673-6509

亚太地区

亚太总部 Asia Pacific OfficeSuites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel: 852-2401-1200Fax: 852-2401-3431中国 - 北京Tel: 86-10-8528-2100 Fax: 86-10-8528-2104

中国 - 成都Tel: 86-28-8665-5511Fax: 86-28-8665-7889

中国 - 香港特别行政区Tel: 852-2401-1200 Fax: 852-2401-3431

中国 - 南京Tel: 86-25-8473-2460Fax: 86-25-8473-2470

中国 - 青岛Tel: 86-532-8502-7355 Fax: 86-532-8502-7205

中国 - 上海Tel: 86-21-5407-5533 Fax: 86-21-5407-5066

中国 - 沈阳Tel: 86-24-2334-2829 Fax: 86-24-2334-2393

中国 - 深圳Tel: 86-755-8203-2660 Fax: 86-755-8203-1760

中国 - 武汉Tel: 86-27-5980-5300 Fax: 86-27-5980-5118

中国 - 厦门Tel: 86-592-238-8138 Fax: 86-592-238-8130中国 - 西安Tel: 86-29-8833-7252 Fax: 86-29-8833-7256

中国 - 珠海Tel: 86-756-321-0040 Fax: 86-756-321-0049

台湾地区 - 高雄Tel: 886-3-6578-300Fax: 886-3-6578-370

台湾地区 - 台北Tel: 886-2-2500-6610 Fax: 886-2-2508-0102

台湾地区 - 新竹Tel: 886-3-572-9526Fax: 886-3-572-6459

亚太地区

澳大利亚 Australia - SydneyTel: 61-2-9868-6733 Fax: 61-2-9868-6755

印度 India - BangaloreTel: 91-80-3090-4444 Fax: 91-80-3090-4080

印度 India - New DelhiTel: 91-11-4160-8631Fax: 91-11-4160-8632

印度 India - PuneTel: 91-20-2566-1512Fax: 91-20-2566-1513

日本 Japan - YokohamaTel: 81-45-471- 6166 Fax: 81-45-471-6122韩国 Korea - DaeguTel: 82-53-744-4301Fax: 82-53-744-4302

韩国 Korea - SeoulTel: 82-2-554-7200 Fax: 82-2-558-5932 或82-2-558-5934

马来西亚 Malaysia - KualaLumpurTel: 60-3-6201-9857Fax: 60-3-6201-9859

马来西亚 Malaysia - PenangTel: 60-4-227-8870Fax: 60-4-227-4068

菲律宾 Philippines - ManilaTel: 63-2-634-9065Fax: 63-2-634-9069新加坡 SingaporeTel: 65-6334-8870 Fax: 65-6334-8850

泰国 Thailand - BangkokTel: 66-2-694-1351Fax: 66-2-694-1350

欧洲奥地利 Austria - WelsTel: 43-7242-2244-39Fax: 43-7242-2244-393丹麦 Denmark-CopenhagenTel: 45-4450-2828 Fax: 45-4485-2829法国 France - ParisTel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79德国 Germany - MunichTel: 49-89-627-144-0 Fax: 49-89-627-144-44意大利 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781荷兰 Netherlands - DrunenTel: 31-416-690399 Fax: 31-416-690340西班牙 Spain - MadridTel: 34-91-708-08-90Fax: 34-91-708-08-91英国 UK - WokinghamTel: 44-118-921-5869Fax: 44-118-921-5820

全球销售及服务网点

03/26/09