zqjqq88 发表于 2014-11-21 08:55 
假如你的数据一共2048字节,单包是64字节,那么你要发送128次~就这样一次次发~ ...
首先我为了一次可以发送更多的数据将 usbd_conf.h 中的宏进行了修改如下所示
- #define CDC_DATA_MAX_PACKET_SIZE 64
- #define CDC_CMD_PACKET_SZE 8
- #define CDC_IN_FRAME_INTERVAL 5
- #define APP_RX_DATA_SIZE 4096
之后出现了不能够发送 64 的倍数的数据 ,于是我又将 usbd_cdc_core.c 函数的
- static uint8_t usbd_cdc_DataIn (void *pdev, uint8_t epnum)
- {
- uint16_t USB_Tx_ptr;
- uint16_t USB_Tx_length;
- if (USB_Tx_State == 1)
- {
- if (APP_Rx_length == 0)
- {
- USB_Tx_State = 0;
- }
- else
- {
- if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE){
- USB_Tx_ptr = APP_Rx_ptr_out;
- USB_Tx_length = CDC_DATA_IN_PACKET_SIZE;
-
- APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE;
- APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE;
- }
- else
- {
- USB_Tx_ptr = APP_Rx_ptr_out;
- USB_Tx_length = APP_Rx_length;
-
- APP_Rx_ptr_out += APP_Rx_length;
- APP_Rx_length = 0;
- }
-
- /* Prepare the available data buffer to be sent on IN endpoint */
- DCD_EP_Tx (pdev,
- CDC_IN_EP,
- (uint8_t*)&APP_Rx_Buffer[USB_Tx_ptr],
- USB_Tx_length);
- }
- }
-
- return USBD_OK;
- }
测试的时候发现 当数据个数为64 的倍数的时候APP_Rx_length = 0 ,找了一下 ,没找到在哪里于是做了如下修改
- static uint8_t usbd_cdc_DataIn (void *pdev, uint8_t epnum)
- {
- uint16_t USB_Tx_ptr;
- uint16_t USB_Tx_length;
-
- if (USB_Tx_State == 1) //发送状态为 1
- {
- if (APP_Rx_length == 0) //数据长度为 0 ,当发送64 个字节的时候 APP_Rx_length =0
- {
- USB_Tx_State = 0; //发送状态清 0
-
- USB_Tx_ptr = APP_Rx_ptr_out;
- USB_Tx_length = APP_Rx_length;
-
- APP_Rx_ptr_out += APP_Rx_length;
-
- DCD_EP_Tx (pdev,
- CDC_IN_EP,
- (uint8_t*)&APP_Rx_Buffer[USB_Tx_ptr],
- USB_Tx_length);
- }
- else
- {
-
- if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE)
- {
-
- USB_Tx_ptr = APP_Rx_ptr_out;
- USB_Tx_length = CDC_DATA_IN_PACKET_SIZE; //发送长度等于 64
-
- APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE;
- APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE;
-
- }
- else
- {
- USB_Tx_ptr = APP_Rx_ptr_out;
- USB_Tx_length = APP_Rx_length;
-
- APP_Rx_ptr_out += APP_Rx_length;
- APP_Rx_length = 0;
- }
-
- DCD_EP_Tx (pdev,
- CDC_IN_EP,
- (uint8_t*)&APP_Rx_Buffer[USB_Tx_ptr],
- USB_Tx_length);
- }
- }
-
- return USBD_OK;
- }
结果就不能发送 4096 个数据了 ,希望能帮忙看看问题,谢谢
|