打印

在这个特殊的日子里,解决一个BUG,有了自己的USB!

[复制链接]
1959|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小李志|  楼主 | 2007-9-15 19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大约在4月份学COMPUTER 大侠也做了一个USB键盘,但结果却很令人失望,在别人的电脑上可以使用(主板配置都可以),偏偏在我的电脑(很多电脑也有该问题,我想肯定是配置不行吧)上不可以使用,我原以为是主板有问题,就放了一段时间,但一想如果主板有问题,那为什么一般的产品都可以用呢?
于是,新的学期我又拿起了D12,也问了电脑00该问题,但还是没解决,不得以,自己用串口一步一步的跟踪,看看到底有什么,但一切并不如你所愿,比如,当你第一次读D12控制端点输入产生的中断,再读上次处理状态,返回值却是92,但这明显是错误的,这个方法也有很大的难度。
最后通过串口看出是设置地址的那一步有问题,然后把设置地址(试了一下没多大把握,瞎猜的)改为如下:
void set_usb_address(void)
{
 usb_flags.flags.set_addr=1;
 while(select_endpoint(1)&0x01);
 
 set_usb_addr(Control_Data.DeviceRequest.wValue);
 while(select_endpoint(1)&0x01);
 
 write_endpoint_buff(1,0,0);

 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}
就成功了,也许上帝看我太累,一遍又一遍的烧程序!
不过整个程序是学习COMPUTER 00,没办法,咱们没天赋,只能偶尔站在巨人的肩膀上看一看风景了,
看似没什么,但对我意义重大,有终于有续集了。

相关帖子

沙发
tyw| | 2007-9-15 19:47 | 只看该作者

恭喜!恭喜!帮俺的键盘也整一下吧,哈哈

使用特权

评论回复
板凳
computer00| | 2007-9-15 19:52 | 只看该作者

不好意思,当时大意了。不过这个BUG我在几天前就已经公布

具体日期是8月25号,可能你没留意到. 你改的代码也差不多了,不过应该把中间两句调换一下。


bug公告: http://computer00.21ic.org/go.asp?logid=36520#28637

相关讨论:https://bbs.21ic.com/club/bbs/list.asp?boardid=53&t=2646624&tp=%u90C1%u95F7%uFF0CISP1362%u641E%u4E0D%u5B9A...

使用特权

评论回复
地板
小李志|  楼主 | 2007-9-15 19:54 | 只看该作者

哦,无公害键盘

来点化肥和农药,呵呵,不行的话也接个串口来调调

使用特权

评论回复
5
小李志|  楼主 | 2007-9-15 19:58 | 只看该作者

哦,当时回家了

哈哈,不过我还是嫩了点,要加入你的专区多学习一下了

使用特权

评论回复
6
computer00| | 2007-9-15 20:34 | 只看该作者

感谢你的经验分享。自己解决的问题总会印象深刻,提高也

使用特权

评论回复
7
小李志|  楼主 | 2007-9-15 21:01 | 只看该作者

哦,

要多像你学习,
其实这个问题在周立功那本书的73页有个图,他的流程是对的,
是不是这样的,如果先写0B字节的话,那么然后写的那个地址就无效了,
它可能在这写入之前新的地址就已经生效了

使用特权

评论回复
8
computer00| | 2007-9-17 08:59 | 只看该作者

恩,在我给的那个讨论中,有说到,要ACK之前就要设置好地

然后芯片收到ACK之后会自动起用刚设置的地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

727

帖子

3

粉丝