With only a normal baud rate divider, the next step below 6000000 ought to be 3000000.
But Freescale's UARTs have high-res baud rate generation, which is supposed to allow for 32X finer steps. So the possible baud rates should be: (with Teensy at 96 MHz)
6000000
5818182
5647059
5485714
5333333
5189189
5052632
4923077
4800000
4682927
4571429
4465116
4363636
4266667
4173913
4085106
4000000
3918367
3840000
3764706
3692308
3622642
3555556
3490909
3428571
3368421
3310345
3254237
3200000
3147541
3096774
3047619
3000000
If you're trying to use a ESP8266 at maximum possible speed, 4571429 will be the closest to 4608000 baud, with -0.794% error.
Here's an actual test, with Teensy set to 4571429 and my oscilloscope set to decode at 4608000.
View attachment 5072
Code:void setup() { Serial1.begin(4571429); } void loop() { Serial1.print("Hi"); delay(1); // wait for a second }
From the formulas, I was able to figure the baud which divides perfectly, and I picked 4000000 since it is a nice round number.
The ESP8266 will work with any baud rate <= 115200*40, (does not have to be a multiple of 115200) and I tested 4000000 to work, but I think I need to tweak my program some more to get it to work correctly. The hang was not actually a hang, but my program and the esp8266 got unsynchronized (switching between data mode and command mode) and my program was not able to recover.