- 打卡等级:偶尔看看III
- 打卡总天数:57
- 最近打卡:2026-02-25 13:14:26
中级会员
- 积分
- 307
|
发表于 2025-12-20 14:41:12
|
显示全部楼层
erci*** 发表于 2025-12-20 14:24
大概多久复现一次呢?使用核心板是否可复现
用的AiCube-ISP->资料下载->试验箱演示程序 有的时候一整天都没问题 有的时候一小会就进下载模式了.
char code CONFIGDESC[9+9+9+7+9+9+7] =
{
0x09, //bLength(9);
0x02, //bDescriptorType(Configuration);
sizeof(CONFIGDESC) & 0xff,
sizeof(CONFIGDESC) >> 8 & 0xff,
0x02, // bNumInterfaces = 2(键盘 + 鼠标)
0x01, //bConfigurationValue(1);
0x00, //iConfiguration(0);
0x80, //bmAttributes(BUSPower);
0x32, //MaxPower(100mA);
// -------- Interface 0:鼠标 --------
0x09, //bLength(9);
0x04, //bDescriptorType(Interface);
0x00, //bInterfaceNumber(0);
0x00, //bAlternateSetting(0);
0x01, //bNumEndpoints(1);
0x03, //bInterfaceClass(HID);
0x01, //bInterfaceSubClass(Boot);
0x02, //bInterfaceProtocol(Mouse);
0x00, //iInterface(0);
0x09, //bLength(9);
0x21, //bDescriptorType(HID);
0x01,0x01, //bcdHID(1.01);
0x00, //bCountryCode(0);
0x01, //bNumDescriptors(1);
0x22, //bDescriptorType(HID Report);
0x3E,0x00, //wDescriptorLength(62);
0x07, //bLength(7);
0x05, //bDescriptorType(Endpoint);
0x81, //bEndpointAddress(EndPoint1 as IN);
0x03, //bmAttributes(Interrupt);
0x04,0x00, //wMaxPacketSize(4);
0x0a, //bInterval(10ms);
// -------- Interface 1:键盘 --------
0x09, 0x04, // bLength, bDescriptorType = INTERFACE
0x01, // bInterfaceNumber = 1
0x00, // bAlternateSetting
0x01, // bNumEndpoints = 1(键盘只需要 IN)
0x03, // bInterfaceClass = HID
0x01, // bInterfaceSubClass = Boot
0x01, // bInterfaceProtocol = Keyboard
0x00, // iInterface
// HID descriptor
0x09, 0x21, // HID
0x01, 0x01, // HID v1.01
0x00, // country code
0x01, // num reports
0x22, // report desc type
0x41,0x00, //wDescriptorLength(65);
// Endpoint (IN)
0x07, 0x05, // Endpoint descriptor
0x82, // EP2 IN
0x03, // Interrupt
0x08, 0x00, // MaxPacketSize = 8
0x0A // polling = 10 ms
};
char code HID_MOUSE_REPORTDESC[62] =
{
/***3键鼠标有滚轮 Mouse (Buttons + X + Y + Wheel) - 4 bytes ***/
0x05,0x01, // Usage Page (Generic Desktop)
0x09,0x02, // Usage (Mouse)
0xA1,0x01, // Collection (Application)
0x09,0x01, // Usage (Pointer)
0xA1,0x00, // Collection (Physical)
0x05,0x09, // Usage Page (Buttons)
0x19,0x01, // Usage Minimum (1)
0x29,0x03, // Usage Maximum (3)
0x15,0x00, // Logical Minimum (0)
0x25,0x01, // Logical Maximum (1)
0x95,0x03, // Report Count (3)
0x75,0x01, // Report Size (1)
0x81,0x02, // Input (Data,Var,Abs)
0x95,0x01, // Report Count (1)
0x75,0x05, // Report Size (5)
0x81,0x03, // Input (Const,Var,Abs) ; padding for buttons
0x05,0x01, // Usage Page (Generic Desktop)
0x09,0x30, // Usage (X)
0x09,0x31, // Usage (Y)
0x15,0x81, // Logical Minimum (-127)
0x25,0x7F, // Logical Maximum (127)
0x75,0x08, // Report Size (8)
0x95,0x02, // Report Count (2)
0x81,0x06, // Input (Data,Var,Rel) ; X, Y
0x09,0x38, // Usage (Wheel)
0x15,0x81, // Logical Minimum (-127)
0x25,0x7F, // Logical Maximum (127)
0x75,0x08, // Report Size (8)
0x95,0x01, // Report Count (1)
0x81,0x06, // Input (Data,Var,Rel) ; Wheel
0xC0, // End Collection (Physical)
0xC0 // End Collection (Application)
};
char code HID_KEB_REPORTDESC[65] =
{
0x05,0x01, //USAGE_PAGE(Generic Desktop);
0x09,0x06, //USAGE(Keyboard);
0xa1,0x01, //COLLECTION(Application);
0x05,0x07, // USAGE_PAGE(Keyboard);
0x19,0xe0, // USAGE_MINIMUM(224);
0x29,0xe7, // USAGE_MAXIMUM(255);
0x15,0x00, // LOGICAL_MINIMUM(0);
0x25,0x01, // LOGICAL_MAXIMUM(1);
0x75,0x01, // REPORT_SIZE(1);
0x95,0x08, // REPORT_COUNT(8);
0x81,0x02, // INPUT(Data,Variable,Absolute);
0x75,0x08, // REPORT_SIZE(8);
0x95,0x01, // REPORT_COUNT(1);
0x81,0x01, // INPUT(Constant);
0x19,0x00, // USAGE_MINIMUM(0);
0x29,0x65, // USAGE_MAXIMUM(101);
0x15,0x00, // LOGICAL_MINIMUM(0);
0x25,0x65, // LOGICAL_MAXIMUM(101);
0x75,0x08, // REPORT_SIZE(8);
0x95,0x06, // REPORT_COUNT(6);
0x81,0x00, // INPUT(Data,Array);
0x05,0x08, // USAGE_PAGE(LEDs);
0x19,0x01, // USAGE_MINIMUM(1);
0x29,0x03, // USAGE_MAXIMUM(3);
0x15,0x00, // LOGICAL_MINIMUM(0);
0x25,0x01, // LOGICAL_MAXIMUM(1);
0x75,0x01, // REPORT_SIZE(1);
0x95,0x03, // REPORT_COUNT(3);
0x91,0x02, // OUTPUT(Data,Variable,Absolute);
0x75,0x05, // REPORT_SIZE(5);
0x95,0x01, // REPORT_COUNT(1);
0x91,0x01, // OUTPUT(Constant);
0xc0, //END_COLLECTION;
};
void usb_class_out1()
{
BYTE idata led;
if (usb_bulk_intr_out(UsbBuffer, 1) == 1)
{
led = UsbBuffer[0];
//LED_NUM = !(led & 0x01);
//LED_CAPS = !(led & 0x02);
//LED_SCROLL = !(led & 0x04);
}
}
void usb_class_in1()
{
BYTE idata button[5]={0};
BYTE idata i;
if(DeviceState != DEVSTATE_CONFIGURED)return; //如果USB配置没有完成,就直接退出
if(UsbIn1Busy)return; //判断USB是否空闲,以及是否有按键按下
if(MouseCode & 0x08)button[0] |= 1;
else button[0] &= 0xFE;
if((MouseCode & 0x14) == 0x10)button[1] = 1;
else if((MouseCode & 0x14) == 0x04)button[1] = -1;
else button[1] = 0;
if((MouseCode & 0x03) == 0x02)button[2] = -1;
else if((MouseCode & 0x03) == 0x01)button[2] = 1;
else button[2] = 0;
IE2 &= ~0x80; //EUSB = 0;
UsbIn1Busy = 1;
usb_write_reg(INDEX, 1);
for(i = 0; i < 4; i++)
{
usb_write_reg(FIFO1, button\[i\]);
}
usb_write_reg(INCSR1, INIPRDY);
IE2 |= 0x80; //EUSB = 1;
}
void usb_class_in2()
{
BYTE idata key[8] = {0};
BYTE idata i;
//static idata BYTE KeyboardCodeTemp=0;
if(DeviceState != DEVSTATE_CONFIGURED)return; //如果USB配置没有完成,就直接退出
if(UsbIn2Busy)return; //判断USB是否空闲,以及是否有按键按下
//KeyboardCodeTemp=KeyboardCode;
if(KeyboardCode != 8 || KeyboardCode != 0x18 || KeyboardCode != 0x5A || KeyboardCode != 0x52 || KeyboardCode != 0x1C)
{
if(KeyboardCode == 0x45)key[7] = 0x1E; //1
if(KeyboardCode == 0x46)key[7] = 0x1F; //2
if(KeyboardCode == 0x47)key[7] = 0x20; //3
if(KeyboardCode == 0x44)key[7] = 0x21; //4
if(KeyboardCode == 0x40)key[7] = 0x22; //5
if(KeyboardCode == 0x43)key[7] = 0x23; //6
if(KeyboardCode == 0x07)key[7] = 0x24; //7
if(KeyboardCode == 0x15)key[7] = 0x25; //8
if(KeyboardCode == 0x09)key[7] = 0x26; //9
if(KeyboardCode == 0x19)key[7] = 0x27; //0
if(KeyboardCode==0x16)key[7]=0x63;//.
if(KeyboardCode==0x0D)key[7]=0x2A;//backspace
}
IE2 &= ~0x80; //EUSB = 0;
UsbIn2Busy = 1;
usb_write_reg(INDEX, 2);
for(i = 0; i < 8; i++)
{
usb_write_reg(FIFO2, key\[i\]);
}
usb_write_reg(INCSR1, INIPRDY);
IE2 |= 0x80; //EUSB = 1;
}
|
-
|