Getting your computer to see it · 05 of 12

Drivers on macOS

Plug in and look at the port list before you download anything — recent macOS versions already carry a CH34x driver. If yours does not, it is one package, one permission and one restart.

Look before you download

Two of the three cases on a Mac need nothing installed at all: the right-hand socket never does, and recent macOS versions ship a CH34x driver that covers the left-hand one too.

Why a port appears, or does not
Your computer
Which socket
Driver to install
yes
Port
The board is fine and there is still no port. The device enumerated; what is missing is the code that knows what it is. Install CH341SER from WCH, replug, and the fourth box lights up.

So the first step is not a download. Plug the board into the socket you intend to use, open Terminal, and run ls /dev/cu.*. A usbmodem or wchusbserial entry means you are already finished.

If macOS asks "Allow accessory to connect?", allow it. On the models that ask, denying it produces a board that charges and is invisible, which looks exactly like a broken cable.

If there is no port

Check the Mac saw the device at all before blaming the driver: the Apple menu ▸ About This MacSystem ReportHardwareUSB. A CH340-based board appears there as a USB-Serial controller whether or not a driver has claimed it.

  • Nothing in the USB tree — the Mac saw no device. That is the cable or the socket, not the driver. Try a cable you have moved a file with.
  • A device in the tree and no port in /dev — now a driver is genuinely what is missing.

Then, and only then:

  1. Download CH341SER_MAC from wch-ic.com/downloads/CH341SER_MAC_ZIP.html.

  2. Unzip it and run CH34xVCPDriver.pkg.

  3. Open System Settings ▸ Privacy & Security, scroll to the bottom, and Allow the blocked system extension. macOS will not load it until you do, and it does not nag you about it.

    macOS System Settings, Privacy & Security, showing the message: System software from application CH34xVCPDriver was blocked from loading, with an Allow button beside it.
    The blocked notice appears under Security and disappears again after a while. If it has already gone, the same extension is listed under Login Items and Extensions ▸ Driver Extensions.
    The Driver Extensions sheet in macOS System Settings, listing CH34xVCPDriver with a switch that is currently off.
    This is where the setting lives afterwards. A switch that is off here is a driver installed and not running, which produces exactly the same symptom as one never installed.
  4. Restart. This is the step people skip, and skipping it is why a correct install looks like a failed one — a system extension loads at boot, not when you approve it.

Run ls /dev/cu.* again. A wchusbserial entry is the finish line.

The code

list-ports.sh

The fastest way to answer "did the driver take" on a Mac. Run it with the board unplugged, plug the board in, run it again, and compare.

ls /dev/cu.*

# with the board in the left-hand socket you are looking for
#   /dev/cu.wchusbserial…      the CH340 bridge
# and in the right-hand socket
#   /dev/cu.usbmodem…          the chip's own USB

cu rather than tty is the one to hand to the Arduino IDE. Every serial device on macOS appears twice; the tty variant waits for a carrier signal that a dev board never asserts.

When it does not work

No popup appeared when you plugged the board in

macOS only asks about accessories on some models and settings. Its absence means nothing — go straight to the port list.

You installed the driver and there is still no port

Two things to check, in this order. System Settings ▸ Privacy & Security, for a blocked system extension waiting to be allowed; then a restart, because the extension only loads at boot. Skipping the restart is the usual reason a correct install appears to have failed.

Two entries appear for one board

Expected. Every serial device on macOS shows up as both /dev/tty.* and /dev/cu.*. Use the cu one.

The port disappears when the sketch crashes

That is the right-hand socket, and it is the chip doing what it must — the port is created by your firmware. Move to the left-hand socket while you debug it, or hold BOOT and tap RESET to get the ROM's port back.

Where this goes next

The IDE, the board package, and the eight settings that make the memory on this board visible.

Arduino IDE, set up for N16R8

Edit this page — content/boards/esp32-s3/drivers-on-macos.mdx

Community

Questions about this product

See what other owners have asked, and read their solutions.

Ask a question ↗

ESP32-S3 Gold Edition (N16R8)

Loading discussions…

Discuss this article

Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.

Browse ESP32-S3 on the forum