- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
USB Mass Storage学习笔记-STM32+FLASH实现U盘
?
一、???????????
采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘。
?
?? 1、STM32的USB控制器
??? STM32F103的MCU自带USB从控制器,符合USB规范的通信连接;PC主机和微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB外设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。USB模块同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。
每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。
当USB模块识别出一个有效的功能/端点的令牌分组时,(如果需要传输数据并且端点已配置)随之发生相关的数据传输。USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。
在数据传输结束时,USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的中断来处理。
USB的中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:
(1)USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。固件在处理中断前应当首先确定中断源。
(2)USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。
(3)USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。
图 1、USB设备框图
?
?? 2、大页NAND K9F1G08
????? Nand flash 以页为单位读写数据,而以块为单位擦除数据。根据NAND的容量等级又将NANDFLASH分为大页NAND和小页NAND;K9F1G08就是大页NAND,它的页大小为(2K+64)Byte,块大小为(128K+4K)Byte。K9F1208U0M为小页NAND,它的页大小为(512+16)Byte,块大小为(16K+512)Byte。
????? 由于写数据至FLASH时,只能将指定的位变为0,而不能将指定的位变位1。因此在写一个页的数据前,必须先擦除(将所有的位全部置1),否则写数据会失败。
????? 在编制FLASH的读写程序时,需要传递三个参数,要操作的地址,要操作的数据缓存,要操作的数据长度;在写操作时,还要有擦写和坏块管理。
?
?
3、USB Mass storage Bulk Only
Mass Storage类支持两个传输协议:
1、Bulk-Only 传输(BOT)
2、Control/Bulk/Interrupt传输(CBI)
Mass Storage类规范定义了两个类规定的请求:Get_Max_LUN和Mass Storage Reset,所有的Mass Storage类设备都必须支持这两个请求。
Bulk-Only Mass Storage Reset(bmRequestType and bRequest=)用来复位Mass Storage设备及其相关接口。
Get_Max_LUN(bmRequestType= and bRequest=)用来确认设备支持的逻辑单元数。Max LUN的值必须是0~15。注意:LUN是从0开始的。主机不能向不存在的LUN发送CBW。
?
支持BOT传输的Mass Storage设备接口描述符要求如下:
接口类代码bInterfaceClass=08h,表示为Mass Storage设备;
接口类子代码bInterfaceSubClass=06h,表示设备支持SCSI Primary Command-2(SPC-2);
协议代码bInterfaceProtocol有3种:0x00、0x01、0x50,前两种需要使用中断传输,最后一种仅使用批量传输(BOT)。
?
支持BOT的设备必须支持最少3个endpoint:Control, Bulk-In和Bulk-Out。USB2.0的规范定义了控制端点0。Bulk-In端点用来从设备向主机传送数据。Bulk-Out端点用来从主机向设备传送数据。
?
Bulk-Only传输(BOT)
像控制传输一样,BOT也是由Command阶段,可选的数据阶段和状态阶段组成。所有的command请求
文档评论(0)