WCH沁恒单片机
直播中

张览秀

7年用户 1176经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

CH375使用外置固件模式时枚举失败怎么处理?

个人程序:
  称为USB_WriteCom(0X05);/* 执行时钟 */   
  Delay1s();Delay1s();


  USB_WriteCom(0X06); USB_WriteData(0X57);
  温度 = USB_ReadData(); if(temp==0XA8) SendString8("Check OK");进入


  USB_WriteCom(0X15); USB_WriteData(0X01);延迟1s();
  温度 = USB_ReadData(); if( temp==0X51) SendString8("Set Mode OK");输入
  while(1)
  {
  while( USB_INT );
  USB_WriteCom(0X22);
  temp = USB_ReadData();SendString8("INT=");SendString8_Num(temp,"%X");Enter  
  switch( temp )
  {
    case 0x0C: //端点0的接收器到接收到数据,SETUP成功
            USB_WriteCom(0x28) ; //接收USB数据信息
            temp = USB_ReadData(); //读取数据长度
            if( temp==8 ) /*一定会出现8个数据 */
            {
                for ( i=0;i<8;i++ ) //读取8字节数据               
                { USB_Buf =USB_ReadData); }
                CurrentSetupRequest = USB_Buf[1]; //得到bRequest,即设备
                SendString8("SETUP="请求endString8_Num(CurrentSetupRequest");Enter
                switch(CurrentSetRequest)
                {
                case 66: //设备请求,即设备请求3;%s
                    = USB_Buf]; // 类型
                    请求(");SendString8_Num(endString02d");                     {                     case类型();SendString8_Num(%x02d)))
                    ))


                        当前描述符 = 设备描述符;//将老公设备
                    录下来)(0x_WriteCom) //USB发送数据命令
                    USB_WriteData(8); //设置发送数据长度
                    for (i = 0; i < 8; i++) //发送八字节数据
                    {USB_WriteData( CurrentDescriptor );Delay1ms();Delay1ms(); }  
                    USB_WriteCom(0x23);USB_ReadData(); //释放USB自由
                    CurrentDescriptor_ = 8; // 存储已经发送的数据位置
                        CurrentDescriptor_Size =8;//设置设备最大长度
                        1sendString8(send device descrn");
                        休息;
                    case 02: //配置请求x02
                        Current ConfigurationDesc 将配置描述符描述或配置文件/S/S 大小写当前配置文件_当前配置文件_配置文件_配置
                        文件///配置文件/最大配置描述rSIZ
                        ");
                        休息;
                    }
                    打破;
                case 0x05: // 设置设备地址
                    DeviceAddress = USB_Buf[2]; //取设备地址
                    USB_WriteCom(0x29); // USB发送数据命令
                    USB_WriteData(0); // 发送零字节数据
                    USB_WriteCom(0x23);USB_ReadData(); //释放USBbreak
                    ;
                }
            }
        打破;
        case 0x08: //数据端点0的发送器发送完毕,IN成功
             USB_WriteCom(0x23);USB_ReadData(); //释放结果
            )if (( CurrentSetup= 0x06 )&&(CurrentDescriptor) //在已经发送过的设备 = 并且有可以发送的描述
            {
                Len = CurrentDescriptor_Size - CurrentDescriptor_Sent; //需要发送数据长度
                Len = (Len > 8) ? 8:伦;//判断还需要发送多少位数据
                USB_WriteCom(0x29); //USB发送数据命令
                USB_WriteData(Len); 发送Len字节数据
                for (i = 0; i <; i++) //发送剩下的数据
                {
                    USB_WriteData( CurrentDescriptor[CurrentDescriptor_Sent] );
                    CurrentDescriptor_Sent++;
                }
            USB_WriteCom(0x23);USB_ReadData(); //"USB释放
                发送SendString8(send desc");
            }
            else if ( CurrentSetupRequest == 0x05 )
            {
                USB_WriteCom(0x13); //将设备地址存入芯片
                USB_WriteData(DeviceAddress); //发送设备地址
                SendString8("set address");SendString8_Num(DeviceAddress,"%d");Enter
            }
            break;
        case 0x00: // ep0 输出
            USB_WriteCom(0x23);USB_ReadData(); // 解锁 USB
            中断;
  默认值: if ( (temp&0x03)==0x03 ) { SendString8("总线重置rn"); }
            USB_WriteCom(0x23);
            温度 = USB_ReadData(); //未知
            中断;
  }
  }使用串口的打印信息如下: Check OK Set Mode OK INT=B Bus reset INT=B Bus
resetINT =B Bus reset INT=B Bus reset INT=C SETUP=6 Get Desc: 01 send device desc INT=0 INT=0 INT=C SETUP=5 INT=8设置地址 28 INT=7总线复位INT=7总线复位INT=7总线复位INT=C SETUP=6获取描述:01发送设备描述INT=0 INT =0 INT=C设置=5



































INT=8
设置地址 29
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=C
SETUP=6
获取描述:01
发送设备描述
INT=0
INT=0
INT=0
INT= 0
INT=0
INT=0
INT=C
SETUP=5
INT=8
设置地址 30
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=C
SETUP=6
获取描述:01
发送设备描述
INT=0
INT=0
INT=C
SETUP=5
INT=8
设置地址31


无法正常发送设备请求符,设备无法正常枚举。
  

回帖(1)

陈墨

2022-9-26 09:24:02
您好,看您的打印,这边这个地址也设置了。您是如何判断的375没有正常发送设备描述符的,看您的打印时产生08中断,即端点0的IN中断了,您可以看一下您的上传的数组的设备描述符是否正确。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分