CDC Bulk transfer is received in many events, USB HS.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

CDC Bulk transfer is received in many events, USB HS.

952 Views
embedded_eng_
Contributor III

Hi,

I'm using lpcxpresso55s16_dev_composite_cdc_msc_bm example with a small modification in "kUSB_DeviceCdcEventRecvResponse" event which prints the received data.

 

        case kUSB_DeviceCdcEventRecvResponse:
        {
            if ((1 == g_deviceComposite_hs->cdcVcomBulk.attach) && (1 == g_deviceComposite_hs->cdcVcomBulk.startTransactions))
            {
                g_deviceComposite_hs->cdcVcomRecvSizeBulk = epCbParam->length;
                if (!g_deviceComposite_hs->cdcVcomRecvSizeBulk)
                {
                    /* Schedule buffer for next receive event */
                    error = USB_DeviceCdcAcmRecv(handle, USB_CDC_VCOM_DIC_BULK_OUT_ENDPOINT, s_currRecvBuf_BULK,
                                                 g_cdcVcomDicEndpoints_BULK[0].maxPacketSize);
                }

                usb_echo("%d NEW Bytes:\r\n", g_deviceComposite_hs->cdcVcomRecvSizeBulk);
                for(int i = 0 ; i < g_deviceComposite_hs->cdcVcomRecvSizeBulk ; i ++ ) {
                	usb_echo("%X ", s_currRecvBuf_BULK[i]);
                	if(i % 16 == 0 && i != 0) usb_echo("\r\n");
                	if(i % 8 == 0 && i != 0) usb_echo("   ");
                }
                usb_echo("\r\n");

                error = USB_DeviceCdcAcmSend(g_deviceComposite_hs->cdcVcomBulk.cdcAcmHandle, USB_CDC_VCOM_DIC_BULK_IN_ENDPOINT, "", 0);
                g_deviceComposite_hs->cdcVcomRecvSizeBulk = 0;
                g_deviceComposite_hs->cdcVcomSendSizeBulk    = 0;
            }
        }
        break;

 

 

I'm sending a 512B packet using a C code to the relevant CDC port.

When I send the data, The data which is been sent is:

 

65 E4 9F 40 A2 37 4F B6 D2    D0 AE 99 AC E2 A4 22 8F 
   99 B4 45 4A 2E A4 D1 99    22 23 E7 E0 D2 6 3D 72 
   92 CE AF 25 EA 7E 59 D7    56 1 A BE 4D 91 13 B0 
   4B 33 62 F1 84 62 30 56    A0 2E 2A FB 7 70 E7 9A 
   C9 64 62 2 15 19 E5 A1    F7 85 53 8B 94 D7 E7 8E 
   B8 7E 6 C 9A 53 90 77    60 FF 9F E8 65 87 BD AD 
   8A 2C 70 A5 12 F9 D5 44    48 7D 47 79 D0 83 63 96 
   F3 D0 67 F0 4F 49 63 4A    5E 6E 10 52 3F 9 C5 CD 
   9E 2C C2 AA 55 9E 31 ED    6D E5 A9 2A 1F 4C 72 D2 
   C8 96 2 3A 8A 4A 14 9B    26 AF 99 78 FB 15 E3 52 
   5F 53 D1 C0 21 59 A2 0    C 6F 5B AE 15 F2 19 DC 
   D3 81 E3 11 ED 68 90 A    18 A1 41 AD 60 B6 1F 5B 
   54 98 93 4 1E 0 8E E2    FC 37 9C E8 C2 99 76 A5 
   8B C2 F7 43 60 7A 39 17    B3 8B 20 31 2 C4 D 86 
   2B 5C AC 4A 1F 4E B3 7    7B 63 5F 81 AD A5 B3 EF 
   82 6 60 46 A 24 7B 7F    75 F5 72 D4 B0 47 55 6 
   F9 5F C9 9E D2 D7 BF 6F    39 9F C 37 11 35 12 4A 
   2C C6 8B 5A A8 A9 A5 CE    BB EB E9 66 81 57 66 E2 
   5C F 85 D9 DE 59 1C E    DF 15 E7 8 30 5D CA A7 
   33 7E 69 D4 39 67 18 D7    55 B3 E3 1E 9A 11 B9 1F 
   5E FE 98 34 FB F3 30 7F    DD D9 29 DC 8C 16 50 1A 
   2B 48 0 5D 62 6E 10 E4    C5 1D 59 5D B4 6C 1A 25 
   32 5F 5F 9B 1B 8F D4 CE    94 9C E6 76 3D FC A6 45 
   2A DD 2F F2 8E 20 D0 69    66 1B 5E 9D F9 26 6C BC 
   41 12 CB 10 2F F3 6 24    7A 2D 6D F2 8D 9B BD 6C 
   A5 6A A5 9A 68 B1 BE 7A    E6 B9 12 AA 43 51 D6 20 
   1C C3 A B 33 4C 9A E4    94 6 2 7E 79 F4 6C 2B 
   E4 26 65 71 B4 B9 1D 8A    AA DF 77 9A AE FD 5 5F 
   9D 6E 18 D9 A0 ED D1 68    80 1D FE BC 11 89 21 30 
   D9 AB E2 83 6A D4 59 12    43 13 8 2F 57 37 35 CF 
   47 B3 7D 54 A1 A9 6D A8    CE A9 C2 64 8E 4B C9 F 
   E4 D6 F8 13 54 25 89 83    6F E7 CF B4 6F 87 BB 

 

 

 

The problem is that the data isn't received in one event, it is received in many events:

 

 

 

43 NEW Bytes:
65 E4 9F 40 A2 37 4F B6 D2    D0 AE 99 AC E2 A4 22 8F
   99 B4 45 4A 2E A4 D1 99    22 23 E7 E0 D2 6 3D 72
   92 CE AF 25 EA 7E 59 D7    56 1
2 NEW Bytes:
D A
82 NEW Bytes:
BE 4D 91 13 B0 4B 33 62 F1    84 62 30 56 A0 2E 2A FB
   7 70 E7 9A C9 64 62 2    15 19 E5 A1 F7 85 53 8B
   94 D7 E7 8E B8 7E 6 C    9A 53 90 77 60 FF 9F E8
   65 87 BD AD 8A 2C 70 A5    12 F9 D5 44 48 7D 47 79
   D0 83 63 96 F3 D0 67 F0    4F 49 63 4A 5E 6E 10 52
   3F
1 NEW Bytes:
9
57 NEW Bytes:
C5 CD 9E 2C C2 AA 55 9E 31    ED 6D E5 A9 2A 1F 4C 72
   D2 C8 96 2 3A 8A 4A 14    9B 26 AF 99 78 FB 15 E3
   52 5F 53 D1 C0 21 59 A2    0 C 6F 5B AE 15 F2 19
   DC D3 81 E3 11 ED 68 90
2 NEW Bytes:
D A
60 NEW Bytes:
18 A1 41 AD 60 B6 1F 5B 54    98 93 4 1E 0 8E E2 FC
   37 9C E8 C2 99 76 A5 8B    C2 F7 43 60 7A 39 17 B3
   8B 20 31 2 C4 D 86 2B    5C AC 4A 1F 4E B3 7 7B
   63 5F 81 AD A5 B3 EF 82    6 60 46
2 NEW Bytes:
D A
173 NEW Bytes:
24 7B 7F 75 F5 72 D4 B0 47    55 6 F9 5F C9 9E D2 D7
   BF 6F 39 9F C 37 11 35    12 4A 2C C6 8B 5A A8 A9
   A5 CE BB EB E9 66 81 57    66 E2 5C F 85 D9 DE 59
   1C E DF 15 E7 8 30 5D    CA A7 33 7E 69 D4 39 67
   18 D7 55 B3 E3 1E 9A 11    B9 1F 5E FE 98 34 FB F3
   30 7F DD D9 29 DC 8C 16    50 1A 2B 48 0 5D 62 6E
   10 E4 C5 1D 59 5D B4 6C    1A 25 32 5F 5F 9B 1B 8F
   D4 CE 94 9C E6 76 3D FC    A6 45 2A DD 2F F2 8E 20
   D0 69 66 1B 5E 9D F9 26    6C BC 41 12 CB 10 2F F3
   6 24 7A 2D 6D F2 8D 9B    BD 6C A5 6A A5 9A 68 B1
   BE 7A E6 B9 12 AA 43 51    D6 20 1C C3
2 NEW Bytes:
D A
92 NEW Bytes:
B 33 4C 9A E4 94 6 2 7E    79 F4 6C 2B E4 26 65 71
   B4 B9 1D 8A AA DF 77 9A    AE FD 5 5F 9D 6E 18 D9
   A0 ED D1 68 80 1D FE BC    11 89 21 30 D9 AB E2 83
   6A D4 59 12 43 13 8 2F    57 37 35 CF 47 B3 7D 54
   A1 A9 6D A8 CE A9 C2 64    8E 4B C9 F E4 D6 F8 13
   54 25 89 83 6F E7 CF B4    6F 87 BB

 

 

 

516B were received.

Somehow, 4B were added.

Each 2 Bytes event includes "D A", but the D was not sent, just the A's, this explains the additional 4B.

My questions are:

* Why one send event is received as many events in the MCU, how can I fix it?

* Why these 4B were added?

* Why "USB_DeviceCdcAcmSend" function is needed in kUSB_DeviceCdcEventRecvResponse event? without it, just the first event is received.

 

Thanks

 

0 Kudos
Reply
2 Replies

926 Views
FelipeGarcia
NXP Employee
NXP Employee

Hi,

I tested this on my side and I was not able to replicate your behavior, I modified same example on my side to print data on serial terminal once each packet is sent. I tested the example sending a 4096 bytes (8 HS USB packets) file through TeraTerm.

Please check my results, maybe you can tested on your side as well.

FelipeGarcia_0-1630535713706.png

Best regards,

Felipe

-------------------------------------------------------------------------------

Note:

- If this post answers your question, please click the "Mark Correct" button. Thank you!

- We are following threads for 7 weeks after the last post, later replies are ignored. Please open a new thread and refer to the closed one, if you have a related question at a later point in time. 

------------------------------------------------------------------------------ 

0 Kudos
Reply

919 Views
embedded_eng_
Contributor III

Hi, the issue was caused by Linux driver, not from MCU's code.

I fixed it with setvbuf function.

 

Thanks!

0 Kudos
Reply