High Sierra Driver Bug Workaround January 25, 2018

Overview

We have some news, both bad and good, about High Sierra. After spending a couple of days testing with various driver combinations, we've discovered that there is a bug in Apple's built-in FTDI driver (which is used by Insteon PowerLincs and RFXCOM's RFXrec/trx433, at this time we don't know of any Z-Wave interfaces that are effected) when used on some unknown subset of Macs (we suspect older ones, but that's just anecdotal) and another around the order of driver loading.

UPDATE 1: Apple has acknowledged the bugs as reported by us and other developers. Beyond this, however, we don't expect any further feedback as is their standard policy. The bugs appear to be present through the 10.13.6 release.

UPDATE 2: It appears that the bugs persist in macOS Mojave (10.14) as well for a subset of users.

If you want the gory details jump down to that section of the post. The good news is that FTDI's latest driver (2.4.2) seems to work. The not so great news is that you have to disable Apple's driver to get your Mac into a state in which it will always work without any manual intervention (like unplugging/replugging after a reboot) and this unfortunately can't be done easily. The other not so great news is that this (specifically, steps #6 and #7 below) will get undone every time you get an OS update from Apple, at least until they fix the problem.

Workaround Steps

If you are experiencing the issue, follow these steps and let us know what you find (this assumes you're running High Sierra already):

  1. Remove any previous versions of the FTDI driver that you may have laying around (there can be conflicts). Those may be located in two different places:

    /System/Library/Extensions/FTDIUSBSerialDriver.kext
    /System/Library/Extensions/D2XXHelper.kext   (may not exist)
    /Library/Extensions/FTDIUSBSerialDriver.kext
    /Library/Extensions/D2XXHelper.kext   (may not exist)
    
  2. Download the latest FTDI driver (2.4.2 as of this writing) and run the installer. High Sierra has new protection for drivers, so you're likely going to get prompted to open the Security System Preference and explicitly allow the driver to be installed: you must respond to this dialog prompt within 30 minutes or it'll disappear (though I think you can go to that preference later and approve).

  3. Write down the name of your boot drive exactly (this is really important to get right). For instance, the name of my boot drive is "Boot Drive" (yeah, very clever I know).

  4. Restart your Mac in recovery mode by:

    1. Restarting your Mac, and
    2. As soon as you hear the boot chimes, hold down COMMAND-R until you see the progress bar.
  5. Once booted into recovery mode, open a terminal window by selecting the Utilities->Terminal menu item

  6. Here it gets a bit tricky so be very careful. First, you want to change to the boot drive - this is where you use the name you wrote down in #2 above. Type the following (including quotes) into the terminal window, substituting Boot Drive with the name of your drive:

    cd "/Volumes/Boot Drive/"
    
  7. Next, we want to move Apple's driver to a different location so it won't load. Type in the following command exactly (that's a period at the end of the line with a space between the file name and the period - it moves the driver to the top level of your boot drive):

    mv System/Library/Extensions/AppleUSBFTDI.kext .
    

    If you've already had to do this once, then you may need to remove the previous version of that extension (you'll get an error trying the above command). Do this:

    rm -r AppleUSBFTDI.kext
    

    then try the command above again.

  8. Restart your Mac by selecting the Apple->Restart menu item

Hopefully, after following these steps, your PowerLinc will connect without issue automatically after a reboot or after an unplug/replug (basically working right). We've started a separate forum topic for this workaround, so please use that forum thread for questions and comments (definitely let us know if it works for you).

NOTE: one user wrote to us to let us know that if you have a separate bootable drive you can just boot the separate drive then perform steps 6 & 7 (basically, just delete Apple's FTDI driver on normal boot drive) - no need to boot into recovery mode.

Gory Details

We had a user report having success installing the latest FTDI driver (thanks @brlandy for getting us on the right track). I tried it as well and had mixed results (see my attempt log below), but it also gave me some more ideas of things to check on. One big one turned out to be that there are potentially 2 places where older FTDI drivers may have been installed, especially if you've been upgrading your system for many years (see the locations on step 1 above).

So, I removed all traces of former FTDI drivers and started with a clean system. I have several Macs, but the only one exhibiting the issue is an older MacBook Pro (13-inch, Mid 2010, MacBookPro7,1). But fortunately I could always get it to fail on this Mac. Here are the results at each step. Note that I tested with both a PowerLinc 2413U and an older (black) Insteon Adaptor (which seems to be a bit more robust in terms of USB communication, read on for details).

Initial condition


  • 10.13.3 (I had just updated to the new .3 release, but I suspect these steps will also work on .2)
  • Only Apple driver (/System/Library/Extensions/AppleUSBFTDI.kext), which is installed by default
  • Ensure that FTDIUSBSerialDriver.kext is not present in /System/Library/Extensions (delete if it's there and reboot)
  • Ensure that FTDIUSBSerialDriver.kext is not present in /Library/Extensions (delete if it's there and reboot)

Results with the Insteon USB Adaptor

  1. Immediately after boot with Adaptor plugged in, Indigo connects to it with some "unknown command bytes received", which continues to repeat every 25-26 seconds, but otherwise it seems to work:

    2018-01-25 11:32:59.039 Application Connected to PowerLinc 2448A7H interface on port usbserial-A700eTEj
    2018-01-25 11:32:59.040 Application PowerLinc address 0C.57.13, firmware version 3.5
    2018-01-25 11:32:59.040 Error   unknown command bytes received 8B 15 (ignoring)
    2018-01-25 11:33:00.622 Error   unknown command bytes received 65 15 (ignoring)
    2018-01-25 11:33:02.207 Error   unknown command bytes received 6F 15 (ignoring)
    2018-01-25 11:33:03.789 Error   unknown command bytes received E4 15 (ignoring)
    [SNIP]
    2018-01-25 11:33:29.127 Error   unknown command bytes received B9 15 (ignoring)
    2018-01-25 11:33:54.465 Error   unknown command bytes received F8 15 (ignoring)
    2018-01-25 11:34:19.802 Error   unknown command bytes received 2F 15 (ignoring)
    2018-01-25 11:34:45.132 Error   unknown command bytes received 00 15 (ignoring)
    2018-01-25 11:35:10.468 Error   unknown command bytes received 00 15 (ignoring)
    2018-01-25 11:35:35.806 Error   unknown command bytes received 00 15 (ignoring)
    
  2. Unplug/replug doesn't seem to make any difference in behavior.

Results with PowerLinc

  1. Immediately after boot with PowerLinc plugged in, Indigo fails after lots of "unknown command bytes received", flushes, and command resends:

    2018-01-25 12:01:43.764 PowerLinc   Unexpected command 02 73 (flushing)
    2018-01-25 12:01:45.285 Error   resending previous command (failure response)
    2018-01-25 12:01:45.636 Error   unknown command bytes received 6E 69 (ignoring)
    2018-01-25 12:01:46.788 Error   resending previous command (busy or unexpected command)
    2018-01-25 12:01:47.156 Error   resending previous command (failure response)
    2018-01-25 12:01:47.507 Error   unknown command bytes received 9E 38 (ignoring)
    2018-01-25 12:01:48.660 Error   resending previous command (busy or unexpected command)
    2018-01-25 12:01:49.027 Error   resending previous command (failure response)
    2018-01-25 12:01:49.379 Error   unknown command bytes received 00 00 (ignoring)
    2018-01-25 12:01:50.530 Error   resending previous command (busy or unexpected command)
    2018-01-25 12:01:50.883 Interface Failure   failed to establish connection with serial interface PowerLinc 2413U on port usbserial-A600B2YH
    
  2. Unplug/replug doesn't seem to make any difference in behavior.

Install 2.4.2 version of the FTDI driver from FTDI

This step installs this file:

    /Library/Extensions/FTDIUSBSerialDriver.kext

Results with PowerLinc and Adaptor (both exhibited the same behavior)

  1. Immediately after boot with PowerLinc plugged in, Indigo fails to connect to it immediately with no errors in the log other than the failure to connect. It also happens very quickly.
  2. Unplug/replug and the PowerLinc/Adaptor connects successfully.
  3. Note, no unknown command bytes received messages ever appear.

This step got me pretty close, but it’s where a bunch of you have also reported being: as long as you can unplug/replug after a reboot you’re good. But this isn't exactly a great solution since you may not always be sitting with your Mac when it reboots.

Disable the Apple Driver (see the steps above)


Results

No connectivity problems at all!! Indigo can connect successfully both at boot and after a unplug/replug, so now we’re golden!

Notes

  • As I said above, disabling the Apple driver will be undone every time you update macOS. And because Apple has SIP active in macOS, you can't (re)move any system files which is why you have to do it while booted into recovery mode.
  • I've noticed that periodically macOS will hang on shutdown (or the shutdown part of a restart). When that happens for me, the only recourse is to force a shutdown using the power button. This is a pretty old Mac, so it could just be that but I thought I'd mention it.

Summary

Given the results above, I'm pretty confident that the problem is with Apple's driver, or perhaps some interaction between the driver and the Mac's USB subsystem. Furthermore, there seems to be an additional problem that is preventing the non-Apple FTDI driver from overriding the built-in Apple FTDI driver, which is why one has to now manually delete/move the Apple driver while in Recovery Mode in order to reliably use the non-Apple FTDI driver (which works).

While some of the steps above may not necessarily be required, I wanted to outline the process as fully/completely as I could to cover as many cases as possible. Hopefully it’ll work for you.

Back to article list