Stable Launchpad OSX USB VCP(Serial Port) Driver Released

This is a guest post from PentiumPC who figured out a way to make the Launchpad’s serial port to work reliably on an OSX platform

——-

I have been using CCS with Parallels(VM) on the Mac for my MSP430 development. Using a virtual machine for my development wasn’t a big deal but was hoping some of my Mac user friends to try out something with the Launchpad that I was working on. After spending a considerable amount of time learning how to program the LaunchPad and getting my code to work, I realised that the USB on the emulator won’t work on Mac.
After doing some research, it seems that a standard CDC device not need any extra drivers to work, but it looks like TI implemented a non standard CDC (Communication Device Class) device with the TUSB3410. The device consist of a Composite device with a CDC device for a Virtual Com Port and a HID for debugging. TI provided a driver for the WinXP but not other platform. A search on the net shows that this has been a long standing problem and there has been no fix from TI yet.

After running a few more tests in WinXP, I realized the Mac driver failed due to the control and data pipes sharing the same interface. Instead, there should be two separate interfaces. A short study on Apple’s CDC driver implementation show that OSX needed  seperate drivers for the Control and Data interface.

When a  LaunchPad is plugged into a Mac,  OSX matches the driver to the device. Once matched, the CDC control driver loads and attaches to the MSP430 -FET device. Since the control and data are implemented as one interface, only a single driver can attach to it. The data driver is not loaded at all. The CDC driver times out trying to talk to the data driver and unloads.

If we can load two drivers for a single  interface, that would solve the problem on a Mac, but to my knowledge that does not seem to be possible.

I picked up open source codes for the control and data driver from Apple’s Darwin site and set out to combine the two. The first task at hand was to make it work and after a quick mash up and a week of debugging I got it to work, still a little buggy but worked. After optimising and removing unused code from the source, I ran some tests on all the Macs at home and in the office, form OSX 10.6 to 10.7.1 the code work pretty well.
The new driver was published in the 43oh Forums for testing. The first few  “not working” responses were disappointing. We later found it was due to a codeless Kext (driver) used for MSPdebug, blocking the CDC driver.  I revised to code to include a driver to block the HID debug driver for MSPdebug and it seemed to work fine. Many thanks to fcobcn for helping me test the driver.

There was another bug that came up during testing – The CDC driver will attach to any CDC device. To avoid this, codes were added to the driver to load only if TI’s VID was found and unload if none are found. The  driver now works well with TI’s device and will co-exist happily with other CDC devices like Arduinos or other USB com ports.
——
Many thanks to PentiumPC for doing up the driver and writing this report up. If you have any problems, you may comment below or ask it in the following forum thread. Drivers are also available in the first post of the thread linked below:

Launchpad CDC/VCP Drivers


Join the best MSP430 blog on the net and stay up-to-date with our latest news, projects and design resources. We will not share your info with anyone.

5 Comments

  1. I wonder if these is issues are relevant to the linux TI USB driver, which is still has issues with the Launchpad?

    Reply
    • I patched mspdebug to use the HID.c driver directly, so wasn’t having trouble with this any longer. It worked nicely on a Linux VM as well, zero problems with the launchpad. This seems a nicer solution however.

      Reply
  2. Thanks

    Reply
  3. Any chance this could be made to work with the lm4f120 Launchpad? I did try duplicating the keys in the info.plist and changing the product ID and vendor ID to match but it didn’t work out of the box. I have also tried modifying the FTDI driver as suggested for some other models; that did give me a serial port but I can’t get any data out of it. I only have access to OS X 10.6 and 10.8 machines so I can’t try a 10.7 machine at the moment. Sadly I don’t have a MSP430 board either but might be able to borrow one for a few weeks if needed.

    Reply
  4. I am undergoing a project to get the MSP430 serial interface working in a cross-platform environment. I intend to get it working reliably on Linux and OSX (Mavericks at least – it turns out the kexts are rather OS dependent in Mac world). I am currently in the process of learning how to create kexts for OSX as I have some experience creating drivers in Windows as well as writing bare-metal drivers for ARM chips, so there is a slight learning curve involved. Thankfully, Apple’s documentation is quite good, so I am not left to fend for myself in this process.

    The caveat to this is that I am not working with a Launchpad – instead I am working with an in-house built board based on the MSP430F5525. To my knowledge, TI uses the TU3410 for all of the MSP430 implementations and so my goal is to create CDC/Serial drivers that should work with any MSP430 device with a change of two simple lines of code for the Hardware ID and Vendor ID. I will provide updates if people want them, as this is both a learning experience as well as a goal to help provide some cross-platform support to the mainly Windows-focused MSP430 serial interface. I am happy that Red Hat has come on board to help the MSPGCC project get a little more comfortable with the UNIX environment, but it still is a bit dodgy on OSX, which I hope will change soon.

    This post gave me a great starting point, as I am sure it will be much easier to use the Launchpad code as a starting point than building everything up from scratch. The board I am working with is connected to an ADC and sends data through the USB interface for data acquisition, hence the serial port. It needs to be high speed (8 channel, 24 bit ADC with ideal sampling rates at 16000 samples/second), and so I need the interface to be through USB as the standard UART at 115200 baud will not provide the data rate I need.

    Wish me luck…

    Reply

Submit a Comment

Your email address will not be published. Required fields are marked *


nine − 9 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>