Estoy usando un código personalizado de CDC ejemplo del paquete 177x_8x_PDL_110602 (no estoy usando LPCOpen). Estoy teniendo problemas con la función CDC_Send. Ese es el escenario: una secuencia de comandos de python envía mensajes al USB serie de LPC1788, se envían periódicamente (200 ms, 300 ms). El mensaje es: "ping \ x00", sin comillas. Cuando el LPC recibió el mensaje de ping, envía a la PC este mensaje: "resp 0 \ x00". Después de cualquier intercambio de mensajes (perfectamente), el LPC comienza a enviar un mensaje incorrecto, como este: "r 0 \ x00", "sp 0 \ x00", "esp 0 \ x00", "r \ x00", "\ x00 ", ...
Bellow es el código que envía el mensaje:
void CDC_Send(const uint8_t *data, uint32_t data_size)
{
// block until all bytes be sent
while (ringbuff_size(g_tx_buffer) > 0);
// puts the data into ring buffer
ringbuff_write(g_tx_buffer, data, data_size);
// forces the first send
CDC_BulkIn();
}
void CDC_BulkIn(void)
{
uint8_t buffer[USB_CDC_BUFSIZE];
uint32_t bytes_to_write;
if (!g_cdc_initialized) return;
memset(buffer, 0, USB_CDC_BUFSIZE);
bytes_to_write = ringbuff_read(g_tx_buffer, buffer, USB_CDC_BUFSIZE);
if (bytes_to_write > 0)
{
USB_WriteEP(CDC_DEP_IN, buffer, bytes_to_write);
}
}
El SetMode (comando 0xF3) usa el valor de restablecimiento (cero), por lo que no ocurren interrupciones por NAK. Después de mucho tiempo de depuración, intenté poner un retraso después de la función USB_WriteEP, el valor del retraso es 100us. De esta forma los mensajes de intercambio no fallan. Por lo tanto, me gustaría arreglar esto (eliminar el retraso). ¿Alguna idea?
Gracias