首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]usb firmware编程问题

[求助]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编辑过]

on the way
是的,在standard request里面,只需要处理get_descriptor。
整个MCU的中断有没有放开?
UMCRH寄存器中,USB PHY clock有没有enable?
好像没有UMCRH 这个寄存器吧 我搜索了所有data sheet 没找到阿
我试过statuschange中断,可以进入.说明中断应该不会被屏蔽.
而且主机肯定send get_descriptor 命令,可是为什么不进入setup中断子程序呢
on the way
你指的是不是MCE?enable clock to USB2.0 Module 这个设置过了
on the way
对,是MCE位。
你说主机肯定send get_descriptor命令是怎么得出来的?
如果主机确实有该命令出来的话,你尝试不用中断,用循环读UMSR1的SETUP标志位的方式,看看能不能检测到get_descriptor的命令。
在setup中断子程序里面设置断点,debug时,CodeWarrior的Command 窗口出现绿色的ILLEGAL_BP ,不知道是怎么回事.
on the way
用循环的方法也检测不到...
主机在什么情况下会不发get_descriptor呢
我运行这段程序后,已经检测到该设备了,而且在enumdone标志位也为1.
on the way
Illegal_Bp是Illegal breakpoint。你还是需要检查一下你的程序是否有问题。
你说设备检测到了,那设备的类型描述正确吗?
另外,看看你的USB线是否良好,特别是接地端是否接触良好。从USB口取电的话,注意电流大小。
我觉得我现在做的应该是最开始的步骤,我全部程序就只有下面几行:
#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编辑过]

on the way
(供电方式是默认状态的bus-powered)
执行这段程序后,enumeration 完成,电脑上显示自动搜索设备驱动,但失败.
我把断点先后设在两个breakpoint=1处,都没有效果.
根据USB2.0 规范, enumeration 完成后,主机应该发送Get_Descriptor,但我却没有收到.
不知道是不是我的这些设置显然不够?


[此贴子已经被作者于2005-10-10 13:26:37编辑过]

on the way
我用其他工具测过,主机确实发了Get_Descriptor 给我,但是我却没有收到...
是不是我有些寄存器没设置好呢?
on the way
前面USB的初始化没有问题,UMCR_MEM=1; 这句话肯定是要的。
COPCTL = 0; 把COP关掉
你没有配置其他的endpoint,试试配置一个endpoint1
UEPCSR0和UEPCSR1寄存器中的TFRC把它清一下。
试一试 痛苦 没做过USB通信
on the way
请教一下 USB设备固件设计 有没有比较详细的书,或者是网上的资料呢

freescale的网站上的参考设计,我看起来好像没什么心得

[此贴子已经被作者于2005-10-11 11:19:54编辑过]

on the way
我也遇到同样的问题,请问是怎么解决的呢?新手求教
返回列表