找回密码
 立即注册
楼主: ercircle

USB拓展库及使用示例 | 本贴 咨询 USB,基本帮您把USB程序开发完成

 火 [复制链接]
已绑定手机

124

主题

5136

回帖

1万

积分

超级版主

无情的代码机器

积分
11478
 楼主| 发表于 2025-12-20 14:24:18 | 显示全部楼层
jiaox*** 发表于 2025-12-20 13:58
确定P3.2用10K拉到VCC上了(P3.3有接其它信号),也没有操作IAP_CONTR寄存器.但是有概率进下载模式非常费解. ...

大概多久复现一次呢?使用核心板是否可复现


另外跑例程包里键鼠例程是否可复现

可以上传下工程和原理图看看
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

3

主题

19

回帖

318

积分

中级会员

积分
318
发表于 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;

}


截图202512201453355953.jpg

点评

J4是跳线帽吗?接了没  详情 回复 发表于 2025-12-20 15:12
回复

使用道具 举报 送花

已绑定手机

124

主题

5136

回帖

1万

积分

超级版主

无情的代码机器

积分
11478
 楼主| 发表于 2025-12-20 15:12:54 | 显示全部楼层
jiaox*** 发表于 2025-12-20 14:41
ercircle 发表于 2025-12-20 14:24
大概多久复现一次呢?使用核心板是否可复现

J4是跳线帽吗?接了没
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

3

主题

19

回帖

318

积分

中级会员

积分
318
发表于 2025-12-20 15:18:56 | 显示全部楼层
erci*** 发表于 2025-12-20 15:12
J4是跳线帽吗?接了没

没接,下载时用镊子短接用的.
回复

使用道具 举报 送花

3

主题

19

回帖

318

积分

中级会员

积分
318
发表于 2025-12-20 15:39:36 | 显示全部楼层
原来单鼠标的时候没问题,后来加了键盘就出现这种情况了,鼠标用的in1端点,加键盘复合设备调试时,按键响应写入in2端点,竟然连带鼠标也有右键响应.,后来鼠标加了滚轮输入才好.

点评

方便打包上传完整工程不?我用核心板挂工控机上看下是否能复现  详情 回复 发表于 2025-12-20 17:49
回复

使用道具 举报 送花

已绑定手机

124

主题

5136

回帖

1万

积分

超级版主

无情的代码机器

积分
11478
 楼主| 发表于 2025-12-20 17:49:05 | 显示全部楼层
jiaox*** 发表于 2025-12-20 15:39
原来单鼠标的时候没问题,后来加了键盘就出现这种情况了,鼠标用的in1端点,加键盘复合设备调试时,按键响应写 ...

方便打包上传完整工程不?我用核心板挂工控机上看下是否能复现

点评

公司产品,完整工程还真不好上传.我直接将P3.2短接到电源,再看看吧.  发表于 2025-12-22 09:26
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

已绑定手机

3

主题

13

回帖

101

积分

注册会员

积分
101
发表于 2025-12-29 09:00:36 | 显示全部楼层
大佬,有没有电容屏转HID设备的参考案例

点评

没听说过,原始需求是什么?  详情 回复 发表于 2025-12-29 09:03
回复

使用道具 举报 送花

已绑定手机

124

主题

5136

回帖

1万

积分

超级版主

无情的代码机器

积分
11478
 楼主| 发表于 2025-12-29 09:03:52 | 显示全部楼层
wzjhu*** 发表于 2025-12-29 09:00
大佬,有没有电容屏转HID设备的参考案例

没听说过,原始需求是什么?
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

已绑定手机

3

主题

13

回帖

101

积分

注册会员

积分
101
发表于 2025-12-29 09:06:58 | 显示全部楼层
就是把电容触摸屏(如GT911)的报点数据转化成HID设备的数据给电脑!类似于电脑副屏的功能

点评

谁的 Win10 跑到了我的【Ai8051U】实验箱上 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 国芯人工智能技术交流网站 - AI32位8051交流社区  详情 回复 发表于 2025-12-29 09:08
回复

使用道具 举报 送花

已绑定手机

124

主题

5136

回帖

1万

积分

超级版主

无情的代码机器

积分
11478
 楼主| 发表于 2025-12-29 09:08:54 | 显示全部楼层
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-10 08:12 , Processed in 0.090992 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表