WCH沁恒单片机
直播中

麻酱

8年用户 1238经验值
擅长:MEMS/传感技术
私信 关注
[问答]

ch32f103c8t6双缓冲区从缓冲区取出来的数据不对是为什么?

STM32f103c8t6的代码移植到ch32f103c8t6,stm32端点2是正常工作的
ch32尝试了,端点2和端点3读出来的数据不对
ch32先使能了USB_HP_CAN1_TX_IRQ,要不然触发不了USB_HP_CAN1_TX_IRQ

USB 高优先级中断(通道 19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最 大的传输速率
触发中断后进入,EP3_OUT_CALLBACK

g_blaster_rx_req = TRUE
开始缓冲区拷贝数据

到s_recv_buffer这个64字节数组,
拷贝出来的数据前几次是和stm32一样,后面就和stm32拷贝的数据出来的数据不一样了
下面这里是配置描述符,和设置端点的操作
/* USB配置描述符 *//*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */const uint8_t Blaster_ConfigDescriptor[BLASTER_SIZ_CONFIG_DESC] = {    /* Configuration Descriptor */    /* 00 */    0x09,         /* bLength: Configuration Descriptor size */    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */    BLASTER_SIZ_CONFIG_DESC,  /* wTotalLength: Bytes returned */    0x00,    0x01,         /* bNumInterfaces: 1 interface */    0x01,         /* bConfigurationValue: Configuration value */    0x00,         /* iConfiguration: Index of string descriptor describing the configuration*/    0x80,         /* bmAttributes: Bus powered(bit6=0) */    0xE1,         /* MaxPower 450mA(225*2) */    /* Interface Descriptor */    /* 09 */    0x09,         /* bLength: Interface Descriptor size */    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */    0x00,         /* bInterfaceNumber: Number of Interface */    0x00,         /* bAlternateSetting: Alternate setting */    EP_NUM - 1,   /* bNumEndpoints */    0xFF,         /* bInterfaceClass: NA */    0xFF,         /* bInterfaceSubClass : NA */    0xFF,         /* nInterfaceProtocol : NA */    0,            /* iInterface: Index of string descriptor */        /* Endpoint Descriptor */    /* 18 */    0x07,          /* bLength: Endpoint Descriptor size */    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint descriptor */    EP1_IN,        /* bEndpointAddress: Endpoint 1 IN */    0x02,          /* bmAttributes: Bulk endpoint */    ENDP1_TXSIZE,  /* wMaxPacketSize: 64 Bytes max */    0x00,    0x01,          /* bInterval: Polling Interval (1 ms) */    /* 25 */    0x07,          /* bLength: Endpoint Descriptor size */    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint descriptor */    EP3_OUT,       /*bEndpointAddress:端点2输出这里修改为EP3*/     0x02,          /*bmAttributes:批量端点*/    ENDP2_RXSIZE,  /*wMaxPacketSize:最大64字节*/    0x00,    0x01,          /*bInterval:轮询间隔(1毫秒)*/    /* 32 */};ENDP3端点设置操作

端点缓冲区设置,这里我不确定有没有设置正确

ENDP0,ENDP1是正常的能识别驱动
各位大佬帮忙看看到底啥问题啊
  
  
  
  

回帖(2)

王平

2022-5-27 10:32:01
stm32f103c8t6的代码移植到ch32f103c8t6,stm32端点2是正常工作的
ch32尝试了,端点2和端点3读出来的数据不对
ch32先使能了USB_HP_CAN1_TX_IRQ,要不然触发不了USB_HP_CAN1_TX_IRQ

USB 高优先级中断(通道 19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最 大的传输速率
触发中断后进入,EP3_OUT_CALLBACK

g_blaster_rx_req = TRUE
开始缓冲区拷贝数据

到s_recv_buffer这个64字节数组,
拷贝出来的数据前几次是和stm32一样,后面就和stm32拷贝的数据出来的数据不一样了
下面这里是配置描述符,和设置端点的操作
/* USB配置描述符 *//*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */const uint8_t Blaster_ConfigDescriptor[BLASTER_SIZ_CONFIG_DESC] = {    /* Configuration Descriptor */    /* 00 */    0x09,         /* bLength: Configuration Descriptor size */    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */    BLASTER_SIZ_CONFIG_DESC,  /* wTotalLength: Bytes returned */    0x00,    0x01,         /* bNumInterfaces: 1 interface */    0x01,         /* bConfigurationValue: Configuration value */    0x00,         /* iConfiguration: Index of string descriptor describing the configuration*/    0x80,         /* bmAttributes: Bus powered(bit6=0) */    0xE1,         /* MaxPower 450mA(225*2) */    /* Interface Descriptor */    /* 09 */    0x09,         /* bLength: Interface Descriptor size */    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */    0x00,         /* bInterfaceNumber: Number of Interface */    0x00,         /* bAlternateSetting: Alternate setting */    EP_NUM - 1,   /* bNumEndpoints */    0xFF,         /* bInterfaceClass: NA */    0xFF,         /* bInterfaceSubClass : NA */    0xFF,         /* nInterfaceProtocol : NA */    0,            /* iInterface: Index of string descriptor */        /* Endpoint Descriptor */    /* 18 */    0x07,          /* bLength: Endpoint Descriptor size */    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint descriptor */    EP1_IN,        /* bEndpointAddress: Endpoint 1 IN */    0x02,          /* bmAttributes: Bulk endpoint */    ENDP1_TXSIZE,  /* wMaxPacketSize: 64 Bytes max */    0x00,    0x01,          /* bInterval: Polling Interval (1 ms) */    /* 25 */    0x07,          /* bLength: Endpoint Descriptor size */    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint descriptor */    EP3_OUT,       /*bEndpointAddress:端点2输出这里修改为EP3*/     0x02,          /*bmAttributes:批量端点*/    ENDP2_RXSIZE,  /*wMaxPacketSize:最大64字节*/    0x00,    0x01,          /*bInterval:轮询间隔(1毫秒)*/    /* 32 */};ENDP3端点设置操作

端点缓冲区设置,这里我不确定有没有设置正确

ENDP0,ENDP1是正常的能识别驱动
各位大佬帮忙看看到底啥问题啊
  
  
  
  
举报

李兵

2022-5-27 10:32:08
是缓冲区地址吗,还是就是端点地址
举报

更多回帖

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