Skip to main content

Comparing the Protocols

ProtocolWiresTopologyBidirectional?Typical FRC use
PWM1 signal + power + gndPoint-to-pointNoLegacy speed controllers, servos
UART2 (TX, RX)Point-to-pointYesOlder sensors, debug consoles
SPI4 (+1 per extra device)Controller with per-device selectYesFast onboard sensors (e.g. gyroscopes)
I2C2 (shared by all)Multi-drop, address-basedYesSimple sensors (used sparingly, see above)
CAN2 (differential pair)Multi-drop busYesMotor controllers, PDH, PCM, most modern FRC devices
EthernetTwisted-pair, multiplePacket-switched networkYesRadio uplink, vision coprocessors, NetworkTables

Notice the trend moving down the table: each protocol trades away either wire count or simplicity to gain more devices, more speed, or a way for those devices to talk back, which is exactly the kind of trade-off worth keeping in mind while reading Motors and Commutation, where the same "one wire, one direction" PWM signal from earlier in this section gets replaced by CAN as motor controllers get smarter.