Re: Selection of a USB microcontroller



I am in the process of selecting a general purpose microcontroller for
several new developments.
There are several uCs with USB, but how to select the best one?
I guess some of you already have some hands-on experiences.

....

Any recommendations are highly appreciated.

While I'm no expert in USB stuff, I have made my fair share of mistakes. My
next USB outing will certainly capitalize on what I learned from my
mistakes. Here's what I found out:

The host side driver will be your biggest headache, by far. You'll need to
consider it carefully. It's usually best to choose a built-in device class
supplied by your host computer so you don't have to write, test, and pay for
compliance testing. My efforts have only supported Windows computers but
I'll bet a whole bunch of problems will surface if you choose others (like
Mac or Linux).

The downsides to my suggestion are:

1. Supporting a class driver might mean extra programming on the device side
to support the entire class whether you need the full functionality or not.

2. You might have trouble getting a good fit for you needs vs. what the
class driver will support.

3. Specifically, if you choose the COM port emulation (usbser.sys), you'll
be dogged with always wondering what the COM port is when you plug it in. I
hate that problem. Love to know if there's a solution.

The upsides is you could get lucky or even pin your decision to use a
specific chip if the chip maker will give you device code to do what you
need (for example, Cypress PSOC and USB-UART). Lots of examples and good
vendor support are key unless you're the adventurous type. Be wary of
vendors that will supply the drivers. They're not always high quality.

Alternative to built-in device classes, you can go the opposite route and
design your endpoint interfaces to suit your needs. It's much simpler from
the device side but you'll need a driver. I've had my eye on the generic
Thesycon driver. Not sure if you need to WHQL test it or not. Certainly,
if you write your own driver, it takes a good bit of programming ability,
tool investment, and testing requirements.

I'd like to hear other's opinion on the matter. It's all tradeoff (as
usual) and how one implements is probably driven by one's talents and
resources (as usual, too).

JJs


.



Relevant Pages

  • Re: isa0060/serio0 problems -WAS- Re: Asus MB and 2.6.12 Problems
    ... Use a HIGHMEM enabled kernel. ... Linux Plug and Play Support v0.97 Adam Belay ... Non-volatile memory driver v1.2 ... ehci_hcd 0000:00:13.2: new USB bus registered, ...
    (Linux-Kernel)
  • 2.6.15: usb storage device not detected
    ... dmesg and lspci -vv output for the usb bits attached. ... # ACPI Support ... # Generic Driver Options ...
    (Linux-Kernel)
  • Re: Linux 2.6.13-rc4
    ... > ugly that I won't even show it (the kernel list would eat it as too big ... RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize ... ehci_hcd 0000:00:02.2: new USB bus registered, ... # ACPI Support ...
    (Linux-Kernel)
  • RE: PATCH: Further aacraid work
    ... currently unanswered email "error recovery and command completion" on ... > Enabling unmasked SIMD FPU exception support... ... > usbcore: registered new driver usbfs ... > USB Universal Host Controller Interface driver v2.2 ...
    (Linux-Kernel)
  • Re: PATCH: Further aacraid work
    ... > Enabling unmasked SIMD FPU exception support... ... > ESR value after enabling vector: ... > usbcore: registered new driver usbfs ... > USB Universal Host Controller Interface driver v2.2 ...
    (Linux-Kernel)