[求助]usb firmware编程问题
- UID
- 120523
- 性别
- 男
|
[求助]usb firmware编程问题
freescale网站上说几乎所有的标准请求都可由硬件处理,只有get_descriptor须由固件处理.
可是,我在 使能USB MODULE 和Normal PHY operation ,并且允许SETUP中断后,
为什么无法进入setup中断程序?
也就是说并没有检测到get_descriptor命令,是不是我漏掉了一些其他设置?
而且我在setup data buffer 里面看到最后一条setup command 是
00 00 0000 0008 0015
从第二个字节是00看应该是get_status命令,
但是其他字节好像又和这条命令有矛盾.
[此贴子已经被作者于2005-10-9 14:49:52编辑过] |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
是的,在standard request里面,只需要处理get_descriptor。
整个MCU的中断有没有放开?
UMCRH寄存器中,USB PHY clock有没有enable? |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
好像没有UMCRH 这个寄存器吧 我搜索了所有data sheet 没找到阿
我试过statuschange中断,可以进入.说明中断应该不会被屏蔽.
而且主机肯定send get_descriptor 命令,可是为什么不进入setup中断子程序呢 |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
你指的是不是MCE?enable clock to USB2.0 Module 这个设置过了 |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
对,是MCE位。
你说主机肯定send get_descriptor命令是怎么得出来的?
如果主机确实有该命令出来的话,你尝试不用中断,用循环读UMSR1的SETUP标志位的方式,看看能不能检测到get_descriptor的命令。 |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
在setup中断子程序里面设置断点,debug时,CodeWarrior的Command 窗口出现绿色的ILLEGAL_BP ,不知道是怎么回事. |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
用循环的方法也检测不到...
主机在什么情况下会不发get_descriptor呢
我运行这段程序后,已经检测到该设备了,而且在enumdone标志位也为1. |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
Illegal_Bp是Illegal breakpoint。你还是需要检查一下你的程序是否有问题。
你说设备检测到了,那设备的类型描述正确吗?
另外,看看你的USB线是否良好,特别是接地端是否接触良好。从USB口取电的话,注意电流大小。 |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
我觉得我现在做的应该是最开始的步骤,我全部程序就只有下面几行:
#include "hidef.h" /* common defines and macros */
#include "MC9S12UF32.h" /* derivative information */
#pragma LINK_INFO DERIVATIVE "1"
byte breakpoint=0;
void interrupt 22 setup(void) {
if(UMSR1_SETUP==1)
breakpoint=1;
else
breakpoint=2;
}
void main(void) {
EnableInterrupts;
UMCR_MCE=1; //enable clock to USB2.0 Module
UMCR_SPHY=0; //normal phy operation
UMCR_DISCON=0; //normal operation on USB bus
UIMR_SETUPIE=1; //enable setup interrupt
UMCR_MEM=1; //enable USB2.0 Module(不知道这一步是否需要)
for(;;){
if(UMSR1_SETUP==1)
breakpoint=1;
else
breakpoint=2;
}
}
[此贴子已经被作者于2005-10-10 13:25:41编辑过] |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
(供电方式是默认状态的bus-powered)
执行这段程序后,enumeration 完成,电脑上显示自动搜索设备驱动,但失败.
我把断点先后设在两个breakpoint=1处,都没有效果.
根据USB2.0 规范, enumeration 完成后,主机应该发送Get_Descriptor,但我却没有收到.
不知道是不是我的这些设置显然不够?
[此贴子已经被作者于2005-10-10 13:26:37编辑过] |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
我用其他工具测过,主机确实发了Get_Descriptor 给我,但是我却没有收到...
是不是我有些寄存器没设置好呢? |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
前面USB的初始化没有问题,UMCR_MEM=1; 这句话肯定是要的。
COPCTL = 0; 把COP关掉
你没有配置其他的endpoint,试试配置一个endpoint1
UEPCSR0和UEPCSR1寄存器中的TFRC把它清一下。 |
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
|
|
|
|
|
- UID
- 120523
- 性别
- 男
|
请教一下 USB设备固件设计 有没有比较详细的书,或者是网上的资料呢
freescale的网站上的参考设计,我看起来好像没什么心得
[此贴子已经被作者于2005-10-11 11:19:54编辑过] |
|
|
|
|
|
- UID
- 135662
- 性别
- 男
|
|
|
|
|
|