热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

龙芯软件开发(33)--USB协议深入分析

04030904返回语言标识。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt0,EP0Dat
04 03 09 04
返回语言标识。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
 
1.         收到字符串描述符包
 
Setup m=0,n=0,val=45
80 06 2C 03 09 04 FF 00
收到PC需要产品字符串。
 
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(11)(Offset=0x2C)
USB_DataInStage,cnt=30,EP0Data.Count=30
1E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00
这里USB设备返回产品字符串给PC了
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
 
2.         收到字符串描述符包
 
Setup m=0,n=0,val=45
80 06 00 03 00 00 FF 00
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(12)(Offset=0x0)
USB_DataInStage,cnt=4,EP0Data.Count=4
04 03 09 04
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
Setup m=0,n=0,val=45
80 06 2C 03 09 04 FF 00
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(13)(Offset=0x2C)
USB_DataInStage,cnt=30,EP0Data.Count=30
1E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
 
3.         收到字符串描述符包
 
USB_EVT_OUT
Setup m=0,n=0,val=45
80 06 00 01 00 00 12 00
这里收到需要返回厂商字符串的请求。
REQUEST_STANDARD=0x6
USB_DEVICE_DESCRIPTOR_TYPE(14)
USB_DataInStage,cnt=18,EP0Data.Count=18
12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01
在这里返回设备的厂商字符串给PC。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
 
4.         收到第三个配置描述符包
 
Setup m=0,n=0,val=45
80 06 00 02 00 00 09 00
REQUEST_STANDARD=0x6
USB_CONFIGURATION_DESCRIPTOR_TYPE(15)(Offset=0x0)
USB_DataInStage,cnt=9,EP0Data.Count=9
09 02 22 00 01 01 00 01 32
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
5.         收到第四个配置描述符包
 
Setup m=0,n=0,val=45
80 06 00 02 00 00 22 00
REQUEST_STANDARD=0x6
USB_CONFIGURATION_DESCRIPTOR_TYPE(16)(Offset=0x0)
USB_DataInStage,cnt=34,EP0Data.Count=34
09 02 22 00 01 01 00 01 32 09 04 00 00 01 03 00 00 6E 09 21 00 01 00 01 22 24 00 07 05 81 03 40 00 20
根据长度返回不同的数据。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
 
6.         收到设置描述符包
 
Setup m=0,n=0,val=45
00 09 01 00 00 00 00 00
REQUEST_STANDARD=0x9
USB_SetConfiguration WB.L =1
USB_Configure(TRUE)
USB_SetConfiguration true
由上面可以知道经过这么多次来回后,主控器已经配置完成,对这个设备可以使用了。这时,如果在WINDOWS里就会看到可以设备安装完成,可以使用了。
 
 
7.         收到设置空闲描述符包
 
Setup m=0,n=0,val=37
21 0A 00 00 00 00 00 00
收到这个描述符,就表明设备在空闲状态。
 
8.         收到HID 的报告描述符包
 
Setup m=0,n=0,val=37
81 06 00 22 00 00 64 00
由于在配置描述符里,我把这个设备描述成HID的设备,所以会收到HID的报告描述符。
REQUEST_STANDARD=0x6
REQUEST_TO_INTERFACE (0x22)
HID_REPORT_DESCRIPTOR_TYPE
USB_DataInStage,cnt=36,EP0Data.Count=36
06 00 FF 09 01 A1 01 19 01 29 08 15 00 25 FF 95 3F 75 08 81 02 19 01 29 08 15 00 25 FF 95 3F 75 08 91 02 C0
这里就返回报告描述的类型,说明每次发送数据报告的大小,还有数据的格式。这里是返回63个字节输出,63个输入的描述符。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
 
USB_EVT_OUT
 
到这里就把USB设备初始化完成了。从上面可以知道,要想配置一个USB设备,需要经过20个来回才能完成配置,这个过程是非常多的。如果在调试过程中,只要任何一个地方出错,都不会配置成功的。如果再加上硬件的出错,就需要花费更长的时间了。可见,USB的设备虽然非常方便使用,但是花费了工程师大量的精力和相当多的时间。因而USB是一个非常值钱的设备。目前USB设备已经非常流行,今后PC机与外设的通讯,大部份都是使用USB设备来完成的。完全会取代串口、并口的通讯。我看到有一个厂家开发的USB设备,就200多种,从USB风扇到USB电话,从USB网络到USB装饰品,比如USB接口的彩灯。还有通过USB控制的按摩器等健身器材等等。希望你看到本文之后,又可以开发一款更好的USB设备到来了。
 
在龙芯电脑里,已经没有软驱,那么它是通过USB的U盘来启动的,这样就需要配置USB的设备,所以龙芯里的BIOS是非常复杂的,龙芯的PMON还在继续地开发支持USB的键盘、USB的鼠标,这样完全可以不使用任何的PS2的设备了,可以直接任何时间插入鼠标、键盘,都可以正常地使用,不像PS2那样,需要重新启动操作系统。我希望龙芯的电脑,以后增加一个USB的设备在那里,直接通过那个设备就可以连接到其它PC机,可以共享数据,并不需要网络的配置。
 

推荐阅读
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • Apple iPad:过渡设备还是平板电脑?
    I’vebeenagonizingoverwhethertopostaniPadarticle.Applecertainlydon’tneedmorepublicityandthe ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 发现《iphone3开发基础教程》中大部分说的是xib的模板,直接学习中用StoryBoard碰到很多问题,在现有阶段要花很多时间来找度娘聊天,故决定,在这次学习过程中先以xib为主,在自学完后 ... [详细]
author-avatar
粉红的少女
网络借贷平台http://www.kljie.com/
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有