关于单片机读写u盘f16和f32文件系统.doc
约58页DOC格式手机打开展开
关于单片机读写u盘f16和f32文件系统,摘要本文以51单片机为例介绍如何扩展usb接口进行对u盘的读写,并详细介绍fat16、fat32文件系统的细节以及如何编码实现单片机对文件系统的常用操作,顺带提到一点关于u盘兼容性问题的解决经验。在这里单片机是host,u盘是slave。在嵌入式系统中实现host很有意义,可以直接扩展出大容量的外存储器。只要对单片机有...
内容介绍
此文档由会员 wanli1988go 发布
摘要
本文以51单片机为例介绍如何扩展USB接口进行对U盘的读写,并详细介绍FAT16、FAT32文件系统的细节以及如何编码实现单片机对文件系统的常用操作,顺带提到一点关于U盘兼容性问题的解决经验。在这里单片机是host,U盘是slave。
在嵌入式系统中实现host很有意义,可以直接扩展出大容量的外存储器。
只要对单片机有一点点了解的人应该可以很顺利地阅读下去,如有简单的C语言编程基础更佳。本文是科普性质,并不面面俱到,有一点应用笔记的味道。章节间关联性较强,最好按顺序来阅读。
本文资料完全来自网络,再加入了笔者自己的理解和实践结果。本文末尾列出了所有的参考资料。如果觉得有知识产权问题请在21ic社区发信给fjh。
仓促成文,错误绝对存在,但希望不影响阅读。
关键词 USB枚举过程;读写U盘;SL811;FAT16;FAT32
(略)
目录
摘要 I
Abstract II
符号说明 III
第1章 硬件设计 1
1.1 硬件概述 1
第2章 U盘的逻辑结构 2
2.1 U盘的逻辑结构 2
第3章 USB通信协议 3
3.1 USB设备开工的机理 3
3.2 USB描述符 3
3.3 USB设备的枚举过程(开工过程) 4
3.4 USB1.1协议 6
3.4.1 重新认识枚举过程 7
3.4.2 基于SL811的USB底层传输函数实现要点 9
3.4.3 usbXfer()函数 10
3.4.4 ep0Xfer()函数 20
3.5 块传输(Bulk) 22
3.6 SCSI命令 24
3.6.1 跟U盘初始化有关的SCSI命令 24
3.6.2 Read和Write U盘的命令 27
3.7 U盘兼容性问题的探讨 29
第4章 微软的文件系统 34
4.1 FAT16文件系统简介 34
4.1.1 保留区 34
4.1.2 FAT区 37
4.1.3 根文件夹 40
4.1.4 数据区 40
4.2 FAT32文件系统简介 40
4.3 FAT文件系统的局限性 41
第5章 编码实例分析 42
5.1 需求简述 42
5.2 文件结构 42
5.3 Main.c 42
5.4 USB.c 43
5.5 timer.c 44
5.6 filesys.c 44
5.6.1 变量说明 44
5.6.2 扇区读写函数 44
5.6.3 询问下一簇号函数 45
5.6.4 FAT初始化函数(BPB信息分析) 45
5.6.5 Open Files 47
5.6.6 创建文件 50
5.6.7 写入文件 51
第6章 使用CH375的解决方案 52
6.1 只作简单介绍 52
结论 53
参考文献 54
致谢 55
第1章 硬件设计
1.1 硬件概述
先详细介绍基于Cypress公司的SL811芯片的扩展方案,基于国内南京沁恒电子的CH375芯片的方案最后介绍。本文尽量介绍关于USB、U盘和文件系统等平台无关的内容,SL811硬件平台方面的内容不可避免要涉及到一点,但尽量控制到最少。
硬件很简单,详见protel文件(省略了无关的部分,比较粗糙,凑合看…)。主要是扩展一片32K的外部RAM 62256作为数据缓冲,同时分配好SL811的地址。通过51单片机的A15地址线分别连接到外部RAM 62256和SL811的片选CS端,来区分两者的地址,可见RAM占据低32K地址空间,而SL811依“写地址”和“读写数据地址”分别占据8000H和8001H两个字节的地址空间。
参考文献
[1] USB Specification Revision 1.1 & 2.0
[2] USB Mass Storage Class UFI Command Specification Revision 1.0
[3] USB Mass Storage Class Control/Bulk/Interrupt(CBI) Transport Revision 1.0
[4] USB Mass Storage Class Bulk-Only Transport Revision 1.0
[5] SCSI Block Commands -2 (SBC-2) Revision 8
[6] SL811HS/SL811HST Application Notes
[7] SL811HS datasheet
[8] 4.5万字透视FAT32系统
[9] 优盘文件系统(FOR C),wenxinglu
[10] USB 项目技术报告, 北航 frank
[11] Cypress SL811HS 评估软件包
[12] FAT32 File System Specification,微软
[13] FAT32 File System Specification中文译本,夏新khalai
[14] 《U盘的兼容性问题已经解决,谈谈我的感受》,网友zycfrank
[15] 《在嵌入式系统中提高U盘访问兼容性的几种措施》,电子产品世界,张井刚、刘德活
[16] 第三章关于USB枚举过程的内容来自驱动开发网
[17] USB通讯若干问题探讨,北航 frank
[18] 还有若干资料来自21ic网友computer00的“USB资料分散包”
本文以51单片机为例介绍如何扩展USB接口进行对U盘的读写,并详细介绍FAT16、FAT32文件系统的细节以及如何编码实现单片机对文件系统的常用操作,顺带提到一点关于U盘兼容性问题的解决经验。在这里单片机是host,U盘是slave。
在嵌入式系统中实现host很有意义,可以直接扩展出大容量的外存储器。
只要对单片机有一点点了解的人应该可以很顺利地阅读下去,如有简单的C语言编程基础更佳。本文是科普性质,并不面面俱到,有一点应用笔记的味道。章节间关联性较强,最好按顺序来阅读。
本文资料完全来自网络,再加入了笔者自己的理解和实践结果。本文末尾列出了所有的参考资料。如果觉得有知识产权问题请在21ic社区发信给fjh。
仓促成文,错误绝对存在,但希望不影响阅读。
关键词 USB枚举过程;读写U盘;SL811;FAT16;FAT32
(略)
目录
摘要 I
Abstract II
符号说明 III
第1章 硬件设计 1
1.1 硬件概述 1
第2章 U盘的逻辑结构 2
2.1 U盘的逻辑结构 2
第3章 USB通信协议 3
3.1 USB设备开工的机理 3
3.2 USB描述符 3
3.3 USB设备的枚举过程(开工过程) 4
3.4 USB1.1协议 6
3.4.1 重新认识枚举过程 7
3.4.2 基于SL811的USB底层传输函数实现要点 9
3.4.3 usbXfer()函数 10
3.4.4 ep0Xfer()函数 20
3.5 块传输(Bulk) 22
3.6 SCSI命令 24
3.6.1 跟U盘初始化有关的SCSI命令 24
3.6.2 Read和Write U盘的命令 27
3.7 U盘兼容性问题的探讨 29
第4章 微软的文件系统 34
4.1 FAT16文件系统简介 34
4.1.1 保留区 34
4.1.2 FAT区 37
4.1.3 根文件夹 40
4.1.4 数据区 40
4.2 FAT32文件系统简介 40
4.3 FAT文件系统的局限性 41
第5章 编码实例分析 42
5.1 需求简述 42
5.2 文件结构 42
5.3 Main.c 42
5.4 USB.c 43
5.5 timer.c 44
5.6 filesys.c 44
5.6.1 变量说明 44
5.6.2 扇区读写函数 44
5.6.3 询问下一簇号函数 45
5.6.4 FAT初始化函数(BPB信息分析) 45
5.6.5 Open Files 47
5.6.6 创建文件 50
5.6.7 写入文件 51
第6章 使用CH375的解决方案 52
6.1 只作简单介绍 52
结论 53
参考文献 54
致谢 55
第1章 硬件设计
1.1 硬件概述
先详细介绍基于Cypress公司的SL811芯片的扩展方案,基于国内南京沁恒电子的CH375芯片的方案最后介绍。本文尽量介绍关于USB、U盘和文件系统等平台无关的内容,SL811硬件平台方面的内容不可避免要涉及到一点,但尽量控制到最少。
硬件很简单,详见protel文件(省略了无关的部分,比较粗糙,凑合看…)。主要是扩展一片32K的外部RAM 62256作为数据缓冲,同时分配好SL811的地址。通过51单片机的A15地址线分别连接到外部RAM 62256和SL811的片选CS端,来区分两者的地址,可见RAM占据低32K地址空间,而SL811依“写地址”和“读写数据地址”分别占据8000H和8001H两个字节的地址空间。
参考文献
[1] USB Specification Revision 1.1 & 2.0
[2] USB Mass Storage Class UFI Command Specification Revision 1.0
[3] USB Mass Storage Class Control/Bulk/Interrupt(CBI) Transport Revision 1.0
[4] USB Mass Storage Class Bulk-Only Transport Revision 1.0
[5] SCSI Block Commands -2 (SBC-2) Revision 8
[6] SL811HS/SL811HST Application Notes
[7] SL811HS datasheet
[8] 4.5万字透视FAT32系统
[9] 优盘文件系统(FOR C),wenxinglu
[10] USB 项目技术报告, 北航 frank
[11] Cypress SL811HS 评估软件包
[12] FAT32 File System Specification,微软
[13] FAT32 File System Specification中文译本,夏新khalai
[14] 《U盘的兼容性问题已经解决,谈谈我的感受》,网友zycfrank
[15] 《在嵌入式系统中提高U盘访问兼容性的几种措施》,电子产品世界,张井刚、刘德活
[16] 第三章关于USB枚举过程的内容来自驱动开发网
[17] USB通讯若干问题探讨,北航 frank
[18] 还有若干资料来自21ic网友computer00的“USB资料分散包”