Chinaunix首页 | 论坛 | 博客
  • 博客访问: 951951
  • 博文数量: 214
  • 博客积分: 10173
  • 博客等级: 上将
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-18 13:48
文章分类

全部博文(214)

文章存档

2012年(1)

2010年(13)

2009年(5)

2008年(98)

2007年(97)

分类: LINUX

2008-01-22 15:45:24

2008.1.22
近来要做9200 usb device的驱动,对USB我是一点都不了解哦,就是一张白纸。经过几天的看书,查资料。了解了一些基本概念。我准备先在7s64上实现按个按键,点个小灯,通过USB进行传输数据。相当的痛苦。。。。
一些基本概念的理解
1.主机是控制器。USB设备回应主机的请求,但USB设备之间不能互送信息。当主机向USB外设发送数据时,主机发出1个OUT信号。外设如果有时间接收数据,并接收无误,就返回1个ACK信号给主机;如果忙,就返回1个NAK信号;如果发现错误,就不返回信号。
2.OUT表示从主机到外设,IN表示从外设到主机。
3.当USB设备接入HUB(集线器)后,主机控制器和主机软件能自动侦测到设备的接入。然后,主机软件读取一系列的数据用于确认设备特征,如Vendor ID、Product ID、接口工作方式、功率消耗等参数。之后,主机分配给外设一个单独的地址。地址是动态分配的,各次可能不同。在分配完地址之后,对设备进行初始化,初始化完成以后,就可以对设备进行I/O操作了。
4.四种传输类型
  ①块传输。块传输用于支持突发的大量的数据,以8、16、32或64字节的信息包传送。
  ②中断传输。中断传输用于量少且不经常传送的周期性数据。中断数据的包长限制在64字节内。
  ③同步传输。同步传输主要用于音频和视频数据流,不具有USB定义的格式。
  ④控制传输。控制传输应用于控制命令和状态命令的传送。
 
2008.1.25
经过几天的折腾,系统终于识别出HID设备了,遇到一个问题,我到现在还不清楚怎么回事。
const char keyboardDescriptor[] = {
  0x0105, // Usage Page (Generic Desktop)
  0x0609, // Usage (keyboard)
  0x01A1, // Collection (Application)
  0x0705, //  Usage (Pointer)
  0xe019,//usage min (224) //60, 61
  0xe729,//usage max (231) //62, 63
  0x0015, //logical min (0) //64, 65
  0x0125,//logical max (1) //66, 67
  0x0175,//report size (1) //68, 69
  0x0895,//report count (8)   //70, 71
  0x0281,//input (data, variable, absolute) [modifier byte] //72, 73
  0x0195, //report count (1)   //74, 75
  0x0875, //report size (8)    //76, 77
  0x0381, //input (constant) [reserved byte]  //78, 79
  0x0595,  //report count (5)   //80, 81
  0x0175,  //report size (1)    //82, 83
  0x0805, //usage page (page# for leds) //84, 85
  0x0119, //usage min (1)   //86, 87
  0x0529, //usage max (5)   //88, 89
  0x0291, //output (data, var, abs) [led report] //90, 91
  0x0195, //report count (1)   //92, 93
  0x0375, //report size (3) //94, 95
  0x0391, //output (constant) [led report padding]  //96, 97
 
  0x0695,  //report count (5)   //98, 99
  0x0875, //report size (8) //100, 101
  0x0015,  //logical min (0) //102, 103
  0xFF25, //logical max (101)  //104, 105
  0x0705, //usage page (key codes)   //106, 107
  0x0019, //usage min (0)   //108, 109
  0x6529,//usage max (101) //110, 111
  0x0081, //input (data, array)   //112, 113
  0xC0   //end collection  //114
  }
 
const char keyboardDescriptor[] = {
      0x05, 0x01, //usage page (generic desktop)   //52, 53
      0x09, 0x06, //usage (keyboard)   //54, 55
      0xA1, 0x01, //collection (application) //56, 57
      0x05, 0x07, //usage page (key codes)   //58, 59
      0x19, 0xE0, //usage min (224) //60, 61
      0x29, 0xE7, //usage max (231) //62, 63
      0x15, 0x00, //logical min (0) //64, 65
      0x25, 0x01, //logical max (1) //66, 67
      0x75, 0x01, //report size (1) //68, 69
      0x95, 0x08, //report count (8)   //70, 71
      0x81, 0x02, //input (data, variable, absolute) [modifier byte] //72, 73
      0x95, 0x01, //report count (1)   //74, 75
      0x75, 0x08, //report size (8)    //76, 77
      0x81, 0x01, //input (constant) [reserved byte]  //78, 79
      0x95, 0x05, //report count (5)   //80, 81
      0x75, 0x01, //report size (1)    //82, 83
      0x05, 0x08, //usage page (page# for leds) //84, 85
      0x19, 0x01, //usage min (1)   //86, 87
      0x29, 0x05, //usage max (5)   //88, 89
      0x91, 0x02, //output (data, var, abs) [led report] //90, 91
      0x95, 0x01, //report count (1)   //92, 93
      0x75, 0x03, //report size (3) //94, 95
      0x91, 0x01, //output (constant) [led report padding]  //96, 97
      0x95, 0x05, //report count (5)   //98, 99
      0x75, 0x08, //report size (8) //100, 101
      0x15, 0x00, //logical min (0) //102, 103
      0x25, 0x65, //logical max (101)  //104, 105
      0x05, 0x07, //usage page (key codes)   //106, 107
      0x19, 0x00, //usage min (0)   //108, 109
      0x29, 0x65, //usage max (101) //110, 111
      0x81, 0x00, //input (data, array)   //112, 113
      0xC0        //end collection  //114
}
不知道为什么定义成short型,枚举过程就有问题。改成char就OK了!!
编译环境是ADS,我用busbound抓包,两种定义格式的数据都是一样的,不明白。。。
阅读(1442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~