基于嵌入式系统U盘开发的设计.docx
- 文档编号:9854366
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:15
- 大小:62.44KB
基于嵌入式系统U盘开发的设计.docx
《基于嵌入式系统U盘开发的设计.docx》由会员分享,可在线阅读,更多相关《基于嵌入式系统U盘开发的设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于嵌入式系统U盘开发的设计
湖南文理学院芙蓉学院
课程设计报告
课程名称:
嵌入式系统课程设计
专业班级:
通信工程1301班
学生姓名:
王海波
指导教师:
邵湘怡
完成时间:
2016年6月22日报告成绩:
评阅意见:
评阅教师
日期
湖南文理学院制
基于嵌入式系统u盘开发的设计1
一、设计题目1
二、设计内容及要求1
2.1设计内容1
2.2设计要求1
三、设计作用与目的2
四、系统设计方案2
4.1系统总体设计2
4.2简要阐述系统工作原理3
五、系统硬件设计3
5.1硬件电路3
5.2基本程序结构4
5.2.1.USB设备端的固件分以下几个层次:
4
5.2.2.在调试的时候,从现象上来看,分成以下几个阶段性的步骤5
5.2.3.检查USB器件工作与否5
5.2.4.提供描述符6
5.3硬件设计6
六、系统软件设计7
6.1USB协议7
6.2BULK_ONLY和UFI协议8
6.3FAT3211
6.4软件系统模块11
七、仿真调试分析14
八、嵌入式系统学习心得14
九、参考文献14
基于嵌入式系统u盘开发的设计
一、设计题目
基于嵌入式系统u盘开发的设计
二、设计内容及要求
2.1设计内容
随着USB技术和闪存技术的飞速发展,移动存储设备的速度和容量日新月异,但在工业控制的上位机和下位机之间,数据传输依然采用传统的串并口技术,特别对一些前端的便携式采集系统,需要采集后临时存储,再拿回来传给作为上位机的PC机进行数据处理,给人们带来很多不变,为此,本文提出了一种方法--利用U盘的便捷特性开发一种基于嵌入式的USB读写器,方便地将采集数据以文件方式写入U盘,PC机不需要任何特殊驱动便可以完成对数据的处理回放。
利用本方法可以彻底解决下位机与PC机之间的数据传输难的问题。
2.2设计要求
据U盘结构特点,设计了一种基于嵌入式系统U盘的系统结构,可以将U盘集成到无线数据卡上,或者手机上,以实现数据存储的功能。
在进行USB开发过程中,比较难的是对设备端的程序(称为固件,Firmware)进行调试。
由于USB协议有严格的时间要求,这就使得程序必须在有效时间内对某些请求或状态进行处理,否则,USB将无法正常工作。
因此,在调试过程中,较多借助LED1,LED2显示输出的一些信息来辅助调试,定位问题所在。
比如,在某个函数中加入LED1,LED2显示语句,程序运行时看有否相应的LED1,LED2显示输出,借此来判断此函数是否得到了执行。
调试工作基本分二步进行:
首先对外部设备(单片机部分)借助PC调试软件(从网上下载BusHound)将设备端的USB协议(主要有描述符请求、端口配置、地址设置以及
基本数据交换)调通。
然后,用调试好的USB设备接口来嵌入文件系统功能。
三、设计作用与目的
根据U盘结构特点,设计了一种基于嵌入式系统U盘的系统结构,可以将U盘集成
到无线数据卡上,或者手机上,以实现数据存储的功能
四、系统设计方案
4.1系统总体设计
图1USB读写器结构图
4.2简要阐述系统工作原理
SB读写器结构框图如图1所示,主要由MSP430F149和SL811HS构成,MSP430支持串口输入和14位的并口输入,P2.7用作中断唤醒位,P2.6用作标准位区分数据和命令,通过P4口向SL811发送控制信号,P6用作普通的双向总线接口与SL811进行数据交换,P1.1支持中断唤醒接收SL811的中断请求。
五、系统硬件设计
5.1硬件电路
下图分别为PDIUSBD12的引脚定义,其中,下列几个方面在制作电路板时应该注意。
图2PDIUSBD12引脚图
a)GND接地,VDD接正(3.3V或5V),如果芯片工作在3.3V,则Vout3.3与VDD都接3.3V;如果芯片工作在5V,则这时Vout3.3会输出3.3V的电压,用于提供给D+作参考电压,因为此参考电压必须为3.3V。
对于U盘来说,由于USB接供的是5V电压,因此应该按后一种接法接。
即GND接USB接口中的GND,VDD接USB接口中的VDD,D+D-分别接USB接口中的对应位。
b)XTAL1和XTAL2按传统接法。
c)PDIUSBD12与MCUAT-89C55WD的连接方法见下表
表1PDIUSBD12与MCUAT-89C55WD的连接方法
PDIUSBD12引脚
MCUAT-89C55WD引脚
DATA<0>~DATA<7>
P0.0~P0.7(AD0~AD7)
ALE
ALE/PROG
CS_N
P1.6
RESET_N
P1.7
INT_N
P3.2(INT0)
SUSPEND
P3.3
WR_N
P3.6(WR)
RD_N
P3.7(RD)
A0
接GND
d)DMARQDMACK_NEOT_NGL_NCLKOUT引脚悬空,可作为扩充功能使用。
e)MCUAT-89C55WDP1.2和P1.3接2个低电平有效显示灯LED1和LED2。
5.2基本程序结构
5.2.1.USB设备端的固件分以下几个层次:
表2固件层次
固件模块
功能
Main.c
进行各种初始化操作、寄存器设置、
中断设置
intr.c
中断服务程序,负责将不同类型的
中断转向不同的地方
usb_op.c
D12硬件抽象层,所有的上层模块都必须通过此模块与USB芯片打交道
usb_prtcl.c
设备枚举需要的设备描述符,配置描述符,接口描述符,端口描述符都由此模块来执行提供
endpoint2_bulk_only.C
所有massStorage协议
CBW,CSW,DATA的处理及FLASH的读写都
由此模块来处理
5.2.2.在调试的时候,从现象上来看,分成以下几个阶段性的步骤
1、USB芯片正常工作,可以实现软连接,此时PC机上会出现“未知设备类型”的USB设备;2、向主机提供普通USB设备提供描述符,提供正确的VID和PID后,PC能够识别设备,但要求提供设备的驱动程序;3、安装驱动程序后,使用周立功单片机公司提供的UsbDebug.exe简单调试端点1和2,确保其均可传输数据,验证硬件及固件的正确性;4、按MassStorage不得Bulk-Only模式提供描述符,PC机上设备类型变成MassStorageDevice;5、响应了Bulk-Only的Inquiry命令,可以出现盘符了,但尚无法访问磁盘;6、提供了其他所有的UFI命令(SCSI子集),开始读取磁盘0扇区(BPB区)的内容按照FAT12的格式7、在AT-89C55WDEEPROM虚拟一张软盘,可以正确读取信息,可以访问盘符,列目录为空;8、,软盘中放一个可执行的文件,可以正常运行这个可执行文件;8、创建文件,向设备发出Write命令,等等。
下面从具体实际操作方面来描述调试各阶段的步骤
5.2.3.检查USB器件工作与否
确定USB芯片是否已经正常工作,是所有调试的基础,得到电路板之后,这是一个首先要解决的问题。
判断USB芯片是否已经工作,可以使用SoftConnect,则在主程序中进行软连接后,如果PC机上出现未知设备,则说明USB进行软连接正常,也说明芯片已经工作了。
另外就是使用BusHound,观察USB总线上的数据,从而判断主机与设备之间的通信已经进行到哪一步了。
在主程序中,对USB初始化过程为:
1初始化MCU的各种端口;
2进行中断初始化,设置中断服务程序入口地址,将MCU的中断方式设置为低电平触发,因为D12只要进入中断后INT_N就一直为低。
3断开SoftConnect,延时1秒后再次连接
4进入主程序循环,等待中断的到来
5由中断服务程序处理所有与USB有关的操作。
5.2.4.提供描述符
USB设备的调试过程其实就是根据主机的请求,不断地向主机提供各种信息的过程。
因此,了解主机按照什么样的顺序向设备发出请求,即Windows对USB设备的枚举顺序是非常有必要的:
GetDeviceDescriptor。
主机主要对Length域感兴趣,发送内容一定要正确,特别是第2字节type一定为0x01,即Device;否则,主机将不响应,或这时由于主机对Device的描述符将有多长实际上都不知道,所以这个步骤只是试探性的,目的是得到真正长度,第三步中才正而巴经地读取DeviceDescriptor。
5.3硬件设计
系统采用TI公司的MSP430F149作为MCU,Cypress公司的SL811HS作为USB设备控制器,充分发挥各自优势满足低功耗要求。
MSP430
TI公司的MSP430系列单片机是一种超低功耗的混合信号控制器,针对不同的应用而由各种不同的
模块组成,这些微控制器可用电池工作,且使用的时间很长,MSP430单片机具有16位RISC结构,CPU中的16个寄存器和常数发生器使其能达到最高的代码效率,灵活的时钟源可以使器件的功率消耗最低,数字控制的振荡器(DCO)可使器件从低功耗模式迅速唤醒,在短于6μs的时间内激活到活跃的工作方式,非常的内/外设和I/O端口资源,端口P1和P2支持中断唤醒。
SL811HS
Cypress公司的SL811HS是一款超低功耗的USB主/从设备控制器,主设备或从设备模式由软件控制,USB主/从设备控制器支持全高速和低速数据传输,内部256字节的SRAM缓存,访问时地址自动加1,可大大缩短读写指令周期,具有标准的8位双向微处理器总线接口,其中从设备模式下支持DMA。
六、系统软件设计
为了使上位PC机能够直接读取该读写器写入U盘的数据,数据存储按照FAT32文件管理方式存储,其中涉及USB和UFI协议以及FAT32文件存储格式。
6.1USB协议
USB(通用串行总线)用于将USB接口的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构,是一种快速、灵活的总线接口,USB的传输类型有控制(control)、批量(bulk)、中断(interrupt)和同步(synchronous)传输4种,它最大的特点是易于使用,即插即用,主要是用在中速和低速的外设。
控制数据用于在USB接入总线时对其进行配置,其他的驱动软件可以根据具体的应用来选择使用控制传输,这种数据传输不会丢失数据。
典型的批量数据包括象使用打印机或扫描仪时所出现的大数据量的数据,这种批量数据是连续的,通过在硬件中实现差错检测功能,并且有选择地进行一定的应进重试操作,可以在硬件层次上保证数据的可靠交换。
由设备自发产生的数据传输是中断数据传输,这类数据传输可以由USB设备在任意时刻发起,而且USB总线以不低于设备说明的速率进行传输。
同步数据在产生、传送和处理过程中是连续的和实时的,在稳定的同步数据发送和接收速率中包含了相应的时钟信息,为了保持定时关系,同步数据必须按照接收的速率进行传输。
6.2BULK_ONLY和UFI协议
USB设备分为5大类,即显示器、通信设备、音频设备、人机输入和海量存储。
通常所用的U盘、移动硬盘均属于海量存储类。
海量存储类的规范中包括4个独立的子规范,即CBI传输、Bulk-Only传输、ATA命令块、UFI命令规范。
前两个协议定义了数据/命令/状态在USB总线上的传输方法,Bulk-Only传输协议仅仅使用Bulk端点传送数据/命令/状态,CBI传输协议则使用Control/bulk/interrupt三种类型的端点进行数据/命令/状态的传送。
后两个协议定义了存储介质的操作命令,ATA协议用于硬盘,UFI协议则针对USB移动存储,U盘读写器的设计遵循Bulk-Only传输协议和UFI命令规范。
UFI命令块规范是针对USB移动存储而制定的,它总共定义了19个12字节长度的操作命令。
Bulk-Only事务以主机向设备发送CBW(CommandBlockWarp)包,并以建立相应的数据传输开始的,设备接收到CBW包,检查并解释它,试图满足主机的要求,并通过CSW(CommandStateWrap)包向主机返回状态信息。
CBW是主机通过Bulk-Out端点向设备发送的命令块包,在CBW中使用方向位和数据传输长度域指明期待的传输,CBW必须起始于包边界,并且必须以31字节的短包传输结束,相继的数据包和CSW包必须开始于一个新的包边界,所有的CBW包必须按低字节在前的次序传输。
CBW包结构如图2所示,各域含义如下:
表3CBW包结构
字节
7
6
5
4
3
2
1
0~3
命令块包标识
4~7
命令块标记
8~11
数据传输长度
12
命令块标旗
13
预留
逻辑单元号
14
预留
CBWCB长度
15~30
CBWCB
1)命令块包标识。
CBW包标记,表明这是一个CBW包,这个域的值为43425355H。
2)命令块标记。
当设备返回相应的CSW包时,必须使命令状态标记域的值与此值相同。
3)数据传输长度。
指明命令执行期间在Bulk端点上传数据的字节长度,如果这个域的值是0,则在CBW和CSW之间设备和主机不传输任何数据,并且设备将忽略在命令块标旗域中的方向位的值。
4)命令块标旗。
方向位规定了Bulk端点数据传输的方向,其他位预留。
5)逻辑单元号。
指定命令块被发送到的逻辑单元号,如果设备不支持多个逻辑单元号,则主机将这个域设置为0。
6)CBWCB长度,定义了CBWCB的有效长度,合法值为1-16。
7)CBWCB。
由设备执行的命令,由设备解释。
CSW向主机表明来自于CBW包的命令块的执行状态。
设备收到CBW包解析处理后将通过Bulk-In端点发送一个CSW包。
CSW开始于包边界,并以13字节的短包结束,结构如图3所示,各域含义如下:
表4命令状态包结构
字节
7
6
5
4
3
2
1
0
0~3
命令状态包标识
4~7
命令状态标记
8~11
数据残余
12
命令执行状态
1)命令状态包标识。
CSW包的标记,表明这是一个CSW包,这个域的值为53425355H。
2)命令状态标记。
次域的值域CBW包的命令块标记相同。
3)数据残余。
实际数据传输量与CBW包中规定的数据传输长度的差值。
4)命令执行状态,表明命令成功或失败信息,如果命令执行成功,则设备将设置此域的值为0,非0值;则表明失败或错误。
UFI是针对USB移动存储而制定的命令块协议,它规定了主机和设备进行信息交换所使用的命令块、数据和状态信息,Bulk-Only传输协议定义了传输这些信息的方法,其中UFI命令块是封装在CBW包中的CBWCB,设备通过读取CBWCB确定具体要执行何种操作命令(如读命令),如何完成这个命令(如从闪存的哪个地址读,需要读取的长度),设备将命令的执行状态封装成CSW返回给主机。
UFI用于大多数命令的12字节命令块的描述,结构如图4所示,其中各参数意义如下:
1)操作命令代码。
指明所需要执行的操作命令;
2)逻辑单元号。
指明命令将发送到哪个逻辑单元,如果设备只有一个逻辑单元,则此域的值为0。
3)逻辑块地址。
命令操作的起始地址。
4)传输长度,指明请求传输的数据量,通常以"扇区"作单位,但是有几个命令是以"字节"作单位的,对于这些命令,传输长度域可以以不同的名字标识,若此域的值为0,则表面没有数据需要传输。
5)参数列表长度,用于指定发送到设备的字节数,这个域典型的应用于发送到设备的参数命令块(如模式参数、诊断参数等),若此域的值为0,则表面没有数据需要传输。
6)分配长度,指明主机已经分配的用于返回数据的最大字节长度,若此值为0,则表明没有数据需要传输。
表5UFI结构
字节
7
6
5
4
3
2
1
0
0
操作命令代码
1
逻辑单元号
预留
2~5
逻辑块地址
6
预留
7~8
传输长度或参数列表长度或分配长度
9~11
预留
6.3FAT32
FAT是Microsoft较早推出的文件系统,具有高度的兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT由引导扇区、FAT1表、FAT2表、目录和文件区组成(其中FAT2表是FAT1表的备份)。
磁盘的管理是以扇区为单位的,而移动存储设备则是以块为单位的,FAT将块映射成扇区,原理相同,FAT将磁盘空间以一定数目的扇区为单位进行划分,这样的单位成为"簇"。
通常情况下,每扇区512字节的原则是不变的,簇的大小一般是2n(n为整数)个扇区的大小。
所以以簇为单位而不以扇区为单位进行磁盘的分配,是因为当区分容量较大时,采用512字节的扇区管理,会增加FAT表的项数和大文件存取的消耗,使文件系统效率不高。
引导扇区DBR(DOSBootRecord)通常占用分区的第0扇区,共512字节,FAT表紧随其后。
DBR的第一部分是一个x86跳转指令、厂商标志和操作系统版本号,接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的消息,通常称之为BPB。
最后是引导程序代码以及扇区结束标志。
BPB中记录了扇区大小、簇的扇区数、保留扇区数、FAT表大小和文件系统类型等重要参数,用于文件的索引和定位计算。
6.4软件系统模块
USB读写器软件由主模块、USB模块、BULK模块、FAT模块和中断处理模块组成。
各模块之间相互协调调用,共同完成对U盘文件的读写创建。
USB模块负责检测USB设备的移入/移出,对插入的设备进行枚举,分配设备地址端点号,配置设备接口端点描述符,建立BULK_ONLY输入/输出通道,BULK模块则在已建立的BULK_ONLY输入/输出通道发送CBW数据包,并接收CSW数据包,通过CBW中嵌入的CBWCB信息确定对U盘读/写操作的扇区位置和大小,FAT模块主要完成簇和扇区间的索引定位,即在U盘内寻址,利用BPB中的参数计算给定扇区的所在簇以及进入休眠状态,等待外部中断唤醒。
中断处理模块是在中断唤醒后根据中断类型进入不同功能子模块的,也是整个软件系统的核心部分。
中断模块接收到串口或并口数据后,根据内部命令字要求进行解析,命令字要求如图5所示,串口或并口数据接收流程如图6所示。
表6命令和数据字结构
类型
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
命令
字
1命令值
命令参数字节数或数据长度
数据
字
0预留
12位数据
12位数据
图3数据接收流程图
七、仿真调试分析
在人造金刚石压力机压力锤头裂纹检测中,采用声发射技术进行实时监控,一旦出现异常立即停机报警,为了对出现异常时的数据进一步分析,需要将现场数据带回研究室。
利用基于嵌入式的U盘读写器可以免去现场布线的麻烦,还可以省去PC机端驱动软件的开发,直接将现场数据写入U盘,方便地利用PC机中安装的MATLAB进行数据的详细分析处理。
八、嵌入式系统学习心得
首先,我要感谢老师给予了我这次课程设计的机会。
在这次嵌入式系统课程设计中,虽然有些难题和困惑之处,但在同学和老师的帮助下,最终也是完成了最后的课程设计。
通过此次的课程设计,我对ARM嵌入式有了深入的了解,同时,对硬件MSP430F149和SL811HS也有所认识。
在软件上,通过对USB协议、BULK_ONLY、UFI协议、FAT32和软件系统模块的运用也让我受益匪浅。
在操作上,经过反复的学习和推敲,也由不熟悉变成熟练。
理论知识方面也是通过与同学和老师们的讨论,最终也达成了实验的目的,得到了相应的成果。
对于本次实验的课题——嵌入式系统U盘开发的设计,基于嵌入式U盘读写器的设计实现我认为可以方便地将下位机数据存储到普通U盘,彻底解决了工业控制中上下位机之间数据传输难的问题,也为以后其他领域的应用创造了前提条件。
如长途客车中的黑匣子、家庭老人健康监测等等。
在人们以后的生活中,随着USB技术和闪存技术的进一步发展,这种嵌入式U盘设备应用领域将会逐步扩展,在以后的市场上将有着良好的前景,同时也会对人们的生活提供不小的帮助。
九、参考文献
[1]潘松,王国栋.VHDL实用教程[M].西安:
电子科技大学出版社,2001.
[2]王坤,侯国屏,赵伟.可编程仪器控制规范和关键技术
(一)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 嵌入式 系统 开发 设计