1

I have a device which supports a USB Virtual COM port. When the device is connected and the serial port is configured to use 115200-8-N-1, I have no problem using minicom, screen, etc. to communicate with my device. However, when I configure the device to use 1.5Mbaud instead, Darwin refuses to operate the interface at 1.5Mbaud. I tested the device on Debian using minicom at 1500000-8-N-1 to confirm that the device is operating correctly.

First, it appears that stty does not allow the user to set the baud rate to 1.5Mbaud.

stty -f /dev/tty.usbmodemXXXX 115200

Succeeds, while

stty -f /dev/tty.usbmodemXXXX 1500000

Fails with stty: tcsetattr: Invalid argument and nothing more. I have seen this question, but I don't seem to be having this issue, and trying all of the answers provided only causes stty to hang without successfully changing the baud rate.

It gets better. When I run minicom, which supposedly initializes the interface to use 1500000-8-N-1 (the configuration in my .minirc.dfl), I have confirmed from the device side that the interface is not running at 1.5Mbaud, but at some baud rate that's much lower instead (haven't confirmed what the exact speed is).

I'm really stuck on this one. The strange behavior seems to suggest a driver problem, and I've heard that Apple's com.apple.driver.usb.cdc.acm driver is still not fully-featured. Might this be the issue? Thanks for your help!

1 Answer 1

1

It is a driver problem. The com.apple.driver.usb.cdc.acm driver actually instantiates an IOSerialBSDClient for the device, as seen in the output from ioreg:

+-o IOUSBHostInterface@1  <class IORegistryEntry:IOService:IOUSBNub:IOUSBInterface, id 0x100007a62, registered, matched, active, busy 0 (208 ms), retain 7>
  +-o AppleUSBACMData  <class IORegistryEntry:IOService:IOSerialStreamSync:IORS232SerialStreamSync:AppleUSBSerial:AppleUSBACMData, id 0x100007a6c, registered, matched, active, busy 0 (1 ms), retain 6>
    +-o IOSerialBSDClient  <class IORegistryEntry:IOService:IOSerialBSDClient, id 0x100007a72, registered, matched, active, busy 0 (0 ms), retain 5>

Which is very limited in the number of baud rates that it supports. Version 11 of the IOSerialFamily, the version on my machine, only supports the baud rates listed in the static struct speedtab iossspeeds[] in the IOSerialBSDClient class source. I tested this by successfully setting the baud rate for the interface to 1843200.

The solution, unfortunately, will probably require me to locate a generic driver that supports the baud rate I require.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .