Raspberry与Arduino USB通信协议确认(基于SerialPy库)
Great question—this is a super common point of confusion when working with serial over USB, especially for academic write-ups where precision matters. Let’s break this down clearly:
First, untangle UART vs. RS-232
- UART (Universal Asynchronous Receiver/Transmitter) is the core hardware mechanism that handles asynchronous serial data transfer (using start/stop bits instead of a shared clock). Every Arduino has a UART built into its main microcontroller (e.g., ATmega328P on an Uno). It’s the "engine" of serial communication.
- RS-232 is an electrical and physical layer standard, not a communication protocol itself. It defines specific voltage levels (e.g., +12V for logic 0, -12V for logic 1) and connector types (like DB9) to implement UART over a physical cable. It’s just one way to wire UART communication.
What’s actually happening with USB + pySerial?
- Most Arduino boards don’t have native USB support on their main chip. Instead, they use a USB-to-UART bridge chip (like CH340, FT232, or the ATmega16U2 on Uno) that converts USB signals to UART signals compatible with the Arduino’s microcontroller.
- When you connect via USB and use
pySerial, the library abstracts the USB layer entirely—you’re effectively talking directly to the Arduino’s UART port through the bridge. - This setup does not use RS-232: the USB cable uses USB’s own electrical standard, and the bridge chip handles all level conversion between USB and the Arduino’s 5V logic UART. RS-232’s high-voltage levels never come into play here.
Precise phrasing for your final report
The communication between Raspberry Pi and Arduino via USB (using the pySerial library) relies on UART as the underlying serial communication mechanism, mediated by a USB-to-UART bridge chip integrated on the Arduino board. RS-232 is not involved in this setup, as the physical layer uses USB’s electrical standard rather than RS-232’s voltage specifications.
Bonus: Direct GPIO UART connection (no USB)
If you ever connect Arduino’s TX/RX pins directly to Raspberry Pi’s GPIO UART pins, you’re still using UART—but you’ll need level shifters (Arduino uses 5V logic, Pi uses 3.3V). Even then, it’s not RS-232 unless you add transceivers like the MAX232 to convert logic levels to RS-232 standards.
内容的提问来源于stack exchange,提问作者Mark Truong

