I've got it running on my desk at 4 Mbit/sec, using a pair of Teensy 3.1 boards, running this code on both:
Code:
HardwareSerial Uart = HardwareSerial();
byte j, RX, g;
long d,t,prev;
#define rate 4000000
void setup() {
//Uart.begin(115200);
Uart.begin(rate);
Serial.begin(rate);
pinMode(13,OUTPUT);
pinMode(2, INPUT_PULLUP);
}
void loop() {
if (digitalRead(2)==0) {
RX=0;
}
else{
RX=1;
}
//////////////// SEND
if (RX==0) {
if ((millis()-prev)>500 ) {
j++;
g+=64;
prev=millis();
byte buf[10];
buf[0] = j;
buf[1] = j;
buf[2] = j;
buf[3] = j;
buf[4] = j;
buf[5] = j;
buf[6] = j;
buf[7] = j;
buf[8] = j;
buf[9] = d;
t=micros();
Uart.write(buf, 10);
d=micros()-t;
}
if (g>0){
g--;
digitalWrite(13, HIGH);
}
if (g==0){
digitalWrite(13, LOW);
}
if (g==1) {
Serial.println(d);
}
}
////////////////////////// RECIEVE
if (RX==1){
/*
int incomingByte;
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.print("USB received: ");
Serial.println(incomingByte, DEC);
// Uart.print("USB received:");
// Uart.println(incomingByte, DEC);
}
*/
if (Uart.available() >= 10) {
j+=128;
t=micros();
byte b1 = Uart.read();
Uart.read();
Uart.read();
Uart.read();
Uart.read();
Uart.read();
Uart.read();
Uart.read();
Uart.read();
byte b2 = Uart.read();
d=micros()-t;
Serial.print(b1);
Serial.print(" ");
Serial.println(b2);
Serial.print(" ");
Serial.println(d);
}
if (j>0) {
j--;
digitalWrite(13, HIGH);
}
if (j==0){
digitalWrite(13, LOW);
}
}
}
Here's what I'm getting from the receiving board:

I'm looking at the waveform on my oscilloscope. All 10 bytes are filling about 5 divisions, at 5 us/div. 100 bits in 25 us is 4 Mbit/sec.