My take on this.
Are there any reasonably priced eval/dev boards for USB chips ?
I assume with "USB chip" you mean a programmable microcontroller with USB peripheral.
Yes, plenty. But if you want to stay focused, start looking from where you are now. And by that I mean; how much and particularly on which embedded platforms are you familiar with? Some suggestions:
- Arduino Leonardo
- Arduino Zero
- Arduino Due
- ST STM32F4Discovery
- ST Nucleo (there are couple of dozens board - some with USB, Ethernet, etc!)
- MicroChip PIC32 USB starter Kit II
Can you recommend any specific chips ?
I personally have used USB on the Microchip devices, and am quite pleased about them. PIC24FJ64GB004 is my personal favorite. It's faster than the average 8-bit microcontroller, has plenty of memory, remappable peripheral I/O, can run USB from internal oscillator, TQFP-44 is reasonably easy to solder (-002 chip in DIP-28 for breadboarding!), and it's USB implementation has 32 endpoints. Not all microcontrollers have 32 endpoints available. It's plenty to support any USB descriptor you want (e.g. create compound USB devices).
However don't be afraid to look at other devices. I'm pleased with that particular chip because I've invested some time into getting familiar with it. It does what I need it to do, especially considering the size/performance/cost/etc.
I'd like to learn more about usb, I've researched a bit and I'm a bit confused - would writing my own usb drivers for my device be too crazy ?
USB is a hard protocol. So a good approach is to first verify the hardware is OK, and then start looking at your own implementations.
"Drivers" is two sided story. The host needs a driver, and the device too. Most USB hosts will support standard device drivers like HID, CDC and Mass Storage. These are "class specific". If you want something custom you need to go "vendor specific" which is a lot more complicated. In that case you need to define your own setup commands, endpoint arrangements, what data gets filled into endpoint buffers, etc.
On the PC you could use libusb to load a "generic" driver and interact with endpoints in "user land". This mitigates the need for a "kernel land" driver. However this may be OK for a developer machine, but not for a customer machine.
On the Microcontroller, I would strongly recommended using a framework. USB is hard because many OS'es will give little to no debug info about why a device failed to enumerate. USB debugging can be done, but either requires expensive USB hardware sniffers or only works when you get past the enumeration stage. Additionally debugging on the device may seize communication (e.g. breakpoint is hit) and terminate the USB session.
That's why I would recommended to use what already works. Don't try to run when you can't walk.
Is there anyone else who done something similar that could share their experience ?
I've done some USB projects myself. As I said take small steps.
1) Design your PCB following the datasheet of the chip you have chosen. I also make sure there is a demo application available for the chip I have chosen.
2) Consider what you want to do on USB.
Do you want to create a mouse/keyboard/joystick (e.g. custom game input peripheral)? Probably a HID class device is necessary.
Do you want to load new firmware and/or settings onto your device? Probably mass storage device.
Do you want have custom needs? IMHO 2 options remain:
a) Simulate a serial port with the CDC-ACM. Then build a classic RS232 protocol on this.
b) Write your completely custom host and client driver. This is not trivial.
3) If you want to sell USB devices, you also need a VID/PID. These are not free, contrary it's out of reach for almost every hobbyists and even some small companies. Alternatively some manufacturers (like Microchip) allow limited use of their VID for customer applications.
Should I ditch my plan entirely and just get some sort of an off-the-shelf solution ?
I don't agree that "FTDI" chips are not professional. They are a different way of doing things. Getting your first USB project to work will take time. It took me a couple of afternoons tinkering around. However if you don't do it - you will miss out on the experience and keep this (mental) barrier.