查看: 4737|回复: 2

[经验] AT91SAM3S4C的HID Transfer+Mouse 功能实现

[复制链接]
  • TA的每日心情

    2014-1-1 09:49
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-4-6 19:19:32 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 辉先生 于 2013-4-6 19:31 编辑

          开发板借来也快一个月了,除了跑了开发板自带的例程,主要试了USB相关的程序测试,(公司交给的任务是实现USB HID Mouse+Transfer的功能), 趁清明节放假,整理了一下,跟大家分享下。由于初次接触USB,很多地方并不是很清楚,欢迎大家拍砖,也希望高手指点。
        在一个设备中同时实现USB Mouse和Transfer的功能,应该至少有两种方法(1):
        1、只使用一个接口,但是使用两个应用集合和两个报告。
        2、使用两个接口,一个接口实现Transfer功能,另一个接口实现Mouse功能。
        方法①只需要一个输入端点和一个输出端点就足够了,而方法②还需要另外一个额外的非0端点,因为同一个配置下的不同接口,必须使用不同的端点。
        AT91SAM3S4C的内置USB模块具有8个端点(2),故两种方法都可以实现。
        方法①主要是通过修改报告描述符来实现,将HID Mouse的报告描述符拷贝到HID Transfer报告描述符后,组成新的报告描述符,同时分别给两个部分增加报告ID,主机将根据报告ID号来识别报告内容,解析动作。报告描述符修改好以后,还需要根据实际情况更改相关参数的长度,如报告描述符长度、两个功能的报告长度(因为增加了报告ID,传输数据首位为报告ID,后面的才是数据)等。
        方法②使用两个接口,每个接口实现一个HID设备,这样每个接口各需要一个报告描述符(这里可以不需要添加报告ID,因为这两个报告属于不同的接口,可以认为无关)。除了报告描述符,配置描述符也因为增加了接口而需要进行调整,整个配置描述符应该包括两个接口的相关信息。同时需要修改的还包括两个接口的接口号及相应使用的端点号等内容。
        下面以双接口方式实现为例,给出设备枚举及测试过程补货信息。
        ①、主要工具“串口调试助手”和USB“Bus Hound”。
        ②、测试软件源自Atmel官网提供例程自带测试软件
        ③、例程来源Atmel官网:http://www.atmel.com/zh/cn/products/microcontrollers/arm/sam3s.aspx?tab=tools

          个人理解的USB HID设备枚举过程如下:
        USB标准输入请求:获取设备描述符;
        USB标准输出请求:设置地址;
        USB标准输入请求:获取设备描述符;
        USB标准输入请求:获取配置描述符;
        USB标准输入请求:获取字符串描述符(语音ID);
        USB标准输入请求:获取字符串描述符(产品序列号);
        USB标准输入请求:获取配置描述符描述符;
        USB标准输入请求:获取字符串描述符(语音ID);
        USB标准输入请求:获取字符串描述符(产品描述符);
        USB标准输入请求:获取字符串描述符(语音ID);
        USB标准输入请求:获取字符串描述符(产品描述符);
        USB标准输入请求:获取设备描述符;
        USB标准输入请求:获取配置描述符;
        USB标准输入请求:获取配置描述符;
        USB标准输出请求:设置配置;
        USB类输出请求:设置空闲;
        USB标准输入请求:获取报告描述符;
        实际串口打印信息如下:
        system is ok! Output
          -I- HIDDFunction_Initialize
          -I- HIDDFunction_Initialize
          USBD_Init
          -I- NewReq Std gDesc Dev
          -I- NewReq Std sAddr SetAddr(3)
          -I- NewReq Std gDesc Dev
          -I- NewReq Std gDesc Cfg
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str3
          -I- NewReq Std gDesc Cfg
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2  
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2
          -I- NewReq Std gDesc Dev
          -I- NewReq Std gDesc Cfg
          -I- NewReq Std gDesc Cfg
          -I- NewReq Std sCfg SetCfg(1)
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2
          -I- NewReq Std gDesc Str0
          -I- NewReq Std gDesc Str2
          -I- NewReq sIdle(0<0) -I- Transfer
          -I- NewReq -I- Report
          -I- NewReq sIdle(0<0) -I- Mouse
          -I- NewReq gDesc{22) Report(50) -I- Mouse
          注:二者对比可以看出,实际设备枚举过程中,在设置配置后,系统重复4次获取了语言ID和产品描述符信息,本人也不知这是否正常,希望有高手解答下。
        下面是USB “Bus Hound”捕获的枚举信息,可以看到系统获取的配置描述符和两个功能的报告描述符的具体信息。
    1.JPG
          识别后设备在系统中的情况,属于同一设备下的两个接口
    2.JPG
          例程提供HID Transfer 测试软件测试情况
    3.JPG
    上述程序是在官网例程和库函数基础上修改的,为了不影响其他例程对库的调用,在库文件中增加了HIDVonderDriver.cHIDVonderDriver.h文件,这样与功能实现相关的文件就仅限于如下4个文件:main.cdevice_descriptor.cHIDVonderDriver.cHIDVonderDriver.h。附件给出两种方法下的这4个文件,供大家参考。
    最后,非常感谢爱板网借用的开发板,是我们的产品模块设计得以顺利进行,希望论坛发展壮大,爱板网越办越好,再次感谢!!
    参考引用:
    ①、《圈圈教你玩USB》;
    ②、AT91SAM3S Datasheet

    单接口模式.rar

    11.53 KB, 下载次数: 7

    单接口模式功能相关程序

    双接口模式.rar

    11.98 KB, 下载次数: 5

    双接口模式功能相关程序

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-25 12:42
  • 签到天数: 692 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-4-6 21:53:33 | 显示全部楼层
    不错,支持一个!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-25 09:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-7-10 09:37:55 | 显示全部楼层
    感谢楼主,ATMEL被收购后资料越来越难找了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-13 10:40 , Processed in 0.137983 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.