wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1508回复:13

借助一点别人的成果,带给大家一点方便

楼主#
更多 发布于:2004-08-24 09:34

1.GoodLink。GoodLink是靠一个引脚接发光二极管实现的。在 USB设备枚举时LED指示灯将立即闪亮;当PDIUSBD12被成功枚举并配置时, LED指示灯将会始终亮;经过PDIUSBD12的USB数据传输过程中, LED将一闪一闪,传输成功后LED熄灭;在挂起期间,LED熄灭。这种特性可以使我们知道 PDIUSBD12的状态,方便电路调试。
2.单片机的中断应设置为电平触发;中断后一定要读上次传输状态寄存器(命令40-45H),以清 除中断寄存器中的中断标志。这样,PDIUSBD12的中断输出才能变回高电平,这一点非常重要。
3.在接收到Setup包后,一定要调用ACK set up命令重新使能端口0。
4. 在向IN端点写完数据后,一定调用Val i date Buffer(命令FAH),指明缓冲区中的数据有效,可以发送到主机。
5 当读完数据后,一定调用Clear Buffer(命令F2H),以保证可以接收新的包。
6 可以通过调用Read Chip ID(命令FDH)检查PDIUSBD12是否工作。该命令要读两个字节数 据。

USB初始化过程为:
① Set Address Enable;
② Set Endpoint Enable(此时LED亮);
③ Disconnect;
④ delay(1~2 s);
⑤ Connect(即用43h参数调用Set Mode,此时LED灭);
⑥ Read Interrupt Register。
  在调试USB单片机程序时,还要特别注意Win dows对USB 设备的枚举顺序:
① GetDeviceDescriptor。主机主要对Length域感兴趣,发送内容一定要正确,特别是第 2字节type一定为0x01,即Device;否则,主机将不响应,或 者再重复2次后放弃。可检查一下对EP0的RX、TX的设置次序。

② SetAddress。一般为02或03。

③ 连续3次GetDeviceDescriptor,读取全部设备描述符,一般为 18 B,分为多次传输。如果不正确,主机将不响应或重复2次后放弃。

④ GetConfigDescriptor。注意第2字节一定为0x02,即config 。

⑤ GetStringDescriptor(可能没有),根据在设备描述符中是否有 String索引而定。一般先读取LanguageID,再读取product string。

⑥ 读取全部ConfigDescriptor,次数根据描述符的大小决定(端点个数不同,描述符大小不同),如 果不正确,主机将不响应或再重复2次后放弃。

⑦ 如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否则找到未知设备,不可用。 安装驱动程序后,以后的每次PlugIn,枚举次序与以上步骤略有不同,之后会有 SetConfiguration、GetConfiguration和GetInterface等调用。

最新喜欢:

crazyqpcrazyq...
LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-24 11:21
好帖…………
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-24 11:27
对高手没什么意义,但对新手还是很有帮助的,不是吗!
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-24 14:46
希望大家帮忙顶一下,让更多认为这东东有用的人能够看到它
crazyqp
驱动小牛
驱动小牛
  • 注册日期2004-07-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-24 16:59
我顶一下!!谢谢wly76和LikeDDK还有METALWING(好像拼错了)对我们菜鸟的帮助,希望大家能把看到的好东西都上传到这里,和大家分享,争取把这个贴做成精华贴!!!!
jrmforever
驱动牛犊
驱动牛犊
  • 注册日期2004-07-24
  • 最后登录2010-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-24 17:02
狂顶

尤其是对我这样的新新手!很有帮助!!!


思路能更清晰以下

不过。。。。如果把相应的代码贴出来???


嗬嗬,大家别砸我啊!!!因为是新手嘛!!!


响应的人拼命顶啊!我想搂主不会介意的。对吗? :D :D :D
crazyqp
驱动小牛
驱动小牛
  • 注册日期2004-07-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-24 17:03
我再顶一下!!呵呵,我现在一边在看d12的固件程序,一边在作proteldxp的制图,在看d12程序的过程中,对有些语句和命令的了解不是非常的深,不知道可不可以在这里贴出来,向几位高手请教一下啊!!!先谢过
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-24 17:23
谢了,我就喜欢菜问题,因为我也是菜鸟,但我希望,不久的将来
我可以回答不菜的问题,自己也可以成为大虾,和大家不停的交流
会令我提高,我很高兴,希望看到你们解决问题的每一个细节,因为
了解每一个细节的人,才是真正的高手。用不了多久,我相信,会和
你们这些高手一同交流。
crazyqp
驱动小牛
驱动小牛
  • 注册日期2004-07-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-25 09:06
好,有你这句话,我就不客气了!!
提问:
1:在周×的固件编程和驱动开发中,他举了一个usb枚举的数据传输过程,第一次读取设备描述符,80 06 00 01 00 00 40 00,其中00 01代表的是字长域,根据不同的请求含义改变,本例中,设备的数值为1,所以应该是0x0001,但是由于usb和c51的数据结构不同,要对数据高低位交换,因此,输出应该位80 06 01 00 00 00 40 00才对啊!!我错了还是周×错了啊???
2:D12的命令中有一个应答设置命令F1h,接受者是选择的端点,这个命令书上只是说,一个setup信息包的到达将IN缓冲区刷新并禁止对IN和OUT端点的两条命令,是缓冲区有效和清零缓冲区命令。
这一大段话真是越看越迷糊啊!!能帮忙解释一下吗??
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-25 10:24
第一个问题,我要看一下资料,考虑考虑看能否回答你。
第二个问题看一下有关命令D8重新使能EP0的问题的贴子就明白了。
crazyqp
驱动小牛
驱动小牛
  • 注册日期2004-07-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-25 13:21
帖子看了,可是第二个问题我还是没有明白啊!!我再把问题说得具体一些:D12CI.C//D12命令接口
。。。。。。。
//端点应答处理
void D12_AcknowlegeEndpoint(unsigned char endp)
{
   outportb(D12_COMMAND,endp);
   outportb(D12_COMMAND,0xF1);
   if(endp==0)outportb(D12_COMMAND,0xF2);
}
这个函数到底是怎么回事啊,我有点不明白!!
再加上一个问题:
extern IO_REQUEST idata ioRequest;
这个语句中ioRequest是具体干什么的啊??此外,IO_REQUEST是类名,那 idata又是??但我又看到它是一个c51的数据类型,这样的表述到底对不对啊??
crazyqp
驱动小牛
驱动小牛
  • 注册日期2004-07-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-25 13:42
呵呵,你如果在上海的话,我可以请你啜一顿啊!!当然不会是青菜,萝卜的啊!!!先给你十分,呵呵,我的分数也不多,不好意思
sunnysky
驱动牛犊
驱动牛犊
  • 注册日期2004-07-30
  • 最后登录2006-07-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-26 10:03
好,有你这句话,我就不客气了!!
提问:
1:在周×的固件编程和驱动开发中,他举了一个usb枚举的数据传输过程,第一次读取设备描述符,80 06 00 01 00 00 40 00,其中00 01代表的是字长域,根据不同的请求含义改变,本例中,设备的数值为1,所以应该是0x0001,但是由于usb和c51的数据结构不同,要对数据高低位交换,因此,输出应该位80 06 01 00 00 00 40 00才对啊!!我错了还是周×错了啊???
2:D12的命令中有一个应答设置命令F1h,接受者是选择的端点,这个命令书上只是说,一个setup信息包的到达将IN缓冲区刷新并禁止对IN和OUT端点的两条命令,是缓冲区有效和清零缓冲区命令。
这一大段话真是越看越迷糊啊!!能帮忙解释一下吗??


第一个问题,按你的字面理解,是你对了!从电脑上抓下来的数据也是80060100。。。
诚实努力,不懈追求! *************************** 承接单片机软件(C)项目开发 QQ:397912594 E-mail:lshqwork@163.com(不回答问题)
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-26 13:08
有一个问题,一直不理解,大家讨论一下,zlg书上说,d12上电挂起
suspend为低,请问,d12什么原因会导致上电挂起,怎样解决这个问题,有人碰到过这种状况吗,怎么处理的。
   状态:d12没有任何反应,int,suspend为低,3.3v输出正常,
clock输出正常,4mhz。不接受指令,没有任何动作。

游客

返回顶部