A collection of USB hacking–related links.
For an overview of the state of things in the USB hacking field as of a few years ago, see:
- My 5-hour "Introduction to USB hacking" talk (the talk is in Russian, the slides are in English);
- The awesome "USB Reverse Engineering: Down the rabbit hole" article and link collection by Glenn Grant.
Follow @andreyknvl on Twitter or @xairy@infosec.exchange on Mastodon to be notified of updates.
- Essentials
- Workshops
- Hardware
- Linux USB stack
- Software
- Research
- Misc
"USB 101: An Introduction to Universal Serial Bus 2.0" by Robert Murphy [book]
"USB in a NutShell" by Craig Peacock [articles]
"Hacking the USB World with FaceDancer" by Kate Temkin [workshop]
Hardware (and related tools) developed specifically for executing USB attacks. Some hardware from other sections can also be used for this.
Flash drive–looking device that pretends to be a USB keyboard and injects keystrokes.
Rubber Ducky [hardware]
hak5 docs: USB Rubber Ducky [docs]
usbrubberducky-payloads: Rubber Ducky payload repository [github]
Can pretend a USB Ethernet, serial, mass storage, and HID device.
Bash Bunny [hardware]
hak5 docs: Bash Bunny [docs]
Bash Bunny wiki [docs]
bashbunny-payloads: Bash Bunny payload repository [github]
Rubber Ducky clone that can be triggered over Wi-Fi.
Cactus WHID: Wi-Fi HID Injector — USB Rubber Ducky / BadUSB On Steroids [hardware] [video]
WHID Elite: GSM-enabled Open-Source Multi-Purpose Offensive Device [hardware]
Cactus Micro Rev2 [hardware]
ESPloitV2: Wi-Fi Keystroke Injection Tool designed for Cactus WHID [github]
A general-purpose hacking tool that includes support for emulating a USB HID device.
Flipper Zero [hardware]
Bad USB - Flipper Zero [docs]
Flipper-Zero-BadUSB: Flipper Zero BadUSB payloads [github]
badusb: Flipper Zero BadUSB payload library [github]
O.MG Cable [hardware] [video review] [payloads]
USBNinja [hardware]
Evil Crow Cable [hardware]
Evil Crow Cable Pro [hardware]
USBSamurai [hardware] [article]
AirDrive Forensic Keylogger Cable & Module [hardware]
KeyGrabber Forensic Keylogger Cable & Module [hardware]
AirDrive: Keylogger, Forensic Keylogger [hardware]
KeyGrabber: Pico, USB, TimeKeeper, Forensic Keylogger [hardware]
Forensic Keylogger Keyboard [hardware]
Key Croc [hardware]
KEYVILBOARDs [hardware]
Maltronics WiFi KeyLogger Internal [hardware] [discontinued]
LAN Turtle [hardware] [docs] [modules]
O.MG Plug [hardware]
USB Killer [hardware]
rpk2: Evil Mass Storage [hardware] [github] [article]
Hardware developed specifically for sniffing and analyzing USB communications. Some hardware from the Facedancer boards and Linux boards sections can also be used for this.
Beagle: USB 12, USB 480, USB 480 Ultimate, USB 5000 v2 Ultimate [hardware]
OpenVizsla [hardware] [github] [shop] [articles]
LambdaConcept USB2 SNIFFER [hardware]
PhyWhisperer-USB [hardware] [github]
Daisho: SuperSpeed USB 3.0 FPGA platform [hardware] [decommissioned] [article] [github]
Low-cost USB Sniffer [hardware]
serialusb [hardware] [decommissioned] [article] [wiki]
Twinkie: USB-PD Sniffer [hardware]
Twonkie: USB-PD sniffer/injector/sink based on Twinkie [hardware] [shop]
twebkie: USB Power Delivery analyzer directly from web [github]
usb.org: USB Power Delivery Compliance [hardware]
Hardware and tools compatible with the modern Facedancer framework and its older versions.
Cynthion: Multi-tool for building, analyzing, and hacking USB devices [hardware]
GreatFET One [hardware] [article] [video]
Hydradancer: HydraUSB3-based backend for Facedancer [hardware] [upcoming] [article]
Facedancer: Modern framework for all Facedancer boards [github] [video]
packetry: Fast, intuitive USB 2.0 protocol analysis application for use with Cynthion [github]
raw-gadget/Facedancer: Prototype of Raw Gadget–based Facedancer backend for Linux boards [github]
Facedancer21 (and older) [hardware] [article]
GoodFET42 (and older) [hardware]
Raspdancer: Facedancer21 expansion board for Raspberry Pi [hardware]
BeagleDancer: Facedancer21 expansion board for BeagleBone [hardware]
facewhisperer: USB host add-on for the ChipWhisperer side-channel analysis tool [hardware] [video] [article]
goodfet: Legacy framework for Facedancer21 and GoodFET boards [github]
umap: USB host security assessment tool for Facedancer21 and GoodFET boards [github]
umap2: Version 2 of umap [github]
nu-map: Fork of umap2 based on modern Facedancer framework[github]
badusb2-mitm-poc: USB MitM with two Facedacer21 boards [github]
A multitude of Linux boards can be used for USB device emulation; see the Gadget subsystem section. This section only mentions the somehow notable of them.
The cheapest and most compact of the Raspberry Pi boards.
Raspberry Pi Zero [hardware]
Turning your Raspberry PI Zero into a USB Gadget [article]
Raspberry Pi Zero OTG Mode [article]
P4wnP1: Highly customizable USB attack platform based on Rasbperry Pi Zero [github] [writeup] [Kali image]
poisontap: Malicious Ethernet USB devices based on Raspberry Pi Zero [github]
RaspberryPiZero_HID_MultiTool: Scripts for turning Raspberry Pi Zero into various USB devices [github]
rspiducky: Turns Rasberry Pi Zero into Rubber Ducky [github]
sahara_emulator: Emulates Qualcomm Sahara using Raspberry Pi Zero [github]
(Raspdancer: Facedancer21 expansion board for Raspberry Pi [hardware])
These were the first Linux boards that were used for implementing USB-related tools.
BeagleBone Black [hardware]
BeagleBoard-xM [hardware]
USBProxy-legacy: USB proxy for BeagleBone Black based on libusb and GadgetFS [github]
bb_usb_sniffer: USB sniffer for BeagleBoard-xM based on custom gadget driver
usbq: Python framework for monitoring and modifying USB communications [github] [usbq_core] [usbq_userland]
2010: "BeagleBoard/GSoC/2010 Projects/USBSniffer" [docs] [blog]
2014: "USBProxy: Building an Open and Affordable USB Man in the Middle Device" by Dominic Spill [slides] [article] [video]
2014: "USB write blocking with USBProxy" by Dominic Spill [slides] [video]
2015: "NSA Playset: USB Tools" by Dominic Spill [slides] [summary] [video]
2016: "USBiquitous: USB intrusion toolkit" by Benoit Camredon [article]
(BeagleDancer: Facedancer21 expansion board for BeagleBone [hardware])
USB Armory [hardware] [github]
2015: "USB Armory as an Offensive Attack Platform" [paper]
2016: "Forging USB armory" by Andrea Barisani [slides] [video]
2016: "Snagging creds from locked machines" by Rob Fuller [article]
2017: "How to Build a USB Analyzer with USB Armory? - Creating an Armory Sandbox" by Pedro Vilaca [article] [github]
OpenStick [github] [wiki] [blobs]
2022: "Hackable $20 Modem Combines LTE And Pi Zero W2 Powe" by Arya Voronova [article]
2022: "OpenStick: Some Preliminary Investigations" [article]
2023: "P4wnP1-LTE" by Rogan Dawes [article]
2022: "OpenStick" by Zoltan Mizsei [article]
UF896 - Qualcomm MSM8916 LTE router ~384MiB RAM/2.4GiB flash, Android: OpenWrt? [forum]
OpenStick WIP notes [github]
openstick-stuff [github]
android-keyboard-gadget: Convert Android device into USB keyboard/mouse [github]
DroidDucky: Simple DuckyScript interpreter in Bash [github] [article]
Many Arduino boards and their clones can be used for USB device emulation. This section provides only a few notable links; there is too many to list all.
Arduino Classic boards [hardware]
BadUSB DIY [playlist]
Teensy 3.2 [hardware]
Teensy 2.0 [hardware]
Teensy docs: USB Serial, USB Keyboard, USB Mouse, USB Joystick, USB MIDI, USB Flight Sim [docs]
Getting started with Teensy [article]
cores: Teensy Core Libraries for Arduino [github]
Pateensy: Rubber Ducky–like payload for Teensy [github]
Brutal: Various payloads for Teensy [github]
USBdriveby: DNS spoofer payload for Teensy [github]
Kautilya: HID payloads for Teensy [github]
Digispark: Tiny, Arduino-enabled, USB development board [hardware] [aliexpress]
Configuring Digispark for Arduino IDE and upgrading bootloader [article]
Attiny85: Rubber Ducky payloads for Digispark ATtiny85 [github]
Duckyspark: Translator from USB Rubber Ducky payloads to Digispark code [github]
micronucleus: ATtiny USB bootloader with strong emphasis on bootloader compactness [github]
CJMCU BadUSB [hardware]
bad_ducky: Instructions for CJMCU BadUSB [github] [wiki]
CJMCU_ATMEGA32U4_BADUSB: Guide on using DuckyScript with CJMCU BadUSB [github]
Malduino [hardware]
DSTIKE WiFi Duck [hardware]
WiFiDuck: Wireless keystroke injection attack platform [github]
Tomu: An ARM board that fits inside your USB connector [hardware]
USB 2.0 Hi-Speed Isolator [hardware]
PortaPow blockers [hardware]
USG [hardware]
C2C caberQU: USB C cable tester [hardware]
kernel.org documentation: all, HTML index, USB API [docs]
linux-usb.org [docs]
Bootstrap Yourself with Linux-USB Stack: Design, Develop, Debug, and Validate Embedded USB [book]
kernel.org documentation: all, HTML index, USB Host API [docs]
2009: "Linux USB drivers" by Michael Opdenacker [slides]
2007: "What actually happens when you plug in a USB device?" [article]
kernel.org documentation: all, HTML index, USB Gadget API [docs]
linux-usb.org: Linux-USB Gadget API Framework [docs]
2021: "USB On-The-Go (OTG)" [article]
2023: "A tour of USB Device Controller (UDC) in Linux" by Herve Codina [slides] [video]
2010: "The USB composite framework" by Michal Nazarewicz [article]
2014: "Make your own USB gadget: Kernel and userspace" [slides]
2014: "Kernel USB Gadget Configfs Interface" by Amit Pundir [slides]
2015: "ConfigFS Gadgets: An Introduction" by Amit Pundir [slides]
2019: "Modern USB gadget on Linux & how to integrate it with systemd" by Andrzej Pietrasiewicz [article] [part 2] [video]
2020: "Modern USB Gadget with Custom USB Functions" by Andrzej Pietrasiewicz [slides] [video]
libusbgx: New USB gadget ConfigFS library [github]
libusbg: Old USB gadget ConfigFS library [github]
gt: Command-line tool for creating USB gadgets via ConfigFS [github]
ptp-gadget: FunctionFS-based gadget for PTP (Picture Transfer Protocol) [github]
gadgetd: System-wide USB gadgets and FunctionFS–based services manager [github] [motivation]
keyboard-gadget: Simple HID keyboard gadget via ConfigFS [github]
linux-usb.org: usb.c, usbstring.c, usbstring.h [examples]
2016: "Create your own USB gadget with GadgetFS" by Gregory Soutade [article]
libusb-gadget: Simple wrapper library to access GadgetFS [github]
raw-gadget: Low-level interface for the Linux USB Gadget subsystem [github]
usb-proxy: USB proxy based on Raw Gadget and libusb [github]
linux-usb.org: USB Testing on Linux [docs]
2019: "Using dummy-hcd to play with USB gadgets" by Andrzej Pietrasiewicz [article]
2023: "Test a Linux kernel USB Device Controller driver with testusb" by Herve Codina [article]
Assorted software that doesn't specifically belong to the sections above.
libusb: Cross-platform library for accessing USB devices [github]
pyusb: Python library for accessing USB devices [github]
linux/tools/usbip: USB/IP tools for Linux [github]
usbipd-win: USB/IP tools for Windows [github]
python-usb-protocol: USB Protocol Library for Python
usbmon: USB packet capture for Linux [docs]
USBPcap: USB packet capture for Windows [github]
Ubuntu wiki: Debugging USB Problems [article]
Wireshark: USB capture setup [docs]
ViewSB: Open-source USB analyzer toolkit for variety of capture hardware [github]
vusb-analyzer: Virtual USB Analyzer [github] [sourceforge]
hidviz: Tool for in-depth analysis of USB HID devices communication [github]
Also see nu-map, umap2, and umap in the Facedancer boards section.
syzkaller/usb: Coverge-guided Raw Gadget–based Linux USB host fuzzer [github] [slides] [video]
USBFuzz: Coverage-guided QEMU-based USB host fuzzer [github] [paper]
vUSBf: QEMU-based USB host fuzzer [github] [slides] [paper] [video]
UDEFuzz: UDE-based Windows USB host fuzzer [github]
FuzzUSB: Dummy HCD/UDC–based Linux USB gadget fuzzer [github] [paper]
usb-device-fuzzing: Some tools for fuzzing USB devices [github]
FrisbeeLite: GUI-based USB device fuzzer [github] [article]
usbguard: Software framework for implementing USB device authorization policies [github]
usb-canary: Linux/OSX tool that uses psutil to monitor devices while your computer is locked [github]
usbwall: Control LDAP users access to USB devices [github]
ukip: USB Keystroke Injection Protection [github]
usbsas: Tool and framework for securely reading untrusted USB mass storage devices [github]
usbrip: Simple CLI forensics tool for tracking USB events on GNU/Linux [github]
uhubctl: USB hub per-port power control [github]
hub-ctrl.c: Control USB power on port by port basis on some USB hubs [github]
webcam-tools: Update of the UVC webcam tools [github]
USBDescriptorKitchen: USB Descriptor creation and maintainance tool [github]
usbrply: Replay USB messages from Wireshark (.cap) files [github]
virtual-fido: Virtual FIDO2 USB Device [github]
LOGITacker: Tool to enumerate and test vulnerabilities of Logitech Wireless Input devices via RF [github] [branch]
Psychson: Phison 2251-03 (2303) Custom Firmware & Existing Firmware Patches (BadUSB) [github] [article]
usb_cdc: Single/Multi-channel Full Speed USB interface for FPGA and ASIC designs [github]
apple-hid-read-flash.py: Reading Apple HID flash over USB [github] [tweet]
usbrevue: Suite of tools for reverse-engineering USB devices [github]
Articles, talks, and research papers.
2023: "Physical Attacks Against Smartphones" by Christopher Wade [slides] [video]
2023: "Intel BIOS Advisory – Memory Corruption in HID Drivers" [article]
2023: "REUnziP: Re-Exploiting Huawei Recovery With FaultyUSB" by Lorant Szabo [articl
2023: "The Impostor Among US(B): Off-Path Injection Attacks on USB Communications" by Robert Dumitru et al. [paper] [github]
2022: "Exploiting the Wii U's USB Descriptor parsing" [article]
2022: "Hacking Some More Secure USB Flash Drives" by Matthias Deeg [article] [part 2]
2022: "Keystroke Reflection: Inside a Side-Channel Exfiltration Technique" [article]
2022: "Breaking Secure Boot on Google Nest Hub (2nd Gen) to run Ubuntu" by Frederic Basse [article]
2022: "CVE-2021-45608 | NetUSB RCE Flaw in Millions of End User Routers" by Max Van Amernngen [article]
2020: "Cheating in eSports: How to cheat at virtual cycling using USB hacks" by Brad Dixon [slides] [video]
2019: "BadUSB in Routers" [slides] [github]
2019: "eyeDisk. Hacking the unhackable. Again" [article]
2019: "Simple AV Evasion Symantec and P4wnP1 USB" [article]
2019: "Hacking microcontroller firmware through a USB" [article]
2019: "Virtual Media Vulnerability in BMC Opens Servers to Remote Attack" [article] [github]
2019: "Command Injection With USB Peripherals" by Danny Rosseau [article]
2019: "Technical analysis of the checkm8 exploit" [article]
2018: "USB Hub Bug Hunting & Lessons Learned" [article]
2018: "Tick Group Weaponized Secure USB Drives to Target Air-Gapped Critical Systems" [article]
2018: "Advanced USB key phishing" [article]
2018: "Android: directory traversal over USB via injection in blkid output" [article]
2018: "Opening Black Box Systems with GreatFET+FD" [slides]
2018: "Here's a List of 29 Different Types of USB Attacks" by Catalin Cimpanu [article]
2018: "OATmeal on the Universal Cereal Bus: Exploiting Android phones over USB" [article]
2018: "Oh No, Where's FIDO? - A Journey into Novel Web-Technology and U2F Exploitation" [video]
2017: "USB Snooping Made Easy: Crosstalk Leakage Attacks on USB Hubs" by Yang Su et al. [paper]
2017: "Exploiting USB/IP in Linux" by Ignat Korchagin [slides]
2016: "A Monitor Darkly: Reversing and Exploiting Ubiquitous OSD Controllers" by Ang Cui [slides] [video] [code]
2016: "Universal Serial aBUSe: Remote Physical Access Attacks" by Rogan Dawes and Dominic White [slides] [video] [article] [code]
2015: "USB Armory as an Offensive Attack Platform" [paper]
2015: "USB Attack to Decrypt Wi Fi Communications" by Jeremy Dorrough [video]
2015: "USB - An Attack Surface of Emerging Importance" [thesis]
2014: "BadUSB - On Accessories that Turn Evil" by Karsten Nohl and Jakob Lell [video] [wiki]
2014: "USB Attacks Need Physical Access Right? Not Any More..." by Andy Davis [video]
2014: "USB for All!!1" by Jesse Michael and Mickey Shkatov [slides]
2014: "Mouse Trap: Exploiting Firmware Updates in USB Peripherals" by Jacob Maskiewicz et al. [paper]
2014: "HubCap: pwning the ChromeCast" [article]
2014: "USB connection vulnerabilities on Android smartphones" by Andre Fernando Lopes Pereira [thesis]
2013: "iSeeYou: Disabling the MacBook Webcam Indicator LED" [paper]
2012: "Emulating USB DFU to Capture Firmware" by Travis Goodspeed [article]
2011: "Exploiting USB Devices with Arduino" [article] [slides]
2009: "USB Attacks: Fun with Plug and 0wn" by Rafael Dominguez Vega [slides]
2009: "USB Device Drivers: A Stepping Stone into your Kernel" by Moritz Jodeit and Martin Johns [slides]
2023: "Automotive USB Fuzzing" by Euntae Jang et al. [video]
2022: "Fuzzing USB with Raw Gadget" by Andrey Konovalov [slides] [video]
2022: "PrIntFuzz: Fuzzing Linux Drivers via Automated Virtual Device Simulation" by Zheyu Ma et al. [paper]
2022: "FuzzUSB: Hybrid Stateful Fuzzing of USB Gadget Stacks" by Kyungtae Kim et al. [paper] [github]
2020: "USBFuzz: A Framework for Fuzzing USB Drivers by Device Emulation" by Hui Peng and Mathias Payer [paper] [github]
2019: "Coverage-Guided USB Fuzzing with Syzkaller" by Andrey Konovalov [slides] [video] [docs]
2019: "USB Fuzzing: A USB Perspective" by Dave Jing Tian [article]
2018: "Massive scale usb device driver fuzz without device" [slides]
2015: "Introduction to USB and Fuzzing" by Matt DuHarte [video]
2015: "Don't Trust Your USB! How to Find Bugs in USB Device Drivers" by Sergej Schumilo et al. [paper] [video] [github]
2014: "Implementing an USB Host Driver Fuzzer" by Daniel Mende [slides]
2014: "USB Fuzzing Basics: From fuzzing to bug reporting" by Jordan Bouyat [article]
2012: "Fuzzing the USB in your devices" by Olle Segerdahl [slides]
2011: "USB Fuzzing for the Masses" [article]
2011: "Fuzzing USB devices using Frisbee Lite" by Andy Davis [article] [github]
2010: "USB – Undermining Security Barriers" by Andy Davis [article] [slides] [video]
2009: "Assessment of Software & Hardware Approaches to Building a USB Fuzzer" [article]
2020: "A file system for safely interacting with untrusted USB flash drives" by Ke Zhong et al. [paper]
2018: "Discovering and Plotting Hidden Networks created with USB Devices" [paper]
2018: "Preventing USB Attacks with linux-hardened" [article]
2017: "USBGuard: authorization for USB" by Nur Hussein [article]
2017: "FirmUSB: Vetting USB Device Firmware using Domain Informed Symbolic Execution" [paper]
2017: "How to Build a USB Analyzer with USB Armory? - Creating an Armory Sandbox" by Pedro Vilaca [article] [github]
2016: "Preventing USB Attacks with Grsecurity" [article]
2016: "Making USB Great Again with USBFILTER" [paper]
2015: "Defending Against Malicious USB Firmware with GoodUSB" [paper]
2011: "USB Security Challenges" by Joanna Rutkowska [article]
2023: "Hardware investigation of wireless keyloggers" by Antoine Cervoise [article]
2023: "Driver adventures for a 1999 webcam" by Ben Cox [article] [code]
2022: "USB: Reverse Engineering and Writing Drivers" [video]
2020: "Reverse Engineering Firmware (in Mice)" [article] [part 2] [part 3]
2019: "Reverse Engineering USB Devices" with Kate Temkin and Mikaela Szekely [podcast]
2019: "Writing userspace USB drivers for abandoned devices" by Ben Cox [article] [code]
2019: "Making Pioneer DDJ-RB USB audio work on Linux" [part 2]
2017: "Reverse Engineering USB Protocol" [article]
2013: "Reverse engineering a Windows USB driver" by Matt Cutts [article]
2012: "Hacking the Kinect" [articles]
2008: "Learning how to reverse engineer a Windows USB driver: the Luxeed LED keyboard" by Kurt Stephens [article] [github]
2024: "Hydradancer: Faster USB Emulation for Facedancer" by Thiebaud Fuchs [article]
2024: "Unlocking secret ThinkPad functionality for emulating USB devices" by Andrey Konovalov [article]
2023: "Facedancer with Antoine" [video]
2019: "Making USB Accessible: Developing Ultra-low-cost, Open USB Tools" [slides] [video]
2018: "How To Bring HID Attacks To The Next Level" by Luca Bongiorni [video]
2017: "FaceDancer 2.0" by Dominic Spill and Kate Temkin [slides] [video]
2016: "GreatFET: Making GoodFET Great Again" by Michael Ossmann [article] [video]
2016: "Forging USB armory" by Andrea Barisani [slides] [video]
2016: "USBiquitous: USB intrusion toolkit" by Benoit Camredon [article]
2014: "USBProxy: Building an Open and Affordable USB Man in the Middle Device" by Dominic Spill [slides] [article] [video]
2016: "IRON-HID: Create Your Own Bad USB Device" by Seunghun Han [paper] [github]
2014: "OpenVizsla OV3" by Felix Domke [articles]
2013: "Introducing Daisho" by Michael Ossmann and Dominic Spill [slides] [video] [article]
2012: "Emulating USB Devices with Python" by Travis Goodspeed [article]
2010: "BeagleBoard - USB Sniffer" [articles] [docs]
2010: "Programmable HID USB Keystroke Dongle: Using the Teensy as a pen testing device" [article]
2024: "iOS: a journey in the USB networking stack" by Florian Le Minoux [article]
USB Complete: Everything You Need to Develop USB Peripherals [book]
Attacks via physical access to USB (DMA...?) [stackexchange]
Can webcams be turned on without the indicator light? [stackexchange]
Turning off the blue status LED on the logitech C920 usb camera? [stackexchange]
USB 3.x SS enumeration [stackexchange]
2024: "Adding a USB Port to the ThinkPad X1 Nano (the Hard Way)" by Joshua Stein [article]
2024: Clearing up misinformation about USB-C [thread]
2024: "Making USB devices - end to end guide to your first gadget" by Uros Popovic [article]
2024: Notes on why USB hubs suck by Michael Ossmann [tweet]
2023: "Getting JTAG on the iPhone 15" by Thomas Roth [video]
2023: "See the minimum needed for a USB device to list in Device Manager" [video]
2022: "Tech Stuff - USB and Firewire" [article]
2022: "All About USB-C: Introduction For Hackers" by Arya Voronova [article]
2022: "Illegal USB Type-C" by Sergey Korablin [article]
2022: "A Chip To Bridge The USB 2 – USB 3 Divide" by Arya Voronova [article]
2021: "USB On-The-Go (OTG) Basics" [article]
2021: "USB-C Cable Colour Codes (alpha)" [article]
2021: "How does USB device discovery work?" by Ben Eater
2021: "How does a USB keyboard work?" by Ben Eater
2021: "How does n-key rollover work?" by Ben Eater
2020: "USB Type-C is Coming: 3 Things You’ve Just Gotta Know" [article] [archive]
2020: "USB3: why it's a bit harder than USB2" by Kate Temkin [article]
2020: "USB PHY on FPGA" by Andrew Strokov [slides] [code]
2019: "Now how many USB-C™ to USB-C™ cables are there?" by Benson Leung [article]
2018: "Understanding HID report descriptors" [article]
2016: "Alternate Mode for USB Type-C: Going beyond USB" [article]
2016: "Understand USB (in Linux)" by Opasiak Krzysztof [slides]
2013: "What is the difference between /dev/ttyUSB and /dev/ttyACM?" by Samuel Tardieu [article]
2008: "USB Made Simple: A Series of Articles on USB" [articles]