# Why does USB signaling to microcontrollers need resistors

I'm currently trying to make a USB device with the ATMega16U2.

On page 187 of the datasheet, there are unspecified resistors between the USB port and the pins of the microcontroller

The Arduino Uno (R3) similarly uses these resistors in its design, with a value of 22 Ohms.

What are these for, and why are they needed with such low values?

Bonus question: The wiring between UDP, UDM, D+ and D- in the figure on page 187 is a mistake, right? On the next page, they are reversed.

• Reversed? I see that they are same in the USB connections. Nov 25 '14 at 3:15
• UDP connected to D- on that page, but D+ on the following page, and so on for UDM. Looking at other datasheets, this appears to be wrong. Nov 25 '14 at 3:29
• Oh, you mean figure 20-4 and figure 20-5, right? Yes, figure 20-4 is wrong. But they in the same page :). Nov 25 '14 at 3:35
• Yeah, both 20-3 (previous page) and 20-4 seem to be wrong. Nov 25 '14 at 3:36
• You are right, so many typos. Nov 25 '14 at 3:38

Per USB 2.0 standard, when using a full speed (12Mbps) buffer in a USB 2.0 compliant system, it is necessary to place a series resistor on the D+ and D− pins external to the transceiver. This placement is a result of the need to properly match the impedance of the specified transmission line having a differential characteristic impedance ($Z_{O}$) of 90Ω and a single ended impedance of 45Ω. To match this load, it requires that the full speed transceiver output impedance must be in the range 28Ω to 44Ω. So if the transceiver has a output impedance less than this (many output drivers has a low output impedance), you may need a external termination resistor.