没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
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 Stor
age Reset,所有的 Mass Storage 类设备都必须支持这两个请求。
Bulk-Only Mass Storage Reset(bmRequestType=00100001b and bReques
t= 11111111b)用来复位 Mass Storage 设备及其相关接口。
Get_Max_LUN(bmRequestType= 10100001b and bRequest= 11111110b)用
来确认设备支持的逻辑单元数。Max LUN 的值必须是 0~15。注意:LUN 是从 0 开
始的。主机不能向不存在的 LUN 发送 CBW。
支持 BOT 传输的 Mass Storage 设备接口描述符要求如下:
接口类代码 bInterfaceClass=08h,表示为 Mass Storage 设备;
接口类子代码 bInterfaceSubClass=06h,表示设备支持 SCSI Primary Com
mand-2(SPC-2);
协议代码 bInterfaceProtocol 有 3 种:0x00、0x01、0x50,前两种需要使
用中断传输,最后一种仅使用批量传输(BOT)。
支持 BOT 的设备必须支持最少 3 个 endpoint:Control, Bulk-In 和 Bulk-O
ut。USB2.0 的规范定义了控制端点 0。Bulk-In 端点用来从设备向主机传送数据。
Bulk-Out 端点用来从主机向设备传送数据。
Bulk-Only 传输(BOT)
像控制传输一样,BOT 也是由 Command 阶段,可选的数据阶段和状态阶段组
成。所有的 command 请求都可能有或没有 Data 阶段。下图说明了 BOT 的 Comman
d 传输,Data-In,Data-Out 传输及 Status 传输。
剩余14页未读,继续阅读
资源评论
- z22550002014-08-25很详细,对USB的体系理解作用还是很大的。
- u0118833612015-07-02很不错,对于初学者的我这样的讲解很通彻,明了。
desertse1982
- 粉丝: 0
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功