U盘实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
U盘实现

1、资源需求 (1)一个接口 指明接口类、子类、协议字段。使用批量端点输入、输出。 (2)端点描述符 两个:一个输入、一个输出。 (3)支持类特殊请求 两个请求:Get Max LUN 和 Bulk_Only Mass Storage Reset请求。 2、数据传输过程分析 (1)数据传输发生在批量端点 传输的过程跟控制传输差不多,先由主机发出命令、设备解析命令(如果主机输出,则准备接收数据;如果主机要获取数据,则要将数据准备好)、设备返回命令执行情况。 (2)命令数据包 头部15字节:说明数据方向、传输长度。 命令从15开始,最大长度可为16个字节。 (3)状态包 共13个字节:主要表明命令执行的状态。 3、UFI命令集 (1)查询命令 12个字节,操作代码0x12。 设备应该返回36字节,有了这个信息后,主机方可以确定该磁盘是否可移除。 (2)读格式化容量 12个字节,操作代码0x23。 应该返回12个字节,主要包括块数、每块字节数。 (3)读容量 12个字节,操作代码0x25。 返回8个字节,设备的实际容量。 (4)读命令 12个字节,操作代码0x28。代码中主要包括逻辑块地址、传输长度。 然后主机不停的发IN,直到读完所需数据。 再获取命令执行状态。 (5)写命令 12个字节,操作代码0x2A。 其它跟读差不多。 二、ST的“Mass Storage”结构分析 1、程序静态结构分析 (1)底层库文件 与鼠标例程一样,还是5个c源文件,8个头文件。 (2)上层协议实现文件 除了鼠标例程有的:hw_config.c、usb_pwr、usb_istr.c、usb_desc.c、usb_prop.c等5个文件之外,又加了usb_endp.c、usb_bot.c、usb_scsi.c、scsi_data.c、memory.c、msd.c等6个文件。 Hw_config.c实现硬件配置,主要由主程序调用。Usb_pwr.c实现usb电缆的连接与断开、挂起与唤醒的处理。Usb_istr.c主要实现中断类别和中断例程调用。Usb_desc.c主要是实现特定设备类所需要的描述符。Usb_prop.c主要实现特定设备类请求和控制传输过程的用户回调函数。 (3)新文件作用的简单认识 先把各个源文件粗略浏览一遍,了解它们的大概用途。 Usb_endp.c非常简单,就两个函数,分别处理端点1的IN和端点2的OUT。 Usb_bot.c是一个非常重要的源文件,可以说大容量设备类的主要工作是由它完成的。Bot的意思是Bulk-Only type,在近批量传输协议下,命令的传送也是由批量端点完成的。 实现了六个函数:处理输入、处理输出、解析命令、取消传输、准备传输、设置状态。 Usb_scsi.c主要是实现具体UFI命令的处理,像读扇区、写扇区、读容量等命令的处理过程都是在这里完成的。 Scsi.c主要是保存一些数据。向主机的读容量等命令,返回数据具有确定的格式,都放在这个文件里。 Memory.c主要实现三个函数:读存储区、写存储区和地址管理。 Msd.c主要实现SD卡的操作。 2、执行流程模拟 当然,这个执行流程的模拟是基于我对U盘实现过程的理解,有些地方不一定正确。 (1)初始化 这个初始化是指USB电缆接通之前,先要设置IO、设置时钟、设置中断,然后对USB接口模块和寄存器模块进行初始化,然后接通USB电缆。 (2)在复位中断中 根据鼠标例程的做法,在复位中断中,将会使能端点0。同时对需要使用的端点进行类型和描述符表的初始化。那么在U盘实现时,应该要使用两个端点寄存器,初始化为批量传输模式,且为双缓冲工作方式。 (3)进入枚举阶段 经过获取设备描述符、配置描述符、字符串描述符,主机知道了这是一个大容量设备以及它所采取的协议。 然后主机加载相应的驱动程序,给出类特殊请求,获取逻辑盘号,在PC上显示磁盘。让设备准备好接受UFI命令。 (4)进入信息获取阶段 在用户读取盘内文件之前,主机先要获得磁盘的容量、文件系统格式等信息。这个信息是在批量端点上获得的。 主机利用批量输出端点发出命令信息,设备再批量输出端点中断中得到命令,经过解码,然后根据主机的要求在批量输入端点缓冲区,准备号主机所需要的信息。 主机通过批量输入端点获得信息后,在数据传输的最后一次中断中,设备又准备好命令执行的状态信息。等到主机获取该状态信息后,一次命令执行就算是完成了。 1、从main.c开始 (1)main函数的执行流程 Set_System(); //设置时钟、端口等。 Set_USBClock(); //设置usb的时钟 USB_Interrupts_Config(); //设置中断 Led_Config(); //设置所使用的到的灯。 MS

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档