The other answers have really good info in them, but I'd still like to expound a bit on the different types of serial protocols, and how they vary in speed. I'll also mention a few devices and show some comparisons. **For *synchronous* vs *asynchronous* and what that means, see Majenko's really good answer.** #Clarification: Your phrasing of "receive a pulse train at a minimum speed of 10MHz" is quite confusing to me. Perhaps this is because when I hear "pulse train" I think you mean you want to read pulse widths in order to obtain data, ie: like the PPM pulse train used in Radio Control communication signals. Is what you mean simply that you want 10Mbps (megabit per second) transmission rates? If so, the Arduino Intel Galileo can do [SPI serial communication at a rate of up to **25MHz**][1], or you can do Ethernet communication with this board up to **10 MHz** or **100 MHz** (see previous link as well). Note that some Ethernet devices can communicate up to **1000 MHz** (like the [Orange Pi Plus][2]), but the Intel Galileo only goes up to **100 MHz**, according to the link above. USB3.1 serial communication, if a device supports it, however, can be done up to **10Gbps**. #Standard RS-232 0-5V (TTL) Serial, and example: Now, as for standard RS-232-type serial done with TTL logic levels (ie: signal voltage levels 0 to 5V), via a UART (piece of hardware that allows this type of asynchronous communication protocol), I have written C++ code on a PC and on a standard Arduino (ex: Nano, Uno, or Pro Mini--under $10 cost + $2 external UART) which communicates at **250kbaud** (though **2Mbaud** is possible on an Arduino Uno--see Connor Wolf's answer [here][3]). When communicating via a serial UART type device, plugged into a PC via a USB plug, a Windows-based computer sees it as a "COM" port. The UART simply does USB to RS-232 TTL data conversion, so I can use this COM port as a serial port on the PC. Since pretty much every Arduino supports standard Serial communication, even the cheapest ones, this is very appealing to me to learn how to write C++ code to do this. I spent the last couple weeks working on my communication code. At a serial communication speed of **250kbaud** (**250kbps** in my case) I am able to transfer 25-byte binary data packets from my PC to my sub-$10 Arduino at a rate of up to **1000 packets/sec**, while doing error checking on the Arduino receiving the data. In my case, each packet contains 8 commands, plus error checking bytes and a couple other things, to control an RC vehicle. ---------- #Here's a few key serial protocols, and their associated speeds, to be aware of. All of these are different types of serial communication protocols: 1. ##I2C: Normal Arduino (ex: Uno) default speed is 100kbps; it can be increased to 400kbps. Some non-Arduino devices can do 1Mbps or 3.4Mbps. 2. ##SPI: Arduino default speed is 4Mbps. Normal Arduinos can go up to 8Mbps; Galileo can do 25Mbps. I have seen some devices (ex: Wiznet W5200 Ethernet chip), which can do SPI serial communication up to 80Mbps ([source][4]). 3. ##RS-232 TTL via UART: This is what most people mean I think when they just use the word "serial" without specifying it further by saying "SPI," "I2C," etc. Whenever you see the term "baud" or "baudrate," this is the type of serial communication they are referring to too. Hardware (UART)-based serial communication is done via pins 0 and 1 on most Arduinos. Normally, the "high-end" speed is considered 115200bps, but I regularly use 250kbps on an Arduino. Up to 2 Mbps is theoretically possible under the right conditions for the Atmel AVR-based Arduinos, like the Uno. See Connor Wolf's answer [here][3]. Arduino also includes a software serial library for this type of serial communication on any of the Arduino's pins, and I have used it up to 250kbps. I haven't yet tested it beyond that speed, but being software-based, I'd expect it to become unreliable much beyond that. 4. ##USB: USB Speeds (https://en.wikipedia.org/wiki/USB) USB 1.0: Low Speed mode (1.5Mbps), Full Speed mode (12Mbps) USB 2.0: High Speed (480Mbps) USB 3.0: SuperSpeed (5Gbps) USB 3.1: SuperSpeed+ (10Gbps) 5. ##Ethernet: Standard rates are 10/100/1000 Mbps. ---------- #Conclusions: * If you must have a minimum of 10MHz (AKA mbps) communication rates, you can use the SPI, USB, or Ethernet protocols. I2C and RS-232 TTL serial are too slow. * If you really want the ~500MHz communication rate, you can use USB 2.0 or higher, or Ethernet 1000Mbps. All the rest are too slow. Note that embedded boards and devices, microcontrollers, etc, can *all* do some type of serial communication, even if it's just slow [bit-banged][5] RS-232 TTL-type or SPI-type serial. Nevertheless, some high-end devices can do really high speed serial communication via USB, USB 3.0, high-speed Ethernet, high-speed SPI, etc. When it comes to really fast serial communication methods (~3Mbps and higher), *synchronous* techniques must generally be used rather than *asynchronous* techniques, as the errors in clock-rates caused by using separate clocks begin to be too pronounced. You just need to look at your actual needs. For most of my needs, 250kbaud is plenty fast using the built-in UART inside every cheapo low-end AVR-based Arduino device. Your needs, however may be different. [1]: https://www.arduino.cc/en/ArduinoCertified/IntelGalileo [2]: http://www.orangepi.org/ [3]: https://arduino.stackexchange.com/questions/296/how-high-of-a-baud-rate-can-i-go-without-errors [4]: http://feilipu.me/2013/08/03/wiznet-w5200-arduino-shield/ [5]: https://en.wikipedia.org/wiki/Bit_banging