首页 单片机实现USB

单片机实现USB

举报
开通vip

单片机实现USB 第 1章 主要硬件芯片介绍 1.1系统总体设计 USB主机系统设计是一个软、硬件结合的整体,宏观上主要包括三个层次的设计:USB 总线物理层接口设计、USB核心系统设计和 USB客户系统设计。总线接口主要处理主机与 设备之间的电气及协议层的互连,是信息包进出的物理桥梁;USB核心系统主要管理和协调 主机与从机间的逻辑数据传输,解析双方联系的握手协议,是验证信息包的逻辑关卡;客户 系统是最终用户直接和 USB设备功能交互的逻辑平台,不同的 USB设备归属于不同的类, 是利用相关的类协议来实现的,所以客...

单片机实现USB
第 1章 主要硬件芯片介绍 1.1系统总体设计 USB主机系统设计是一个软、硬件结合的整体,宏观上主要包括三个层次的设计:USB 总线物理层接口设计、USB核心系统设计和 USB客户系统设计。总线接口主要处理主机与 设备之间的电气及 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 层的互连,是信息包进出的物理桥梁;USB核心系统主要管理和协调 主机与从机间的逻辑数据传输,解析双方联系的握手协议,是验证信息包的逻辑关卡;客户 系统是最终用户直接和 USB设备功能交互的逻辑平台,不同的 USB设备归属于不同的类, 是利用相关的类协议来实现的,所以客户系统驱动程序具有多变性,需要为专门的类定制专 门的驱动程序。 在单片机上实现 USB移动存储功能,具体包括 USB主机接口的硬件设计和整机 USB驱 动固件的设计。其中驱动固件的设计具体又包含几个协议的实现:USB1.1控制传输协议、 USB BULK传输协议、USB海量存储类协议、UFI磁盘操作命令和 FAT文件系统 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 等。 1.2硬件设计 1.2.1USB主控制器 USB主控制器主要是完成底层物理接口设计,是 USB系统架构的必要部分,是 USB数 据包进出的必经通道。本系统采用的 USB主机芯片是 Cypress公司的 SL811HS。Cypress 公司是最早从事 USB芯片开发的公司之一,其 EZ-USB系列芯片在业界有非常好的口碑。 SL811HS是当经第一个支持 USB 主从机的接口芯片,性能稳定,数据全面。 (1)芯片特性 SL811HS是自动兼容 USB全速或者低速的嵌入式 USB主从机的接口芯片,它支持微处 理器、微控制器或者 DSP的 USB接口设计,同时也可以直接连到 ISA、PCMICA等其它总 线[8],芯片使用标准的 USB1.1协议。SL811HS通过内部集成的全/低速传输引擎产生 USB 串行接口功能,在全速时带宽为 12Mbps,低速时为 1.5Mbps。芯片支持 8位并行数据端口 或者 I/O口的设计,同时也支持 DMA,自动中断检测连接口,可以非常容易地在 MCS-51 系列微处理器、摩托罗拉微控制器或者其它控制芯片上完成设计。总的来说具有如下特性: 1. 可在软件控制下,单一地实现主机或者从机功能,28脚 PLCC,48脚 TQFP封装。 2. 低速 1.5Mbps,高速 12Mbps,主从模式下都一样。 3. 自动检测连接设备是否为高速或者低速。 4. 支持 8位双向并口传输,或者 I/O口,DMA传输。 5. 片上集成 SIE和 USB传输器。 6. 片上集成了一个 USB根集线器。 7. 256字节内部 SRAM,支持乒乓传输。 8. 工作频率在 12M或者 48M,3.3伏供电,最高 5伏耐压接口。 9. 支持总线挂起、唤醒和掉电模式。 10. 自动产生 SOF和循环冗余校验,自动地址增长模式,保存读写周期。 SL811HS内部电路结构见图 1.1 (2)相关寄存器介绍 USB系统驱动的编程,实质上就是对 SL811HS的寄存器和一些缓存区的读写,SL811HS 内部一共有 256个字节的缓存,高端 240个字节作为通用内存,可以随意访问,低端 16个 字节是特殊功能寄存器,USB的一些 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 就融合在里面。SL811HS有 A、B两套并行的寄存 器,功能和使用完全一样,见表 1.1。 (3)接口电路 SL811HS既可以作为嵌入式的主机又可以作为设备,灵活性非常大。它可以直接连到处 理器或者按内存映像的方式接到 ARM处理器上。硬件设计时候主要注意几个关键引脚的处 理: 1. nCS:低电平有效,使能 SL811HS接口和读写寄存器与内存。必须使 nCS在一个传 输周期中至少要保持 65纳秒以上才能进行有效的通信。 2. nWR:低电平有效,要使数据有效 nWR也至少需要持续 65个纳秒以上。一但 nWR 为低时,总线上的信息至少要保持 5个纳秒。 3. nRD:低电平有效,读取数据之前,必须先写入地址,nRD的最小周期是 65个纳秒 。 一但 nRD为低时,总线上的信息至少要保持 5个纳秒。 4. A0:低电平时代表地址,高电平时代表数据。A0至少要保持 10个纳秒以上才能保 证数据正确写入。 5. INTRQ:高电平有效,当传输事务完成,或者有外部设备接入时,就会触发中断。 通过写入中断寄存器可以清除中断。 6. nRest:低电平有效,SL811HS上电后需要复位。 常见 8位嵌入式处理器和 SL811HS的连接见图 1.2。SL811HS读时序见图 1.3,写时序见图 1.4。 1.2.2 微处理器 本设计的主要目的是在普通单片机下能够使用 USB移动存储,同时通过该系统的串口能 够完成让外部的嵌入式设备也能使用 USB移动存储。主机处理器芯片选用兼容MCS-51指 令的 AT89C52,并外扩一个 32K的 RAM。系统的功能设计见图 1.5。 AT89C52控制器主要是通过 SL811HS对 USB移动存储进行操作,外部控制按钮(小键 盘)输入不同的值可以实现不同的功能,比如写文件、读文件、建立 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 或删除文件等。RS232 接口,主要是留给外部系统使用,其它的嵌入式系统只要接上该系统的串口,按照一定的命 令格式就可以通过串口使用 USB移动存储。根据 SL811HS容错报告所知,SL811HS的内部 锁相环非常敏感,易受高频噪声干扰,从而导致时钟抖动,进而会使 SOF不准确(标准周 期为 1毫秒)。解决这个问题有两种措施: 1. 尽量使用有源的 48M晶体 2. 备选 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 是使用无源 48M晶振,同时在 SL811HS的 VDD脚加上适当的滤波电容, 并注意 PCB的布线。 1.3固件程序设计 USB主机系统固件的编写比较繁琐,主要涉及到 USB控制传输、USB批量传输、海量存 储类协议、UFI磁盘操作命令和 FAT文件系统的编写,全部都是最底层的程序操作,没有现 成的类库支持,故程序整体框架的搭建和具体协议的数据结构的组织是非常关键的。基于以 上因素,构建了系统的总体逻辑设计,见图 1.6。 这些协议或者命令层层相扣,每一层开发的优劣不仅直接影响功能的实现,更会直接影 响数据传输的稳定性和速度。该系统设计的主要难点在于软件程序的编写,由于牵涉的协议 多,在编写程序时要重视模块化的思想,每一个具体的协议尽量都编写在一个源文件里,数 据结构和常量、变量最好定义在每个模块的头文件中。在调试 USB 底层的控制传输时,可 以充分利用 Bus Hound工具抓取 USB移动存储刚插入计算机时与计算机通信的数据来分 析、对比和参考开发,加深对 USB整个底层信息交互的理解。 1.3.1 USB总线枚举协议的实现 任何 USB设备连上 USB主机后,都必须经过 USB主机的枚举配置后才能正确使用。USB 总线枚举的步骤和方法,对于所有 USB设备来说都是一样的,必须遵守标准的 USB协议过 程,通过控制传输的“一问一答”来实现主机和从机必要的几个数据交流:获取设备描述符、 分配设备地址和配置设备。控制传输的核心是 SETUP包,其结构见表 1.2。 1. bmRequestType:共一个字节,每一位代表一定的意义。第 7位 D7代表数据传输方 向:D7=“0”,代表主机到设备(OUT),D7=“1”,代表设备到主机(IN);D6和 D5表示命令类型:D6D5=“00”表示标准请求,D6D5=“01”表示类请求,D6D5=“10” 表示用户定义的请求,D6D5=“11”保留值;D4-D0表示命令的接受者类型: D4D3D2D1D0=“00000”表示接受者为设备,D4D3D2D1D0=“00001”表示接受者为 界面,D4D3D2D1D0=“00011”表示为其它接受者,D4D3D2D1D0 的其它值保留。 2. bRequest:请求命令代码,在标准的请求命令中 USB为每一个命令编了一个代号, 见表 3.3。 3. wValue:共 2个字节,用户自定义。 4. wIndex:共 2个字节,用户自定义。 总线枚举的所有命令都是通过SETUP包发送出去的,在SL811HS中就是通过启动DATA0 把命令包发送出去。如果命令要求有数据传输,那么 SETUP包后接着还有 IN包或者 OUT 包可选数据发送,此时由于前面 SETUP包已经启动了 DATA0,这里就必须开启 DATA1,如 果数据大于端点的最大数据载荷,那么就用 DATA1/DATA0的方式交替来发送。主机和设备 在接收到 USB包时,首先就要根据包标识域(PID)进行译码,进而区分出是什么包。USB 控制传输主要是 SETUP包,同时还有相应的 IN包或 OUT包;在控制传输完成之后接着是 批量传输(BULK),这就是纯粹的 IN包或 OUT包的传输了。这些包在主机固件里具体如 何区分、实现呢?根据表 2.1可以知道检验 PID的值可以区分出 SETUP、IN和 OUT包。那 么 IN和 OUT包到底是控制传输中的呢?还是批量传输中的呢?此时要明白,控制传输是所 有 USB主机或者设备开发中的必要传输,并且只能由默认端点 0来完成,所以可以在固件 中判断当前信息交互的端点号就可以区分出 IN和 OUT包到底归属于哪一种传输。如果是批 量传输中的 IN包或者 OUT包,那么可以直接启动 DATA0/DATA1来发送数据。USB枚举程 序底层数据包传输设计结构见图 1.7。 形象点讲 USB主机枚举的过程就是:首先获取设备属性,设备会返回 18个数值(值中 对固件有用的是最大包端点长度),然后为设备分配一个操作地址,地址范围可以根据实际 情况而定,并且配置设备,最后列举设备端点,获取设备的每一个端点号(地址)。枚举的 实质目的就是想获取设备的端点地址,靠它来完成数据包的收发。获取设备属性、分配地址 等枚举请求命令都有标准说明(见表 1.3)。 SL811HS 芯片必须初始化、复位后才能对设备进行枚举操作,实践表明对 SL811HS寄 存器初始化的顺序和延迟时间非常关键,会影响到整个系统的稳定性和速度。经测试比较好 的初始代码如下: void S811Init(void) { SL811Write(cDATASet,0xe0); //设定 SOF计数器低 8位 SL811Write(cSOFcnt,0xae); //设定主机工作模式 SL811Write(CtrlReg,0x5); //开 SOF Delay(150); //延时 SL811Write(EP0Counter,0); SL811Write(IntEna,0x20); // 写中断寄存器 SL811Write(IntStatus,INT_CLEAR); //清楚中断 } 1.3.2 USB批量传输和海量存储类协议的实现 USB主机系统实现目的是使用 USB移动存储,涉及到大量文件数据的传输,所以应该选 择 USB批量传输(BULK)。批量传输用 BULK端点进行命令、数据和状态的传输[4],其流 程结构见图 1.8。CBW是命令块封装包,CSW是命令状态封状包,都是一系列包的集合。 (1)CBW CBW的长度为 31字节,包含了海量存储类协议的磁盘操作命令,其结构见图 1.9。 1. dCBWSignature:是 CBW的标志,固定值为 0x43425355,所有 CBW的值在 USB总 线上传输的时候都是按照 LSB顺发送的,即最先发送低位,然后发送高位。 2. dCBWTag:由主机产生的并发送给设备,设备会将此值填入 CSW的 dCSWTag,以此 返回给主机。 3. dCBWDataTransferLength:主机希望在批量端点上传输数据的大小。 4. bmCBWFlag:一个字节的位图,D7=“0”时表示主机输出数据,反之主机接受数据,D6 没有用到,D5-D0保留位。 5. bCBWLUN:接受命令的设备逻辑单元号。 6. bCBWCBLength:表示了 CBWCB的长度,也就是磁盘操作命令的长度。 7. CBWCB:填入磁盘操作命令。 CBW是以二进制位发送的,每个包必须是精确的 31个字节,不满足的要补 0。 (2) CSW CSW的长度为 13字节,其结构见图 1.10。 1. dCSWSignature:是 CSW的标志,固定值为 0x53425355,CSW的值也都是按 LSB 顺序发送。 2. dCSWTag:命令状态标签,该值与 CBW中的 dCBWTag值相同。 3. dCSWDataResidue:该字段表示 dCBWDataTransferLength字段中主机希望的数据 长度与实际发送的数据长度之间的差额。 4. bCSWStatus:表示命令执行情况,见表 1.4 (3)UFI UFI是Mass Storage 类的子类,支持海量存储类的USB主机应该实现这些子类命令。UFI 子类命令是基于 SFF-8070I和 SCSI-2的,每个命令块的长度均为 12字节,UFI的各种命令 及操作码如表 3.5。对 USB移动存储的所有操作都是经过这些命令来完成的,UFI命令封装 于 CBW中的 CBWCB块中,靠 CBW传输出去,命令结果的状态保存于 CSW中,通过读 CSW相 关结构中的数值,就可以了解命令的最终执行情况。UFI命令是标准的 12字节,命令结构见图 1.11。 其中操作码与表 1.5中每一种命令相对应。Lgical Unit Number(LUN),每一个设备上 可能有很多个逻辑单元共享着该设备功能特性,设备上的逻辑单元都被连续从 0X0-0XFF 进 行编号;Logical Block Address (LBA), LBA的值从逻辑块 0连续递增到最后一个逻辑块, 系统中 LBA代表的就是移动存储介质的绝对扇区。注意 LUN和 LBA的字节发送顺序都是 MSB,在 8位单片机里保持正常顺序即可,CBW结构定义如下: typedef struct _COMMAND_BLOCK_WRAPPER{ DWORD dCBW_Signature; DWORD dCBW_Tag; DWORD dCBW_DataXferLen; BYTE bCBW_Flag; BYTE bCBW_LUN;BYTE bCBW_CDBLen; CBWCB CBWCommand; BYTE Resverd[4]; } CBW, *PCBW; CBWCB是具体的磁盘操作命令,大小为 12字节,用联合体定义如下: typedef union _CBWCB{ READ Ufi_Read; READ_CAPACITY Ufi_ReadCapacity; WRITE Ufi_Write; INQUIRY Ufi_Inquiry; REQUEST_SENSE Ufi_RequestSense; TEST_UNIT Ufi_TestUnit; } CBWCB, *PCBWCB; CSW状态返回值填充在各个字段域里面,定义如下: typedef struct _COMMAND_STATUS_WRAPPER{ DWORD dCSW_Signature; DWORD dCSW_Tag; DWORD dCSW_DataResidue; BYTE bCSW_Status; } CSW, *PCSW; 为了节约存储空间和提高效率再把 CBW和 CSW定义在一个联合体里面,如下: typedef union _Block{ CBW CbwBlock; CSW CswBlock; } BLOCK,*pBlock; 在程序中定义 BLOCK idata BlockCommand,就可以访问 CBW和 CSW了。
本文档为【单片机实现USB】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_898373
暂无简介~
格式:pdf
大小:446KB
软件:PDF阅读器
页数:12
分类:
上传时间:2012-12-29
浏览量:22