赵大小高手
驱动牛犊
驱动牛犊
  • 注册日期2003-05-30
  • 最后登录2004-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1780回复:13

求救:D12的初始化问题多多!

楼主#
更多 发布于:2003-06-10 22:15
Hi,jinghuiren!
久仰您的大名!我现在正在调Atmel+d12的USB固件程序!调了一礼拜了,MCU和d12的通讯问题还没解决!您务必要指点一下!谢了先!
我的问题现在如下:
 1。我发的命令没什么用:我用IO口来控制A0,DO-D7接的是MCU的DO-D7,我看了片选,读写使能,以及DATA口的数据值,时序都是对的,就是命令写了没反应,CLKOUT始终是4M,而且我的中断INT_N管脚上电后一直是低(上电时从高变低的),我初始化的时候,第一步我读中断寄存器,读最好处理状态寄存器来清中断(也是发命令了),当命令好像更本就没管用,一直都没什么变化,后面的SOFTconnect 就更连不上了。我测其它地管脚都很正常,就是这个INT_N不正常。我该怎么办?
 2。假如是已经连上了,此时pc将会检测到有usb设备插入,并提示你装驱动,设备枚举的过程到这就结束了吗?如果结束了,那在枚举阶段的那些标准请求(Get Descrpitor等)又是谁发给D12的呢?再有我们编写windriver里不也有这么些标准请求吗?我的理解是检测到有usb设备插入,提示你装入驱动后,来ADD_DEVICE,才发的标准请求,我新手了,还不理解这个,谢谢您的指点。

3 在写D12的INF文件的时候,在Manufacture里除了要写出它的VID,PID也还需要吗?我怎样写!才能被PC检测到。因为按我上面的理解,此时PC还没发标准命令得到我VID ,PID.
  
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-11 09:14
1、应该是你的命令还没写入到d12,状态寄存器都没清,INT_N肯定不会条到高电平,更别说soft connect了。
2、你都还没有枚举成功,怎么会让你装驱动呢?枚举阶段的那些标准请求是当你插上线后检测到soft connect才开始的。
3、在枚举过程中,pc就得到你发过来的pid,vid了,只要跟驱动相吻合,就可以了。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-11 11:10
INT_N管脚是要通过一个上拉电阻连到电源的,至于上电后int_n为低的问题,因为我没做过d12,因此没有经历过,但是据rayrang2000版主说这是d12的一个bug,你需要先对中断寄存器里的所有位写1来清除中断,然后才能初始化你的d12,最后再连上soft_connect,此后你会收到复位中断,因为复位中断会清除某些寄存器的内容,所以你要根据datasheet的说明再复位中断的处理函数中重新设置相应的寄存器。当复位成功后(其中要使能缺省地址0),你会收到枚举中的第一个setup包get_descriptor80 06 00 01 00 00 40 00,然后是set_address,get_descriptor-------------12 00,然后是get_config descriptor80 06 00 02 00 00 09 00(这一个有可能会没有)接着又是get_config descriptor-----------ff 00(返回全部的配置描述符,包括接口和端点),,下面会弹出一个窗口,要求你重新加载驱动,一般最后一个是set_config00 09 01 00 00 00 00 00,之后设备就可以正常工作了,不过如果你设置了string的话,可能还会有其他的一些setup包,我没仔细做过。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-11 11:18
以后不要说“久仰您的大名!”这样的话,我也是半桶水,可担当不起这么高的评价呀,要说就样斑竹的大名的话那还差不多,它可是什么都通呀!
另外大家彼此帮忙是应该的。 :),说不定将来我还需要你帮忙的呢 :D
赵大小高手
驱动牛犊
驱动牛犊
  • 注册日期2003-05-30
  • 最后登录2004-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-11 12:04
hi:
  大虾们好!谢谢你们的热心帮助!我的是D12的初始化问题,可是我怎样去对中断寄存器里的所有位写1来清除中断呢?中断寄存器好像只有读的命令!
我通过读最后处理状态寄存器也清不掉,INT_N一直为高!发的命令好像无效!我现在读中断寄存器是0x1010.
chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-11 15:09
set_address如何处理?为什么在get_descriptor80 06 00 01 00 00 40 00之后,又要响应get_descriptor-------------12 00?成功发送18B的描述符后,没有收到get_config descriptor,而是rxs0为0x30,0x50即没数据的setup包,对吗?请哪位高手帮忙给出详细的枚举通信过程,急用,多谢!
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-11 16:00
1、80 06 00 01 00 00 40 00 读设备描述字
第一次返回0x08个就可以了
80 06 00 01 00 00 40 00------12 01 00 01 DC 00 00 10
2、 00 05 ** ** 00 00 00 00 分配设备地址
00 05 02 00 00 00 00 00
ACK
3、再次读设备描述字,这次返回0x12个
80 06 00 01 00 00 12 00------12 01 00 01 DC 00 00 10 71 04 66 06 00 01 00 00
00 19
4、80 06 02 00 00 00 09 00 读配置描述字的头,返回9个
80 06 00 02 00 00 09 00------09 02 2E 00 01 01 00 80 01
5.、80 06 02 00 00 00 ff 00 读全部配置描述字
80 06 00 02 00 00 FF 00------09 02 2E 00 01 01 00 60 01 09 04 00 00 04 DC A0
B0 00 07 05 81 03 04 00 0A 07 05 01 03 04 00 0A
07 05 82 02 40 00 0A 07 05 02 02 40 00 0A




chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-11 16:27
可是我只能执行到第二次发18B设备描述符,然后竟然收到了零数据信息包的setup事务,接着就又重新收到80 06 00 01 00 00 40 00,好像主机没有正确收到设备描述符似的??
chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-11 17:28
为什么在成功发完18B的描述符后总是收不到80 06 02 00 00 00 09 00setup 包,而是收到莫名其妙的无数据setup 包呢?应该不存在这种无数据setup 包吧?请帮忙解决,急用,多谢!
赵大小高手
驱动牛犊
驱动牛犊
  • 注册日期2003-05-30
  • 最后登录2004-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-11 17:54
chaijih兄:
   有个问题想请教你,你的D12的INT_N管脚上电后是不一直为低?你是怎样使他变高的?谢谢你的指教!
   有电话吗?我想当面和你交流:01062963058
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-11 22:04
为什么在成功发完18B的描述符后总是收不到80 06 02 00 00 00 09 00setup 包,而是收到莫名其妙的无数据setup 包呢?应该不存在这种无数据setup 包吧?请帮忙解决,急用,多谢!


可能原因:
1,描述符有问题,好好检查检查
2,没全部发送过去

上面这两种情况会导致重新枚举,总次数是3。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-06-11 22:07
chaijih兄:
   有个问题想请教你,你的D12的INT_N管脚上电后是不一直为低?你是怎样使他变高的?谢谢你的指教!
   有电话吗?我想当面和你交流:01062963058
 


很多人都遇到你这样的问题,
你先检查一下电路上那个上拉电阻起作用了没有,如果没问题,就再看看datasheet,如何清除中断寄存器里的某一位,理论上把所有的位都清除后电平就会变高。
chenjp
驱动小牛
驱动小牛
  • 注册日期2003-03-11
  • 最后登录2009-05-05
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-03 18:19
请问jinghuiren : 枚举的时候没有GET status这个命令吗?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-03 20:00
有的时候会有,有的时候没有
这要看你所用的驱动里的情况了。
游客

返回顶部