打印

computer00的89S52加USBD12模拟的一个U盘 的问题?????

[复制链接]
2260|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaabc|  楼主 | 2007-9-26 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wahahaabc|  楼主 | 2007-9-26 10:58 | 只看该作者

我将你的3个底层函数进行了修改,如下:


#define     D12_DATA    *((unsigned char xdata *)(0xff02))
#define     D12_COMMAND *((unsigned char xdata *)(0xff03))

void write_usb_command(unsigned char usb_command)       //дUSBÃüÁî
{
      /*
      USB_A0=USB_COMMAND_ADD;
      USB_DATA=usb_command;
      USB_WR=0;
      USB_WR=1;
      USB_DATA=0xFF;
      */
      D12_COMMAND = usb_command;

}

void write_a_usb_data(unsigned char usb_data)        //дһ×Ö½ÚUSBÊý¾Ý
{
      /*
      USB_A0=USB_DATA_ADD;
      USB_DATA=usb_data;
      USB_WR=0;
      USB_WR=1;
      USB_DATA=0XFF;
      */
      D12_DATA = usb_data;
}

unsigned char read_a_usb_data(void)                  //¶ÁÒ»×Ö½ÚUSBÊý¾Ý
{
      /*
      unsigned char temp;
      USB_A0=USB_DATA_ADD;
      USB_RD=0;
      temp=USB_DATA;
      USB_RD=1;
      return temp;
      */

      return D12_DATA;
}

使用特权

评论回复
板凳
wahahaabc|  楼主 | 2007-9-26 11:08 | 只看该作者

在main()函数的前面让片选脚为0,复位1次

在main()函数的前面让片选脚为0,复位1次
#define     D12_CS_PIN        P1_6  // SMART D12¿ª·¢°åµÄP1_6½ÓD12µÄCS½Å
#define     D12_RST_PIN       P1_7  // SMART D12¿ª·¢°åµÄP1_7½ÓD12µÄ¸´Î»½Å
#define     D12_SUSPD_PIN     P3_3  // SMART D12¿ª·¢°åµÄP3_3½ÓD12µÄSUSPD½Å

void main(void)
{
      ////////////////////////
      D12_CS_PIN = 0;
      
      D12_RST_PIN = 0;
      delay(10000);
      D12_RST_PIN = 1;
      
      D12_SUSPD_PIN = 0;      
      ////////////////////////
      
      disconnect_usb();

      init_usb();
      connect_usb();
      
      while(1)
      {
            if(!USB_INT)
            {
                  read_interrupt_register();

                  if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;}
                  
                  if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;}
                  
                  if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;}
                  
                  if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}
                  
                  if(Interrupt_Register.Interrupt.main_out_port){endp2_out();continue;}
                  
                  if(Interrupt_Register.Interrupt.main_in_port&&usb_flags.flags.usb_endp2_in){endp2_in();continue;}
            }
      }
}

使用特权

评论回复
地板
wahahaabc|  楼主 | 2007-9-26 11:17 | 只看该作者

无法识别的USB设备

无法识别的USB设备

使用特权

评论回复
5
wahahaabc|  楼主 | 2007-9-26 11:24 | 只看该作者

用BUSHOUND捕获的数据如下,怎么连取设备描述符这一步都没有

Bus Hound 5.00 capture. Complements of www.perisoft.net

  Device - Device ID (followed by the endpoint for USB devices)
            (10) Standard Enhanced PCI to USB Host Controller
            (12) USB Root Hub
  Phase  - Phase Type
            CTL   USB control transfer       
            DI    Data in                    
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data


Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  12.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               1.1.0(2)     
  12.0  DI     01 05 01 00                                         ....                     1.2.0        
  12.0  CTL    23 01 10 00  01 00 00 00                            CLEAR FEATURE            3.1.0        
  12.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               4.1.0(2)     
  12.0  DI     01 05 00 00                                         ....                     4.2.0        
  12.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE              6.1.0        
  12.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               7.1.0        
  12.0  DI     00 85 11 00                                         ....                     7.2.0        
  12.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE            8.1.0        
  12.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               9.1.0(3)     
  12.0  DI     00 85 01 00                                         ....                     9.2.0        
  12.0  CTL    23 01 10 00  01 00 00 00                            CLEAR FEATURE           12.1.0        
  12.0  CTL    a3 00 00 00  02 00 04 00                            GET STATUS              13.1.0        
  12.0  DI     00 05 00 00                                         ....                    13.2.0        
  12.0  CTL    a3 00 00 00  03 00 04 00                            GET STATUS              14.1.0        
  12.0  DI     00 85 00 00                                         ....                    14.2.0        
  12.0  CTL    a3 00 00 00  04 00 04 00                            GET STATUS              15.1.0        
  12.0  DI     00 85 00 00                                         ....                    15.2.0        
  12.0  CTL    a3 00 00 00  05 00 04 00                            GET STATUS              16.1.0        
  12.0  DI     00 05 00 00                                         ....                    16.2.0        
  12.0  CTL    a3 00 00 00  06 00 04 00                            GET STATUS              17.1.0        
  12.0  DI     00 05 00 00                                         ....                    17.2.0        
  12.0  CTL    a3 00 00 00  07 00 04 00                            GET STATUS              18.1.0        
  12.0  DI     08 05 00 00                                         ....                    18.2.0        
  12.0  CTL    a3 00 00 00  08 00 04 00                            GET STATUS              19.1.0        
  12.0  DI     08 05 00 00                                         ....                    19.2.0        

使用特权

评论回复
6
computer00| | 2007-9-27 21:43 | 只看该作者

有一个设置地址里面的bug,不知道你改过来没.

使用特权

评论回复
7
wahahaabc|  楼主 | 2007-9-28 11:00 | 只看该作者

我还没有看到“有一个设置地址里面的bug”

使用特权

评论回复
8
wahahaabc|  楼主 | 2007-9-28 11:15 | 只看该作者

难道是???

////////////////////////////////////////////////////////////
终于取得了突破性进展...哈哈~~~庆祝一下~~~ 

我将设置地址和返回0长度的数据包搞反了...

本来,是要先用地址0返回一个0长度的状态包,然后设备才能使用新地址.
所以在我的程序中,我就先返回了0长度的状态包,再来写地址寄存器.
但是这个过程芯片已经做了...就是说,我要先将地址写到这个寄存器中,
然后再来返回0长度的状态包...芯片会等到ACK后,才启用刚刚写入的地址,
倒塌了...都怪我看数据手册不仔细,想当然了...值得检讨。 
 
///////////////////////////////////////////////////////////

我将返回0长度的状态包和设置地址的顺序交换了一下,如下:
void set_usb_address(void)                {
      usb_flags.flags.set_addr=1;
      while(select_endpoint(1)&0x01);
      
      ///////交换以后////////
      set_usb_addr(Control_Data.DeviceRequest.wValue);
      write_endpoint_buff(1,0,0);
      
      usb_flags.flags.usb_endp0_in=0;
      usb_flags.flags.setup_packet_out=0;
}
仍然是枚举不成功,无法识别的USB设备

使用特权

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

本版积分规则

119

主题

627

帖子

0

粉丝