This is the mail archive of the
ecos-devel@sourceware.org
mailing list for the eCos project.
Re: STM32 USB support
- From: Chris Holgate <chris at zynaptic dot com>
- To: Simon Kallweit <simon dot kallweit at intefo dot ch>
- Cc: Andrew Lunn <andrew at lunn dot ch>, ecos-devel at sourceware dot org
- Date: Tue, 19 May 2009 17:28:02 +0100
- Subject: Re: STM32 USB support
- References: <4A11CAAA.8040900@intefo.ch> <4A11D861.8090206@zynaptic.com> <4A11E5DF.2000403@intefo.ch> <4A129C34.9090606@zynaptic.com> <20090519120004.GI20046@lunn.ch> <4A12CD5F.20901@intefo.ch>
Simon Kallweit wrote:
> Chris, do you have any example code using your driver?
There's the high-level driver for my application, but that's quite
involved and will probably obscure more than it illuminates...
> I may be working on USB serial and ethernet support.
Ethernet for the STM32? I'd considered having a stab at a driver for
one of the SPI based Ethernet chips (either the Micrel or Microchip) but
just don't have the time right now.
> The USB serial driver at least seems to be tailored
> for the AT91 driver right now and cannot be used generically yet. We
> could change that to use dynamic setup of endpoints, which I think would
> be a great idea.
I've just had a look at the code and it shouldn't be too hard. The key
change is that in order to obtain a handle on the endpoint data
structures you need to wait for endpoint configuration to complete
(which the serial driver does anyway):
//
--------------------------------------------------------------------------
// Block the calling thread until the USB is configured.
void
usbs_serial_wait_until_configured(void)
{
cyg_mutex_lock(&usbs_serial_lock);
while (usbs_serial_state != USBS_STATE_CONFIGURED)
cyg_cond_wait(&usbs_serial_state_cond);
cyg_mutex_unlock(&usbs_serial_lock);
}
Then you can get a handle on the endpoint data structures by calling one
of the following functions (see the STM32 USB header).
cyg_usbs_cortexm_stm32_tx_endpoint (...)
cyg_usbs_cortexm_stm32_rx_endpoint (...)
This replaces the static way of doing it, where the following lines from
the USB serial driver specify the statically allocated endpoint data
structures:
extern usbs_tx_endpoint CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP;
extern usbs_rx_endpoint CYGDAT_IO_USB_SLAVE_SERIAL_RX_EP;
And these are hooked directly into the following static data structure:
usbs_serial usbs_ser0 = {
tx_ep: TX_EP,
rx_ep: RX_EP,
tx_result: 0,
rx_result: 0,
};
Everything else looks fine. The STM32 driver should automatically parse
the device descriptors so that it looks like the 'standard' serial
device. If you don't have any luck with it I might have time to play
with it at the weekend.
Chris.