CP2102 device is not listed in /dev on macOS 10.13

Viewed 13622

I have the ESP32 board with Silicon Labs CP2102 controller. When I connect it to my MacBook, I can get the details about this device using the command system_profiler SPUSBDataType, but it is not listed in /dev as a virtual serial port - so I can't communicate with it.

    CP2102 USB to UART Bridge Controller:

      Product ID: 0xea60
      Vendor ID: 0x10c4  (Silicon Laboratories, Inc.)
      Version: 1.00
      Serial Number: 0001
      Speed: Up to 12 Mb/sec
      Manufacturer: Silicon Labs
      Location ID: 0x14200000 / 5
      Current Available (mA): 500
      Current Required (mA): 100
      Extra Operating Current (mA): 0

I'm using the official driver downloaded from https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers.

Any ideas how to make it visible in /dev? I have also Windows installed on the same computer where it works fine, so the HW and the USB cable are OK.

5 Answers

I found that macOS High Sierra has blocked the SiLabs kernel extension.

Here are steps to allow this extension:

  1. Go to "System Preferences" -> "Security & Privacy"
  2. In the bottom of the window, you will see a message "System software from developer "SiLabs" was blocked from loading."
  3. Click on "Allow" button
  4. Restart your Mac

Now my device is listed as /dev/cu.SLAB_USBtoUART and everything work as expected.

The Allow button did not work for me, so I had to disable checking altogether:

  1. Shut Down
  2. Hold mac+ R during boot to enter recovery mode
  3. Open a terminal
  4. type spctl kext-consent disable and press enter
  5. Reboot
  6. It worked

If you approved through Security settings but still can't see /dev/cu.SLAB_USBtoUART, most likely that you need a new micro-usb cable. It's not that your cable is broken, but some cables are only meant for power so they can't transfer data.

For me, I tried four cables and only the last one works, which comes from Sony (forgot where I got this cable though)

For me I would install the driver but I never got the message in the Security & Privacy screen that I was supposed to "Allow". The solution:

sudo kextload /Library/Extensions/SiLabsUSBDriver.kext/

This will actually spit out an error:

/Library/Extensions/SiLabsUSBDriver.kext failed to load - (libkern/kext) system policy prevents loading; check the system/kernel logs for errors or try kextutil(8).

However, if you now go to System Preferences-> Security & Privacy, you'll find the necessary message and Accept button to allow the kext to load. Click that, plug in your device and check that there is a detected device:

ls /dev/cu.*

...
/dev/cu.SLAB_USBtoUART
...

Try another cable. You might be using one with only power connections, not data.

Related