• «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go
主题 : 裸机USB Host驱动 复制链接 | 浏览器收藏 | 打印
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
楼主  发表于: 2011-11-18 13:37

 裸机USB Host驱动

描述:00
图片:
哈哈,今天太让我兴奋了,历时半年终于用中断传输从鼠
标收到数据了。如果你也正因此事而迷茫,我给你最好的建议就是把OHCI再认真看两遍,USB协议再看一遍,就是这样的。研究过HID的都知道仅从HID收到数据还不算完成驱动,还要对数据根据描述符解析后才基本好,目前我还没弄好这个,打算直接到Linux窃取相关代码了,同志们静候我的佳音吧。
//-------------------------------------------------------------------------------------------------------------------------------------------------------
补充一下:   我并不是一半年都在研究这个,而只是在前两个月内没搞定鼠标就放置在那里了,昨晚上突然想起来了就温习了一下OHCI和USB协议,然后有了点灵感,今中午回家就一下子弄好了。特此交待清楚勉得把大家吓到了,其实专心去学是用不了那么久的。
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
很抱歉,兄弟们,由于时间原因我的程序还没写完整甚至有点乱。但核心部分已经搞定,插上鼠标动一动你就会看到如图的数据。暂时传上代码并命名为USB1.1-OHCI.2011.11以后我会更新的
//----------------------------------------------------------------------------------------------------------------------------------------------------------
[ 此帖被heyuanjie87在2011-11-20 14:54重新编辑 ]
描述:00
附件: USB1.1-OHCI.2011.11.rar (71 K) 下载次数:336
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2011-11-18 13:51
牛X
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
2楼  发表于: 2011-11-18 18:05

 回 1楼(mindee) 的帖子

多谢版主夸奖,小弟不才只是略懂
级别: 新手上路
UID: 60214
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2011-12-06
最后登录: 2012-03-07
3楼  发表于: 2011-12-07 20:17
学习中,谢谢!!!!
级别: 新手上路
UID: 50150
精华: 0
发帖: 45
金钱: 235 两
威望: 48 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2011-06-19
最后登录: 2012-05-28
4楼  发表于: 2011-12-11 14:58
我有问题求教lz。
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
5楼  发表于: 2011-12-13 00:21

 回 4楼(鬼鬼一哈) 的帖子

有问题就讲
级别: 新手上路
UID: 50150
精华: 0
发帖: 45
金钱: 235 两
威望: 48 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2011-06-19
最后登录: 2012-05-28
6楼  发表于: 2011-12-13 09:56
我在看你的程序有不懂的地方,在void ControlRead(U8 DevAddr,U8 *pBuf,U8 Size)这个函数中,你建立了3个TD队列。就是在数据阶段你定义了pBuf缓冲地址。是如何把设备的描述符放在pBuf里的呢?
设置好了TD和ED,然后执行StartProcess();,主机发数据可以理解为是自动的,那接受数据是在哪里体现的呢?
while(!(rHcInterruptStatus&2));这个是等待发送完,还是接受size个数据完成的标志位?
级别: 新手上路
UID: 50150
精华: 0
发帖: 45
金钱: 235 两
威望: 48 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2011-06-19
最后登录: 2012-05-28
7楼  发表于: 2011-12-13 09:59

 回 5楼(heyuanjie87) 的帖子

这是我觅的u盘的信息,觅鼠标全是数据0X00,不同判断设备是否连接上,都是可以的,只是读取描述符不行。
设备已连接

取得端点0的大小
( 0st=0x0 )( 1st=0x0 )( 2st=0x0 )( 3st=0x0 )( 4st=0x0 )( 5st=0x0 )( 6st=0x0 )( 7st=0x0 )00000000

设置新地址

全部设备描述符
( 0st=0x0 )( 1st=0x0 )( 2st=0x0 )( 3st=0x0 )( 4st=0x0 )( 5st=0x0 )( 6st=0x0 )( 7st=0x0) ( 8st=0x16)( 9st=0x15)(10st=0x28)(11st=0x86)(12st=0xC6)(13st=0x13)(14st=0x1 )(15st=0x2 )(16st=0x3 )(17st=0x1 )还是有数据返回的
9字节配置描述符
( 0st=0x0 )( 1st=0x0 )( 2st=0x0 )( 3st=0x0 )( 4st=0x0 )( 5st=0x0 )( 6st=0x0 )( 7st=0x0 )( 8st=0x0 )
总配置描述符
( 0st=0x0 )( 1st=0x0 )( 2st=0x0 )( 3st=0x0 )( 4st=0x0 )( 5st=0x0 )( 6st=0x0 )( 7st=0x0 )( 8st=0x0 )( 9st=0x0 )(10st=0x0 )(11st=0x0 )(12st=0x0 )(13st=0x0 )(14st=0x0 )(15st=0x0 )(16st=0x0 )(17st=0x0 )(18st=0x0 )(19st=0x0 )(20st=0x0 )(21st=0x0 )(22st=0x0 )(23st=0x0 )(24st=0x0 )(25st=0x0 )(26st=0x0 )(27st=0x0 )(28st=0x0 )(29st=0x0 )(30st=0x0 )(31st=0x0 )
配置设备
级别: 新手上路
UID: 60214
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2011-12-06
最后登录: 2012-03-07
8楼  发表于: 2011-12-13 14:30
          rHcCommandStatus |= 0x02;
           // 控制列表处理使能,开始工作
     rHcControl |= 0x90;  ////允许控制传输,USB 可操作

     while(!(rHcInterruptStatus&2));//等待处理完成

     处理完之后,打印显示gHcca.DoneHead值时,怎么是0啊??不是rHcInterruptStatus置1时,更新吗?

  gCtrlTD.Control>>28   也没有产生错误码!!


  
[ 此帖被zou_sky1在2011-12-13 14:36重新编辑 ]
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
9楼  发表于: 2011-12-13 22:02

 回 6楼(鬼鬼一哈) 的帖子

这个函数里即有发数据(Setup)也有数据到BUF,这些收发数据的起始地址都在TD中,由三TD组成了链,链头放在ED中,ED放到那个寄存器中,这样主机就可自动收发数据,那个startprocees是诰诉主机可以开始收发数据了,在创建ED,TD时是不会有数椐传输的,
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go