Sometimes you're forced to use device drivers that upload binary-only firmware blobs to the actual hardware when they boot up (they all suck for various reasons: If there's a bug in it, you can't tackle it; you also got to trust the company to be one of the good guys™ - but hey, who'd suspect companies of being dicks towards their customers these days - Right? Right.). But sometimes, you're forced into using them anyway (unless you got intact principles, I guess…).

Like this one time, at band camp, when I was trying to use Texas Instrument's MSP-FET430UIF. That's an USB connected flash emulation tool (read: a JTAG-thingy) for the MSP430 micro-controller series. Plugging it into my Debian laptop yielded this:

usb 4-1: new full-speed USB device number 2 using uhci_hcd
usb 4-1: New USB device found, idVendor=0451, idProduct=f430
usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 4-1: Product: MSP-FET430UIF JTAG Tool
usb 4-1: Manufacturer: Texas Instruments
usb 4-1: SerialNumber: TUSB3410334C17506C42FFD2
ti_usb_3410_5052 4-1:1.0: TI USB 3410 1 port adapter converter detected
usb 4-1: firmware: agent aborted loading ti_usb-v0451-pf430.fw (not found?)
usb 4-1: firmware: agent aborted loading ti_3410.fw (not found?)
ti_usb_3410_5052: probe of 4-1:1.0 failed with error -5

So the system sees the thing just fine, but it can't locate the blob to upload into the device to ultimately make it work. Now you got three choices: a) Go and cry for a while and pretend this never happened. b) Build yourself a GoodFET; or c) Bite the bullet and find the god-forsaken blob. Solution "a" is not viable, since we're engineers. So that don't fly. Solution "b" is actually quite appealing, but takes time that we might not have. Let's face it, chances are, we'll want to use the blob solution behind door "c".

The device that requires the driver is actually not the FET itself but the TUSB3410 chip (that's a device that turns a USB link into a serial port as far as the operating system and its applications are concerned; which is nice with a great many applications, since a serial link is so much easier to handle than a raw USB connection) that's built into it. And its firmware blob is missing.

I couldn't find a package for debian wheezy containing the blob (yeah, I got non-free in my sources.list, but I'm weary of putting third-party sources in there). My google-fu didn't turn up much useful, which is why we're here in this public service announcement… If you're looking for firmware blobs to use with linux device drivers, here's the git repository that'll help you:

% git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

There's a ‘ti_3410.fw’ file in there, that'll work with the device driver. You'll have to copy it somewhere the kernel will look for firmware blobs (on my debian system that's “/lib/firmware”). Hope that helps you.

Finally, if you're looking for a USB⇔Serial converter for an upcoming project, there are devices available that don't require blobs in the system (one such chip would be the FT232R, the price of which is in the same ballpark as the TI device).

Posted Thu 27 Feb 2014 21:55:15 CET Tags: