Diagnosing hardware peripheral issues on modern Mac systems—such as external SSDs negotiating slower transfer speeds than expected, high-draw audio interfaces resetting under load, or complex USB-C Thunderbolt docking stations dropping display outputs—demands deep visibility into the USB subsystem. While System Settings provides general summaries, it conceals the low-level bus topology, operational link speeds (e.g. USB 2.0 480 Mb/s versus USB 3.2 10 Gb/s or USB4 40 Gb/s), electrical power allocations, and vendor identifiers (VID/PID). Utilising the native system_profiler command in macOS Terminal allows users and administrators to query the complete I/O Kit USB registry tree directly.
Understanding system_profiler and the SPUSBDataType Class
The macOS system_profiler utility queries hardware specifications recorded by macOS kernel extensions (KEXTs) and DriverKit user-space drivers. By targeting the SPUSBDataType dictionary, you extract real-time data reported by the system’s USB host controllers (including Apple Silicon integrated Type-C controllers, PCIe host adapters, and root hubs).
Querying this data type reveals:
- USB Controller Host Architecture: Identifies controller drivers (such as AppleUSBXHCIPCI).
- Negotiated Link Speed: Differentiates between Low-Speed (1.5 Mb/s), Full-Speed (12 Mb/s), High-Speed (480 Mb/s), SuperSpeed (5 Gb/s), and SuperSpeedPlus (10 Gb/s or 20 Gb/s).
- Electrical Power Telemetry: Documents Current Available (mA), Current Required (mA), and Extra Operating Current allocated via Apple power-delivery handshakes.
- Hardware Identifiers: Product ID (PID), Vendor ID (VID), Revision code, and hardware Serial Number.
Retrieving the Complete USB Tree in Terminal
To inspect your Mac’s USB architecture, launch Terminal from Applications > Utilities > Terminal (or press Command + Space, type Terminal, and press Enter).
Execute the following command to display the entire USB controller hierarchy:
system_profiler SPUSBDataType
The output prints an indented hierarchical tree representing host controllers, root hubs, external daisy-chained hubs, and connected physical devices. Each connected device block exposes essential diagnostic metrics:
- Speed: Confirms the exact data throughput negotiated between the accessory and your Mac. If an external NVMe drive capable of 10 Gb/s connects over a substandard charging cable, this field highlights the bottleneck by displaying
Up to 480 Mb/sinstead ofUp to 10 Gb/s. - Current Available (mA): Shows the maximum electrical current the host port or powered hub can supply (typically 500 mA for USB 2.0 or 900 mA to 1500 mA for USB 3 / Type-C).
- Current Required (mA): Indicates the operational current demanded by the device. If required current exceeds available current, the peripheral will fail to initialise or intermittently disconnect.
- Location ID: A hexadecimal hardware identifier mapping the exact physical port on your Mac’s logic board where the accessory is inserted.
Filtering USB Information with Grep and Awk
Because modern Macs contain internal USB buses for built-in devices (such as the FaceTime camera, ambient light sensor, and keyboard/trackpad controllers on MacBooks), the full report can span dozens of lines. You can filter the output to isolate specific devices and speeds.
Listing Connected USB Device Names and Negotiated Speeds
To quickly view all attached accessories and verify their negotiated bandwidth without scrolling through raw trees, run:
system_profiler SPUSBDataType | grep -E "(^ {4}[A-Za-z0-9]|Speed:)"
Checking Vendor and Product IDs for Driver Identification
When compiling custom software or troubleshooting hardware compatibility, you often need the hex identifiers. Run:
system_profiler SPUSBDataType | grep -E "(Product ID:|Vendor ID:|Manufacturer:)"
Auditing External SSD and Drive Performance
If you connect a fast external solid-state drive and suspect it is underperforming, query its specific storage block within the USB tree:
system_profiler SPUSBDataType | awk '/Media:/, /Speed:/'
Inspect the reported Speed and verify whether the bus is operating at Up to 5 Gb/s, Up to 10 Gb/s, or higher. If the speed reads Up to 480 Mb/s, the physical cable does not possess the high-speed data lanes required for SuperSpeed operation, indicating you must swap the cable for a verified USB-C 3.2 or Thunderbolt cable.
Exporting USB Hardware Inventories to JSON
For fleet maintenance, IT asset auditing, or automated device verification scripts, system_profiler can emit clean JSON structures. Pass the -json flag to capture the report:
system_profiler SPUSBDataType -json > ~/Desktop/usb_inventory.json
The resulting JSON document can be parsed using tools like jq or ingested into configuration management databases (CMDB), enabling automated auditing of connected peripherals, authorized storage devices, and bus health across your environment.