This is the mail archive of the
ecos-bugs@sourceware.org
mailing list for the eCos project.
[Bug 1001024] STM32 USB driver and proposed USB API change
- From: bugzilla-daemon at bugs dot ecos dot sourceware dot org
- To: ecos-bugs at ecos dot sourceware dot org
- Date: Sun, 17 Oct 2010 16:06:41 +0100
- Subject: [Bug 1001024] STM32 USB driver and proposed USB API change
- Auto-submitted: auto-generated
- References: <bug-1001024-13@http.bugs.ecos.sourceware.org/>
Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001024
--- Comment #24 from Chris Holgate <chris@zynaptic.com> 2010-10-17 16:06:37 BST ---
(In reply to comment #23)
> Chris, thank you for the double buffering fix. I am now able to receive all
> characters sent from minicom, but the application locks up after a few
> characters have been received (not always the same number of chars). The same
> problem occurs with the "usbserial_echo" test in the USB serial function
> package. I definitely have variable length bulk transfers disabled and the
> usbserial_echo test uses a 4096 byte buffer.
I've not been able to replicate that here. Loopback to minicom using the
method you've previously described seems to work fine for me (for a few hundred
characters at least). I couldn't get my Linux machine to correctly recognize
the eCos serial loopback until I ditched my FTDI based USB/serial adapter for
the Redboot connection - but once I reverted to a 'proper' serial port for
Redboot things have been fine. The test code I used is the absolute minimum I
could get away with (see below)...
#include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
#include <cyg/infra/cyg_type.h>
#include <cyg/infra/cyg_ass.h>
#include <cyg/infra/diag.h>
#include <cyg/kernel/kapi.h>
#include <cyg/io/usb/usbs_serial.h>
//-----------------------------------------------------------------------------
// Thread primitives used for eCos application startup.
static cyg_uint8 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]
__attribute__((aligned(8)));
static cyg_thread thread_data;
static cyg_handle_t thread_handle;
//-----------------------------------------------------------------------------
// Main thread entry point.
extern "C" void mainThreadStartup
(void)
{
int rxBytes, txBytes, i;
char rxBuf[256];
// Set up the USB serial interface.
diag_printf("Setting up the USB serial interface.\n");
usbs_serial_start();
while(1) {
rxBytes = usbs_serial_rx(&usbs_ser0, rxBuf, 256);
for (i = 0; i < rxBytes; i++)
diag_printf("%c", rxBuf[i]);
txBytes = usbs_serial_tx(&usbs_ser0, rxBuf, rxBytes);
}
}
//-----------------------------------------------------------------------------
// Startup function called in the context of the eCos idle thread once all the
// system startup is complete.
extern "C" void cyg_user_start
(void)
{
cyg_thread_create(
10, // Arbitrary priority
(cyg_thread_entry_t*) mainThreadStartup, // Thread entry point
0, //
(char*) "app_thread", // Thread name
&stack[0], // Stack
CYGNUM_HAL_STACK_SIZE_TYPICAL, // Stack size
&thread_handle, // Thread handle
&thread_data // Thread data structure
);
cyg_thread_resume(thread_handle);
cyg_scheduler_start();
}
//-----------------------------------------------------------------------------
--
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.