<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LPCXpresso IDEのトピックRe: USB VCOM data transmission problem..</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534030#M3889</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Tsuneo on Thu Jul 12 18:57:45 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Using endpoint interrupt callback (CDC_BulkIn()), your firmware can send longer file than 64 bytes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The send_file process starts in your firmware, as follows. It just sets up flags, and kick the EP interrupt manually.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;volatile uint8_t cdc_send_file = FALSE;
volatile uint8_t cdc_send_ZLP&amp;nbsp; = FALSE;

...
else if(serBuf[0]=='s'){//when press a button (each time) in c# command 's'sent to&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //serial buff
&amp;nbsp; if ( ! cdc_send_file ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; // open the target file, here
&amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP&amp;nbsp; = FALSE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start send_file process
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = TRUE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_USB-&amp;gt;EpIntSet = (1 &amp;lt;&amp;lt; EPAdr(CDC_DEP_IN));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // kick EP interrupt manually
&amp;nbsp; }&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The body of the send_file process is implemented in the EP interrupt callback&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;cdcuser.c

#define CDC_BULK_MAX_PACKET_SIZE&amp;nbsp; 64
extern volatile uint8_t cdc_send_file;
extern volatile uint8_t cdc_send_ZLP;

void CDC_BulkIn(void) {
&amp;nbsp; uint32_t br;

&amp;nbsp; if ( cdc_send_file ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send_file process is going on
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( f_eof( &amp;amp;File ) ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if entire file has been sent out,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( cdc_send_ZLP ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if the last transaction is full-size,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_WriteEP( CDC_DEP_IN, NULL, 0 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send ZLP to terminate the transfer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f_close( &amp;amp;File );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // finish file send session
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send a transaction from the file
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f_read( &amp;amp;File, serBuf, CDC_BULK_MAX_PACKET_SIZE, &amp;amp;br );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_WriteEP( CDC_DEP_IN, serBuf, br );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP = ( br == CDC_BULK_MAX_PACKET_SIZE ); // is full-size transaction?
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
} &lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lastly, the context (variables) is initialized in Set_Configuration callback.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;usbuser.c

/*
 *&amp;nbsp; USB Set Configuration Event Callback
 *&amp;nbsp;&amp;nbsp; Called automatically on USB Set Configuration Request
 */

#if USB_CONFIGURE_EVENT

extern volatile uint8_t cdc_send_file;
extern volatile uint8_t cdc_send_ZLP;

void USB_Configure_Event (void) {

&amp;nbsp; if (USB_Configuration) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check if USB is configured */
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add your code here */

&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = FALSE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initialize context
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP&amp;nbsp; = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; }
}
#endif
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Tsuneo&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 01:37:43 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T01:37:43Z</dc:date>
    <item>
      <title>USB VCOM data transmission problem..</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534029#M3888</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ranaya on Thu Jul 12 01:01:14 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;hi all......&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Im using lpc1769 xpresso board to communicate with pc c# host application using usb cdc class. At the pc side the port is enumerated as com 11 a virtual port.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Here Im reading 64 byte data blocks from an SD card and send them to the host via usb connection. Communication is almost successful. But i need to synchronize the data coming from the MCU. I use serial port event handler in c# to acquire the data from the inbuffer. Text file in the sd card has the data sequence like :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;0.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;49.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;at each time i press a button in c# form these values will be displayed. when the serial port event triggers ( i think after reading 64 bytes)the result in the console is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.00...&amp;nbsp; //this sequence is correct&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...9.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;10.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //11.00, 12.00 and 13.00 missing &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;14.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;15.00&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and like this :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;37.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;38.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;42.00&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;43.00&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;after each reading I noticed there's a gap of 4 integers, 10 - 14 and 38 - 42 ! I think the problem occurs inside the mcu. Here my codes -&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;}

else if(serBuf[0]=='s'){//when press a button (each time) in c# command 's'sent to&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //serial buff

&amp;nbsp; if(f_eof(&amp;amp;File)== 0){
&amp;nbsp;&amp;nbsp; res = f_read(&amp;amp;File, serBuf, strlen(serBuf), &amp;amp;br);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_WriteEP(CDC_DEP_IN,(unsigned char *)&amp;amp;serBuf[0],61);
&amp;nbsp;&amp;nbsp;&amp;nbsp; delayMs(0,1);

&amp;nbsp; }else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res = f_close(&amp;amp;File);&amp;nbsp;&amp;nbsp; //reach file end
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIO_SetValue(0,1&amp;lt;&amp;lt;22);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 1000000; j &amp;gt; 0; j--);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIO_ClearValue(0,1&amp;lt;&amp;lt;22);
&amp;nbsp; }

}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_WriteEP code :&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
uint32_t USB_WriteEP (uint32_t EPNum, uint8_t *pData, uint32_t cnt) {
&amp;nbsp; uint32_t n;
&amp;nbsp; LPC_USB-&amp;gt;Ctrl = ((EPNum &amp;amp; 0x0F) &amp;lt;&amp;lt; 2) | CTRL_WR_EN;
&amp;nbsp; LPC_USB-&amp;gt;TxPLen = cnt;
&amp;nbsp; for (n = 0; n &amp;lt; (cnt + 3) / 4; n++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_USB-&amp;gt;TxData = *((__attribute__((packed)) uint32_t *)pData);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pData += 4;
&amp;nbsp; }
&amp;nbsp; LPC_USB-&amp;gt;Ctrl = 0;
&amp;nbsp; WrCmdEP(EPNum, CMD_VALID_BUF);
&amp;nbsp; return (cnt);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Serial port settings:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;CDC_LINE_CODING CDC_LineCoding&amp;nbsp; = {115200, 1, 0, 8};
//baud, number of stop bit, parity, data bits
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;c# serial port settings :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;[IMG]&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fdl.dropbox.com%2Fu%2F16049803%2Funtitledgg3.JPG%5B%2FIMG%5D" rel="nofollow noopener noreferrer" target="_blank"&gt;https://dl.dropbox.com/u/16049803/untitledgg3.JPG[/IMG]&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Helps and ideas woud be appreciated &lt;SPAN class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;&lt;LI-EMOJI id="lia_slightly-smiling-face" title=":slightly_smiling_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:37:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534029#M3888</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:37:43Z</dc:date>
    </item>
    <item>
      <title>Re: USB VCOM data transmission problem..</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534030#M3889</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Tsuneo on Thu Jul 12 18:57:45 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Using endpoint interrupt callback (CDC_BulkIn()), your firmware can send longer file than 64 bytes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The send_file process starts in your firmware, as follows. It just sets up flags, and kick the EP interrupt manually.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;volatile uint8_t cdc_send_file = FALSE;
volatile uint8_t cdc_send_ZLP&amp;nbsp; = FALSE;

...
else if(serBuf[0]=='s'){//when press a button (each time) in c# command 's'sent to&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //serial buff
&amp;nbsp; if ( ! cdc_send_file ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; // open the target file, here
&amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP&amp;nbsp; = FALSE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start send_file process
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = TRUE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_USB-&amp;gt;EpIntSet = (1 &amp;lt;&amp;lt; EPAdr(CDC_DEP_IN));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // kick EP interrupt manually
&amp;nbsp; }&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The body of the send_file process is implemented in the EP interrupt callback&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;cdcuser.c

#define CDC_BULK_MAX_PACKET_SIZE&amp;nbsp; 64
extern volatile uint8_t cdc_send_file;
extern volatile uint8_t cdc_send_ZLP;

void CDC_BulkIn(void) {
&amp;nbsp; uint32_t br;

&amp;nbsp; if ( cdc_send_file ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send_file process is going on
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( f_eof( &amp;amp;File ) ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if entire file has been sent out,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( cdc_send_ZLP ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if the last transaction is full-size,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_WriteEP( CDC_DEP_IN, NULL, 0 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send ZLP to terminate the transfer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f_close( &amp;amp;File );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // finish file send session
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send a transaction from the file
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f_read( &amp;amp;File, serBuf, CDC_BULK_MAX_PACKET_SIZE, &amp;amp;br );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_WriteEP( CDC_DEP_IN, serBuf, br );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP = ( br == CDC_BULK_MAX_PACKET_SIZE ); // is full-size transaction?
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
} &lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lastly, the context (variables) is initialized in Set_Configuration callback.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;usbuser.c

/*
 *&amp;nbsp; USB Set Configuration Event Callback
 *&amp;nbsp;&amp;nbsp; Called automatically on USB Set Configuration Request
 */

#if USB_CONFIGURE_EVENT

extern volatile uint8_t cdc_send_file;
extern volatile uint8_t cdc_send_ZLP;

void USB_Configure_Event (void) {

&amp;nbsp; if (USB_Configuration) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check if USB is configured */
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add your code here */

&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_file = FALSE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initialize context
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdc_send_ZLP&amp;nbsp; = FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; }
}
#endif
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Tsuneo&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:37:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534030#M3889</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:37:43Z</dc:date>
    </item>
    <item>
      <title>Re: USB VCOM data transmission problem..</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534031#M3890</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ranaya on Sat Jul 14 07:42:42 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi... thanx for well explained response :)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It was another problem that I coudnt send more than 64 bytes. Thanx alot&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:37:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-VCOM-data-transmission-problem/m-p/534031#M3890</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:37:44Z</dc:date>
    </item>
  </channel>
</rss>

