# Debug port

A debug port is a diagnostic interface (akin to a computer port) included in an electronic system or integrated circuit to aid design, fabrication, development, bootstrapping, configuration, debugging, and post-sale in-system programming. In general terms, a debug port is not necessary for end-use function and is often hidden or disabled in finished products.
When constituted in a high availability or safety critical system, a debug port may continue to operate as a system monitor for integrity validation in the finished product. In low-cost or high-volume electronics, debug ports are sometimes left enabled to avoid costs of design changes, and can be used by modders and hackers to gain control of the device or access to extra functionality. To avoid this, some manufacturers may choose to add passkey which needs to be sent over the debug port first before accessing the functionality, and this passkey usually is known only to the manufacturer and/or authorized entities like service/repair centers.

## Hardware debug ports

* UART
* Ubiquitous JTAG ports on ICs
* Low Pin Count debug port on the original Xbox, used by modders
* Serial Wire Debug (SWD), ubiquitous on Arm Cortex-M microcontrollers
* Background Debug Mode interface (BDM)
* Program and Debug Interface
* Nexus debug

## Debug ports on microprocessors

Microprocessors are exceptionally complex devices which commonly contain more than a billion transistors internally and sometimes exceed more than one trillion. Debug ports are utilized during development of bare metal programs and driver software on microprocessors. Debug ports can provide a range of useful features for developers including accessing internal state of the microprocessor which helps developers understand any exceptions occurring, memory transfers happening, and other events taking place during the normal execution of the program which otherwise may have been difficult to observe.

## Debug ports on microcontrollers

Microcontrollers are generally smaller than mainstream CPUs, but have now evolved so far into system on a chip (SoC) territory, that an MCU can be nearly the only complex chip remaining on an end-use application board (with additional chips devoted to specialized electrical functions such as level shifting and enhanced ESD protection).
SoC MCUs usually use internal flash memory as a program store and may also contain internal EEPROM-based configuration fuses whose correct configuration is essential to the MCU powering up in the correct operating mode; the debug port may be the only way to initially configure the clock tree or to load the first software program post-manufacture.

### USB Device Firmware Upgrade

Since around 2010, a broad class of MCUs now have integrated USB peripherals with device firmware upgrade (DFU) in factory ROM. This class of MCUs appeals to hobbyists who do not wish to invest in the hardware tools needed to access specialized debug ports such as JTAG.
These devices are designed to be resistant to being bricked. A bad firmware load is easily recovered by holding a special pin in the active state, which caused the chip to boot up using its internal factory ROM, which makes a programming interface available through its built-in USB controller. DFU can be viewed as a form of debug port implemented in software rather than hardware. However, this largely defeats the debug functionality of a dedicated hardware debug port, as it is inherently fragile to debug software which also implements your debug interface—but only when functioning correctly.