I’ve been looking through the Arduino schematics in search of a circuit to perform automatic power supply selection in the case that there are two available supplies. I had convinced myself that there was a design flaw in the Arduino Uno selector, however upon further inspection it seems it should work just fine.
According to the information page for the Arduino Uno, available here with the corresponding schematic, the current board revision uses a comparator and mosfet combination to switch between the USB and External DC supplies. The circuit is configured such that the external supply will always provide 5V to the board if it is connected. The selector’s job is to detect the external supply and disconnect the USB from the internal 5V rail, preventing the two supplies from fighting each other. Visualizing the circuit as it is drawn a bit difficult as is so I’ve rearranged it below.
My confusion came when looking at mosfet connect to the output of the comparator. The way the mosfet is installed current will always be able to flow through the body diode despite the comparator’s attempts to “shut off” the mosfet. This seems to defeat the purpose of the circuit. Things make sense if you don’t look at the active part of the circuit as the selector. Instead, as shown below, the body diode acts as the selector. The role of the mosfet is to eliminate the voltage drop on the body diode when no external supply is provided.