USBHost总线解决设计方案.docx
- 文档编号:8889516
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:205.90KB
USBHost总线解决设计方案.docx
《USBHost总线解决设计方案.docx》由会员分享,可在线阅读,更多相关《USBHost总线解决设计方案.docx(22页珍藏版)》请在冰豆网上搜索。
USBHost总线解决设计方案
USBHost总线解决方案
ARM读写U盘/移动硬盘模块说明书
1.概述
ARM读写U盘/移动硬盘模块——USBHost总线解决方案(也即Master)作为一个模块嵌入到应用方的系统中,通过总线方式实现与应用方系统的通信。
该解决方案实现了将应用方基于文件系统级操作,将命令通过总线写入Master模块的双口RAM的指定地址,在完成相应的操作后,再从双RAM的指定地址读出相应的响应,以此实现通过Master模块对USB接口磁盘进行访问。
用户对USB磁盘的访问总体上分为三大类:
磁盘操作(如打开/关闭磁盘、读取磁盘信息等)、目录操作(创建/删除目录、Dir等)和文件操作(打开/关闭文件、读/写文件等)。
具体操作见《USBHost解决方案—HostModule系统协议v2.0》。
用户对Master模块的使用主要包括2个方面:
硬件说明和软件开发。
2.应用
ARM读写U盘/移动硬盘模块——USBHost总线解决方案适用于工业中的数据采集,如:
绣花工业中的花样采集等等。
3.USB简介
因为本产品用到的是移动硬盘,而目前市场上移动硬盘基本都是以USB接口而进行通信的,所以简单介绍USB。
USB(UniversalSerialBus)是由Compaq、HP、Intel、Lucent(朗讯)、Microsoft、NEC和Philips七家公司联合推出的新一代标准接口总线。
该总线是一种连接外围设备的机外总线,最多可连接127个设备,为微机系统扩充和配置外部设备提供了方便。
USB规范有多种版本,最早的版本是1994年11月推出的USB0.7版。
1996年1月推出了标准版本USBl.0,目标是为中低速的外围设备提供双向、低成本的总线,数据传输率最高为12Mb/s。
但是随着微机系统及其外设性能和功能的增强,需处理的数据量越来越大,2000年4月又推出了新的USB规范—USB2.0。
在新版本中,增加了一种480Mb/s的数据传输率,以满足日益复杂的高级外设与PC机之间的高性能连接需求。
USB2.0是USB的自然升级,它在保留原有USB规范的基础上又提供了更高的带宽,并且与现有的外设保持完全兼容。
USB还有一个显著优点就是支持热插拔,也就是说在开机的情况下,你也可以安全地连接或断开USB设备,达到真正的即插即用。
今后,USB将取代当前PC上的串口和并口。
4.硬件介绍
ARM读写U盘/移动硬盘模块——USBHost总线解决方案的硬件主要为ARM系列主控芯片,NORflash,双口RAM,SDRAM,它是通过双端口RAM,直接以总线方式与用户系统相连。
就用户系统而言,ARM读写U盘/移动硬盘模块——USBHost总线解决方案表现为一个外置的RAM,而该RAM中的部分区域被用作协议命令和数据的交互、部分区域保留和作用双方同步信息交互。
4.1CPU概述
ARM读写U盘/移动硬盘模块——USBHost总线解决方案采用的是ARM内核来控制系统和处理各种不同的数字信号。
4KB数据存储和4KB的指令存储。
工作方式是以文件形式工作。
4.2管脚定义
ARM读写U盘/移动硬盘模块——USBHost总线解决方案模块提供了与用户相关的三个接插接口,分别J1、J6和USB-B1。
(J7是为接JTAG仿真用,用户可以不用关心。
)实物图如图1和图2所示,分别说明如下。
图1ARM读写U盘/移动硬盘模块——USBHost总线解决方案实物图
图2转接王1型实物图
J1—与用户系统总线接口
用于通过访问双口RAM实现与用户系统交互的接口,如图3所示。
图3MasterJ1接口示意图
该接口5个管脚定义如表1所示。
管脚号
描述
管脚号
描述
管脚号
描述
1
INTR
13
AR11
25
DR4
2
BUSYR
14
AR10
26
DR5
3
AR1
15
AR13
27
DR2
4
AR0
16
AR12
28
DR3
5
AR3
17
AR15
29
DR0
6
AR2
18
AR14
30
DR1
7
AR5
19
SEMR
31
GND
8
AR4
20
CER
32
VCC+5V
9
AR7
21
RDR
33
GND
10
AR6
22
WRR
34
VCC+5V
11
AR9
23
DR6
12
AR8
24
DR7
表1MasterJ1接口定义
上表中,有关管脚定义如下:
1.AR0-AR15:
地址总线;
2.DR0-DR7:
数据总线;
3.INTR、BUSYR、SEMR、CER、RDR、WRR:
系统控制线;
●INTR为双端口RAM向用户MCU提供的外部中断;
●BUSYR用于双端口RAM忙指示(目前未使用);
●SEMR用于信号量同步,需要上拉到高电平;
●CER与SEMR用于实现片选;
●RDR与WRR分别用于读写操作。
4.31、32管脚未使用;
5.33与34分别为GND和VCC-5V。
有关连接方式见参考电路图[EvalSch.pdf]。
在本系统的实现中,目前使用到的管脚是:
INTR、CER、SEMR、RDR和WRR。
BUSYR目前未使用,可以不接。
特别地,建议用户将INTR连接到用户系统MCU的外部中断管脚,并使用外部中断。
注意,使用中需要将SEMR拉高(始终拉高即可)以确保读取操作正常。
J6-2.00mm间距的USB接口
J6的接口定义与USB-B1是完全相同的,设置J6只是针对用户无法使用板上USB母插座时,将USB线连接到用户板上,由用户在自己的板上决定USB母插座的位置(或者使用连接直接连接到固定在面板上的USB母插座上)。
USB-B1-标准USB接口
USB-B1为标准USB接口,用户焊接A类USB母插座。
用户可以根据需要(用户产品的外壳定义等)决定是否使用该插座。
如果不使用该插座可以将USB-B1悬空,通过J6将USB接口连接到用户板上。
4.3接口使用
ARM读写U盘/移动硬盘模块——USBHost总线解决方案通过双口端口RAM,直接通过总线与用户的单片机系统相连。
因此,就用户单片机系统而言,ARM读写U盘/移动硬盘模块——USBHost总线解决方案表现为一个外置的RAM,而该RAM中的部分区域不能使用、部分区域被用作协议命令和数据的交互,剩余的部分可以由用户自行控制使用。
有关双端口RAM中区域的划分如图所示:
其基地址为0x40000000.
图4ARM读写U盘/移动硬盘模块——USBHost总线解决方案上双口RAM内存区域分配软件开发
在双端口RAM中,区域分配如下:
●0x0000-0x0007共8字节用于存放系统命令/响应;
●0x0008-0xFFF7共65520字节用于存放数据部分;
●0xFFF8-0xFFFD共6字节保留;
●0xFFFE-0xFFFF区域的2个字节被用作系统协议交互指示,用户不可用于数据存放。
用户系统与ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统的协议交互分为2种:
命令和响应。
命令由用户系统发往ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统,而响应为相反方向,由ARM读写U盘/移动硬盘模块——USBHost总线解决方案发往用户系统。
命令和响应都有可能有数据部分(也可以没有数据部分,见《HostModule系统协议v2.0》)。
命令的数据部分存放于CommandData中。
5.工作指示灯说明
ARM读写U盘/移动硬盘模块——USBHost总线解决方案模块提供了6个LED:
D1—D6,来指示系统状态。
其中D6为电源指示,系统通电后,D6即点亮。
D5为系统调试用。
D1—D4联合指示系统状态。
目前只使用了D1与D2。
D3与D4尚未定义
●当系统加电时,首先是D6指示灯点亮,表明系统已经加上电了,紧跟着D1与D2灯同时被点亮,这时系统正在进行自检和初始化,完成后,D1与D2同时关闭。
该自检过程很快,应当在300ms以内完成,如果D1与D2同时点亮时间超过1s即说明Master板出现故障。
●当系统正常启动完成之后,再插上USB磁盘,如果磁盘被成功识别,则D1灯被点亮,并且保持点亮。
直到把USB磁盘拔出才关闭。
如果盘不能被识别,则D1灯不停的闪烁。
●当串口有命令成功发给ARM读写U盘/移动硬盘模块——USBHost总线解决方案模块时(ARM读写U盘/移动硬盘模块——USBHost总线解决方案成功接收并识别出命令),D2将被点亮,然后ARM读写U盘/移动硬盘模块——USBHost总线解决方案执行该命令,命令执行完成,发回响应后,D2关闭。
由于系统对不同的命令执行时间不同,D2点亮的时间长短也不定。
●系统正常启动后(上述自检完成后),插入USB磁盘,当系统检测到USB磁盘中存在合法的升级文件时,系统将不会点亮D1,而是点亮D2,并开始升级,待升级完成后,(如何升级见《Master使用指南》)关闭D2。
6.软件开发
6.1概述
ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统是一个完整的单片机系统,该系统通过双端口RAM实现与用户单片机系统的命令和数据通信。
如下图所示:
ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统
用户单片机体系统
双端口RAM
Data
Command
USB总线
传感器
图5ARM读写U盘/移动硬盘模块——USBHost总线解决方案与用户系统集成示意
ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统工作于命令/响应方式下(在协议中响应也被称为命令),由用户系统发出命令,ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统在根据该命令进行相应处理后,向用户系统返回相关的响应,该命令即完成。
一个命令必须在前一命令完成并返回响应后才能再发送给ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统。
这一过程根据需要重复进行,以此实现整体系统的工作。
有关协议命令的定义参见《HostModule系统协议v2.0》。
集成后的系统工作方式如下:
●用户系统将命令写入双端口RAM的Command区域。
●如果有数据则将数据写入DataBuf区域。
●向ARM读写U盘/移动硬盘模块——USBHost总线解决方案端发送命令消息。
●ARM读写U盘/移动硬盘模块——USBHost总线解决方案收到命令消息后,即处理Command区域的命令。
●ARM读写U盘/移动硬盘模块——USBHost总线解决方案完成命令后,将响应写入Response域。
●如果有数据则将数据写入DataBuf区域。
●向用户系统发送响应消息。
至此,一次命令执行完毕。
下面的实现就是基于上述过程来说明的。
系统命令/响应消息用于在用户系统或ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统将要发出的命令或响应及相应数据准备好后,通过对方(Master或用户系统)命令或响应已经准备完毕,可以开始执行的消息。
该消息通过向双端口RAM的0xFFFE或0xFFFF地址写数据来完成。
该消息通过中断方式来实现,即:
对用户系统而言,当向0xFFFE写入数据时,即为通知ARM读写U盘/移动硬盘模块——USBHost总线解决方案有命令待执行(ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统会产生一个中断)。
当ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统完成命令后,准备好响应,然后会在0xFFFF处写一个字节,这时,会导致INTR拉低,由此产生一个外部中断,用户系统即可通过读取0xFFFF字节以清除该中断,并进一步读出响应,进行响应处理。
目前系统定义:
向0xFFFE写入和从0xFFFF读出的值都是0x02。
6.2功能实现
6.2.1数据结构
协议命令和响应的结构如下:
typedef__packedstruct
{
UINT8TypeCode;/*类型码*/
UINT8CommandCode;/*命令码*/
UINT8Data[6];/*数据部分*/
}BM_Command;
说明:
1.结构体之间是相互连接紧密的,如上面的Data[6]是说明下面的数据部分,比如设置磁盘驱动格式化里面的整个的数据部分。
2.TypeCode是说明该信息是命令还是响应。
3.CommandCode是说明下面的结构体是中是执行什么命令码,比如读/写等。
typedef__packedstruct
{
UINT8Drive;/*磁盘驱动器*/
UINT8Reserved[5];/*保留*/
}BM_CmdSetDefaultDrive;/*设置默认的磁盘驱动器*/
说明:
1.这是接上面的结构体而来,Drive是说明是磁盘驱动器,
2.Reserved[5]说明执行的命令是保留。
下面的各个结构体也是依次类推而来。
typedef__packedstruct
{
UINT8Drive;/*磁盘驱动器*/
UINT8Reserved[5];/*保留*/
}BM_CmdFormatDrive;/*格式化磁盘*/
typedef__packedstruct
{
UINT8Drive;
UINT8Reserved[5];
}BM_CmdDriveSpaceInfo;/*磁盘的剩余空间*/
typedef__packedstruct
{
UINT8Drive;
UINT8Reserved[5];
}BM_CmdGetCurrentDir;/*获取当前目录*/
typedef__packedstruct
{
UINT8Option;/*参数选项,其选择为下面的宏定义*/
UINT8Reserved[5];/*保留*/
}BM_CmdOpenFile;/*打开文件*/
#defineNORMAL_OPEN0x00/*以普通方式打开*/
#defineCREATE0x01/*以创建文件方式打开*/
#defineCREATE_TRUNCATE0x02/*以覆盖方式打开*/
typedef__packedstruct
{
UINT8Index;/*指向文件的指针*/
UINT16DataLen;/*数据的长度*/
UINT8Reserved[3];/*保留*/
}BM_CmdReadFile;/*读文件*/
typedef__packedstruct
{
UINT8Index;
UINT16DataLen;/*数据的长度*/
UINT8Reserved[3];/*保留*/
}BM_CmdWriteFile;/*写文件*/
typedef__packedstruct
{
UINT8Index;/*文件指针*/
UINT8Option;/*文件从哪开始*/
UINT32Position;/*指针移动偏移量*/
}BM_CmdSetFilePointer;
typedef__packedstruct
{
UINT8Index;
UINT8Reserved[5];/*保留*/
}BM_CmdCloseFile;/*关闭文件*/
typedef__packedstruct
{
UINT8Index;/*文件指针*/
UINT32Position;/*指针移动偏移量*/
UINT8Reserved[1];/*保留*/
}BM_CmdTruncate;
typedef__packedstruct
{
UINT8Attributes;/*文件的属性*/
UINT8Reserved[5];/*保留*/
}BM_CmdSetAttributes;/*设置属性*/
typedef__packedstruct
{
UINT8Baudrate;
UINT8Reserved[5];/*保留*/
}BM_CmdSetBaudrate;/*设置波特率*/
typedef__packedstruct
{
UINT8CRCEnable;/*1是打开或2为关闭默认值为0*/
UINT8Reserved[5];/*保留*/
}BM_CmdSetCRC;/*打开或关闭CRC校验*/
响应结构为:
typedef__packedstruct
{
UINT8TypeCode;/*类型码*/
UINT8CommandCode;/*命令码*/
UINT8Result;/*返回*/
UINT8ErrCode;/*如果出错,返回的错误码*/
UINT8Data[4];/*数据部分*/
}BM_Response;
typedef__packedstruct
{
UINT8Number;/*发现的磁盘个数*/
UINT8Reserved[3];/*保留*/
}BM_RespDetectDisk;/*响应发现了磁盘*/
说明:
1:
这跟上面的命令是一样的,可参看上面而得出。
typedef__packedstruct
{
UINT8Number;/*磁盘号*/
UINT8Reserved[3];/*保留*/
}BM_RespOpenDisk;
typedef__packedstruct
{
UINT8Drive;
UINT8Reserved[3];/*保留*/
}BM_RespGetDefaultDrive;
typedef__packedstruct
{
UINT16BytesPerSector;
UINT8SectorsPerCluster;
UINT32TotalClusters;
UINT32FreeClusters;
}BM_RespDriveSpaceInfoData;
说明:
1.由于数据比较大,考虑到4字节装不下,就把其放到Databuff里面。
然后用时直接从Databuff里面直接调出来用。
typedef__packedstruct
{
UINT8Index;/*指向文件的指针*/
UINT8Reserved[3];/*保留*/
}BM_RespOpenFile;
typedef__packedstruct
{
UINT16DataLen;/*数据的长度*/
UINT8Reserved[2];/*保留*/
}BM_RespReadFile;
说明:
1.DataLen说明读的数据的长度,现在定义的最大读数据长度为32768Byte。
typedef__packedstruct
{
UINT16DataLen;/*数据的长度*/
UINT8Reserved[2];/*保留*/
}BM_RespWriteFile;
说明;
1.DataLen说明写的数据的长度,现在定义的最大写数据长度为32768Byte。
typedef__packedstruct
{
UINT8Attributes;
UINT8Reserved[3];/*保留*/
}BM_RespGetAttributes;
typedef__packedstruct
{
UINT8TypeCode;/*类型码*/
UINT8CommandCode;/*命令码*/
UINT8Data[6];/*数据部分*/
}BM_RespSysTime;
6.2.2代码的实现
6.2.2.1系统命令/响应消息
系统命令/响应消息用于在用户系统或ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统将要发出的命令或响应及相应数据准备好后,通过对方(ARM读写U盘/移动硬盘模块——USBHost总线解决方案或用户系统)命令或响应已经准备完毕,可以开始执行的消息。
该消息通过中断方式来实现,通过向双端口RAM的0xFFFE或0xFFFF地址写数据来完成。
即:
对用户系统而言,当向0xFFFE写入数据时,即为通知ARM读写U盘/移动硬盘模块——USBHost总线解决方案有命令待执行(ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统会产生一个中断)。
当ARM读写U盘/移动硬盘模块——USBHost总线解决方案系统完成命令后,准备好响应,然后会在0xFFFF处写一个字节,这时,会导致INTR拉低,由此产生一个外部中断,用户系统即可通过读取0xFFFF字节以清除该中断,并进一步读出响应,进行响应处理。
目前系统定义:
向0xFFFE写入和从0xFFFF读出的值都是0x02。
(其中的命令/响应格式参看《HostModule系统协议v2.0》)
INTR中断为低有效。
参考代码如下:
#defineDPRAMRInt((char*)0xFFFFL)
#defineDPRAMLInt((char*)0xFFFCL)
#defineSEND_SYSCMD*DPRAMLInt=0x02/*用户系统向ARM读写U盘/移动硬盘模块——USBHost总线解决方案
发送命令消息的宏*/
bRecvCmd=*DPRAMRInt;/*用户系统读取响应消息的
操作,用于用户系统被INTR触发的外部中断服务程序中*/
说明:
1.上述代码适用于FranklinC51和KeilC51系统。
(下同)
6.2.2.2系统命令/响应及其数据部分
如前所述,系统的协议是通过在双端口RAM的指定区域写入协议规定的命令来实现的。
系统命令在双端口RAM中指定的区域为:
#defineCommand0x40000000
#defineResponse0x40000000
#defineCommandData0x40000008
#defineResponseData0x4000008
说明:
1.上述定义的含义是:
a)Command被用于存放从用户系统发往ARM读写U盘/移动硬盘模块——USBHost总线解决方案的命令,包括BM_CmdSetDefaultDrive、BM_CmdFormatDrive、BM_CmdDriveSpaceInfo、BM_CmdGetCurrentDir、BM_CmdOpenFile、BM_CmdReadFile、BM_CmdWriteFile、BM_CmdSetFilePointer、BM_CmdCloseFile、BM_CmdTruncate、BM_CmdSetAttributes、BM_CmdSetBaudrate、BM_CmdSetCRC。
该存储区被指定于双端口RAM的0x0000地址,使用0x08(8字节)字节。
b)Response被用于存放从ARM读写U盘/移动硬盘模块——USBHost总线解决方案发往用户系统的响应,包括BM_RespDe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- USBHost 总线 解决 设计方案