网站大量收购独家精品文档,联系QQ:2885784924

《S3C2440 之USB 设备篇》.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《S3C2440 之USB 设备篇》.doc

????? ?? ??? S3C2440 之USB 设备篇 S3C2440 有2 个USB 主机接口和1 个USB 设备接口, 本篇讲述USB 设备接口。 1 USB 的分类及主机接口和设备接口的区别 1.1USB2.0 按照速度分为以下三类 High-speed USB2.0 :理论速度480Mbps ,对应之前的USB2.0 ; Full-speed USB2.0 :理论速度12Mbps ,也就是过去的USB1.1 ; Low-speed USB2.0 :理论速度1.5Mbps ,这个一般用于鼠标、键盘等对速度要求不高的外部设备。 ? 1.2 低速USB? 全速USB 硬件设备接口的区别 USB 通过D-,D+ 信号的状态判断设备的插入,如下图所示,D+ 接上拉电阻为全速设备,D- 接下拉为低速设备。 ? 1.3 MINI2440USB 设备接口的区别 ? ? ? Mini2440 开发板只有一个USB 主机接口和一个USB 设备接口,均为USB 全速接口。Mini2440 USB 设备的D+ 是由GPC5 来控制的,如果GPC5 输出高电平,则D+ 上相当于通过上拉电阻接到+5V ,则设备启用;如果GPC5 输出低电平,则D+ 上相当于通过下拉电阻接到GND ,则设备禁用。 ? 2 S3C2440USB 设备的固件枚举过程分析 2.1 S3C2440 USB 设备的端点 ?? 2440 有5 个端点,EP0 ,EP1 ,EP2 ,EP3 ,EP4, 。 ?? EP0 是用于USB 设备枚举,传输方式为control 方式。EP1 到 EP4 用于数据传输。端点的传输方向有两种,IN 和OUT ,这个由 IN_CSR2_REG 来配置。 ? 端点的传输方式,批量(bulk ),中断(interrupt )也是由 IN_CSR2_REG 来配置。 由上图看到,BIT6 用于配置是批量模式,BIT5 用于配置传输方向。 ? 2.2 S3C2440 USB 程序分析 ????? 整个USB 枚举过程其实是很简单的,首先进行USB 时钟的初始化,设置为48MHz ;然后GPC5 使能,表示全速设备,然后设置USBD1 为USB 设备,禁止USB 挂起,这样调用 UsbdMain(); 进行必要的初始化,这样就准备完成了。 当我们把2440 的USB 口插入到电脑主机的时候,会产生USB 设备复位中断,我们在设备复位中断中进行一些初始化,整个枚举就进入到一个状态机中,一步一步直到枚举完成。 ? // 初始化USB 设备时钟 48MHZ ?????? ChangeUPllValue(0x38,2,2); // UCLK=48Mhz ? ?????? // GPC5 使能, 输出为高电平, 表示全速设备 ?????? rGPCCON = ~(310); ?????? rGPCCON |=? (110); // output ?????? rGPCUP? |=? (15);? // pullup disable ?????? rGPCDAT |=? (15);? // ourtput? ? ?????? rMISCCR=rMISCCR~(13);? // USBD1 设置为设备( 不是主机) ?????? rMISCCR=rMISCCR~(113); // USBD1 设置为普通模式( 不是挂起模式) ?????? UsbdMain(); ??? while(1) ?????? { delay(); } ? 我们看下函数UsbdMain 的定义 void UsbdMain(void) { ??? InitDescriptorTable();?? // 初始化设备描述符 ? ??? ConfigUsbd(); ???????? // USB 配置 ? ??? PrepareEp1Fifo(); ????? // 端点1 初始化 } ? 我们看下函数ConfigUsbd void ConfigUsbd(void) { ??? ReconfigUsbd();?????? // 重新配置USB ? ??? pISR_USBD =(unsigned)IsrUsbd;? // 安装中断函数 ??? ClearPending(BIT_USBD);??????? // 清除USB 中断挂起标记 ??? rINTMSK=~(BIT_USBD);?? ??? // 允许USB 中断 } ? void ReconfigUsbd(void) { // *** End point information *** //?? EP0: co

您可能关注的文档

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档