user5095: what is the fastest serial read the Mega can do?
begin.Serial1(1024000) is accepted for compiling, but reading jibberish
any suggestions on a faster device?

user3825: It depends mainly on CPU frequency, see USART/Baud rate settings in datasheet. For example at 16MHz it might go up to 2Mbps. But you need also consider error in baudrate which is important if communication with "3rd party" device.

user60: The Arduino Mega 2560 runs at 16 MHz. There are online calculators making this easy, as the calculation is not a straight and simple formula.
http://wormfood.net/avrbaudcalc.php
which shows using 16 MHz




Baud Rate
UBRR(dec)
UBRR(hex)
% of error




300
3332
0x0D04
0.0


600
1666
0x0682
0.0


1200
832
0x0340
0.0


2400
416
0x01A0
0.0


4800
207
0x00CF
0.2


9600
103
0x0067
0.2


14400
68
0x0044
0.6


19200
51
0x0033
0.2


28800
34
0x0022
0.8


38400
25
0x0019
0.2


57600
16
0x0010
2.1 - Barely OK


76800
12
0x000C
0.2 - GOOD


115200
8
0x0008
3.7 - BAD


230400
3
0x0003
7.8 - BAD


250000
3
0x0003
0.0




Where it is noticeable that the Mega's Arduino boot loader uses
mega.menu.cpu.atmega2560.upload.speed=115200

which is above the acceptable 1% error rate.
While it is possible to support different baud rates than stated above, it is not advisable, as the above values are the standard values. Values in between are very atypical and likely not trustworthy on the corresponding other side of the connection.
As I see your above example is 1024000, it is also worth noting that HardwareSerial.cpp implements a method to convert the requested baud rate to configuration of the USART, and I would not necessarily trust it for non-standard baud rates, especially on older version of the Arduino IDE. You may want to try the latest 1.5.8+ and verify the rate.

5095: <p>what is the fastest serial read the Mega can do?
begin.Serial1(1024000) is accepted for compiling, but reading jibberish</p>

<p>any suggestions on a faster device?</p>
 3825: <p>It depends mainly on CPU frequency, see <em>USART/Baud rate settings</em> in datasheet. For example at 16MHz it might go up to 2Mbps. But you need also consider error in baudrate which is important if communication with "3rd party" device.</p>
 60: <p>The Arduino Mega 2560 runs at 16 MHz. There are online calculators making this easy, as the calculation is not a straight and simple formula.</p>
<p><a href="http://wormfood.net/avrbaudcalc.php" rel="nofollow noreferrer">http://wormfood.net/avrbaudcalc.php</a></p>
<p>which shows using 16 MHz</p>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th style="text-align: right;">Baud Rate</th>
<th style="text-align: right;">UBRR(dec)</th>
<th style="text-align: right;">UBRR(hex)</th>
<th>% of error</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: right;">300</td>
<td style="text-align: right;">3332</td>
<td style="text-align: right;">0x0D04</td>
<td>0.0</td>
</tr>
<tr>
<td style="text-align: right;">600</td>
<td style="text-align: right;">1666</td>
<td style="text-align: right;">0x0682</td>
<td>0.0</td>
</tr>
<tr>
<td style="text-align: right;">1200</td>
<td style="text-align: right;">832</td>
<td style="text-align: right;">0x0340</td>
<td>0.0</td>
</tr>
<tr>
<td style="text-align: right;">2400</td>
<td style="text-align: right;">416</td>
<td style="text-align: right;">0x01A0</td>
<td>0.0</td>
</tr>
<tr>
<td style="text-align: right;">4800</td>
<td style="text-align: right;">207</td>
<td style="text-align: right;">0x00CF</td>
<td>0.2</td>
</tr>
<tr>
<td style="text-align: right;">9600</td>
<td style="text-align: right;">103</td>
<td style="text-align: right;">0x0067</td>
<td>0.2</td>
</tr>
<tr>
<td style="text-align: right;">14400</td>
<td style="text-align: right;">68</td>
<td style="text-align: right;">0x0044</td>
<td>0.6</td>
</tr>
<tr>
<td style="text-align: right;">19200</td>
<td style="text-align: right;">51</td>
<td style="text-align: right;">0x0033</td>
<td>0.2</td>
</tr>
<tr>
<td style="text-align: right;">28800</td>
<td style="text-align: right;">34</td>
<td style="text-align: right;">0x0022</td>
<td>0.8</td>
</tr>
<tr>
<td style="text-align: right;">38400</td>
<td style="text-align: right;">25</td>
<td style="text-align: right;">0x0019</td>
<td>0.2</td>
</tr>
<tr>
<td style="text-align: right;">57600</td>
<td style="text-align: right;">16</td>
<td style="text-align: right;">0x0010</td>
<td>2.1 - Barely OK</td>
</tr>
<tr>
<td style="text-align: right;">76800</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">0x000C</td>
<td>0.2 - GOOD</td>
</tr>
<tr>
<td style="text-align: right;">115200</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">0x0008</td>
<td>3.7 - BAD</td>
</tr>
<tr>
<td style="text-align: right;">230400</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">0x0003</td>
<td>7.8 - BAD</td>
</tr>
<tr>
<td style="text-align: right;">250000</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">0x0003</td>
<td>0.0</td>
</tr>
</tbody>
</table>
</div>
<p>Where it is noticeable that the Mega's Arduino boot loader uses</p>
<pre><code>mega.menu.cpu.atmega2560.upload.speed=115200
</code></pre>
<p>which is above the acceptable 1% error rate.</p>
<p>While it is possible to support different baud rates than stated above, it is not advisable, as the above values are the standard values. Values in between are very atypical and likely not trustworthy on the corresponding other side of the connection.</p>
<p>As I see your above example is 1024000, it is also worth noting that HardwareSerial.cpp implements a method to convert the requested baud rate to configuration of the USART, and I would not necessarily trust it for non-standard baud rates, especially on older version of the Arduino IDE. You may want to try the latest 1.5.8+ and verify the rate.</p>
