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
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.
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.
------------------------------------------------------------------------------
Hi, the issue was caused by Linux driver, not from MCU's code.
I fixed it with setvbuf function.
Thanks!