Re: STM32 USB support

Chris Holgate <[email protected]>
Newsgroups gmane.os.ecos.devel
Message-ID <[email protected]>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.