MAIX Go Download Speed 串口下载速率扫盲

很多小白误以为串口芯片波特率越高,下载速率越高,有些JS就以此忽悠小白购买板载“高波特率”的串口芯片的开发板,趁机提价,并贬低我们使用“垃圾”CH340,本帖就以实测数据帮助小白认清串口芯片与下载速度的关系,理性购物。


本实验中,我们以1MB大小的固件为例,测试不同USB转串口芯片,在不同波特率下的下载速度。
注意,下载速度与电脑配置,USB端口配置(是否3.0,是否接HUB),都有关系,特别是在虚拟机下测试速度会比物理机慢一半。
本实验测试环境保持了电脑不变,USB端口不变,有较好的说明性。

理论分析

首先我们理论分析下 K210 固件下载速度与串口速度的关系。
下载过程中,有四个瓶颈:1. USB协议速率 2. 串口波特率 3. SPI Nor Flash 擦除速率 4.本身串口下载协议的损耗

  1. 对于USB协议速率,关乎USB转串口芯片本身内核的性能以及接口类型,对于常见USB转串口芯片来说,其内核大多都是48MHz运行的51核(CP2012及CH340都是),其接口都是USB2.0 FS。
  2. 对于串口波特率来说,不同串口芯片支持的波特率有差别,但是实际对下载的影响不大,比如1MB大小的固件,2Mbps 波特率传输时间约5s,3M波特率传输时间约3.3s,相差不到2s
  3. SPI Nor Flash的擦除速度才是下载的最大瓶颈,使用过SPI Nor Flash的朋友都知道它慢得令人发指的擦除速度,参考Flash的数据手册,擦除1MB大小所需时间为12~25s,也就是说,Flash的擦除速度比串口传输速率慢3~6倍,最大的瓶颈在这里。
  4. 下载协议本身的损耗,本身协议有些握手包会有小几秒的损耗,不过这都是固定的损耗。

实测下载时间

上面说了这么多理论分析,我们大致清楚了下载速率的瓶颈在Flash擦除速率上,那我们来实测下下载时间吧!
我们统一使用的是1MB大小的固件。

CH340 (MAIX Bit)

1M波特率下载
time python3 kflash.py -b 1000000 -p /dev/ttyUSB1 maixpy.bin
0.37s user 0.62s system 2% cpu 37.877 total

2M 波特率下载
time python3 kflash.py -b 2000000 -p /dev/ttyUSB1 maixpy.bin
0.39s user 0.45s system 2% cpu 33.150 total

CP2102下载 (独立串口板)

921600波特率(CP2102只支持特定波特率列表,不支持1M波特率,所以这里使用921600测试)
time python3 kflash.py -b 921600 -p /dev/ttyUSB1 maixpy.bin
0.34s user 0.19s system 1% cpu 36.742 total

1.5M波特率(CP2102只支持特定波特率列表,不支持2M波特率,所以这里使用1.5M测试)
time python3 kflash.py -b 1500000 -p /dev/ttyUSB1 maixpy.bin
0.37s user 0.17s system 1% cpu 32.283 total

STM32下载 (MAIX Go)

921600波特率
time python3 kflash.py -b 921600 -B maixgo -p /dev/ttyUSB1 maixpy.bin
0.36s user 0.16s system 1% cpu 39.614 total

2M 波特率
time python3 kflash.py -b 2000000 -B maixgo -p /dev/ttyUSB1 maixpy.bin
0.35s user 0.18s system 1% cpu 33.687 total

3M 波特率
time python3 kflash.py -b 3000000 -B maixgo -p /dev/ttyUSB1 maixpy.bin
0.35s user 0.18s system 1% cpu 31.023 total

实验结果分析

我们对比同款下载器,在1M和2M下的下载时间,发现普遍只提升了5秒左右,相对于整体的35s,只提升了14%,并不是小白想当然的认为节省50%的时间。
而对于2M到3M的时间提升,更是只有2s左右的提升,相对于整体33秒,只有6%的提升

而且经过我们多次重复试验,发现由于下载协议本身的损耗,多次下载的时间误差会有±2s左右的误差,也就是说通过串口速率节省的时间,可能还补不上协议的损耗。。

由此可见,在1M以上波特率下载时,波特率本身对下载速度影响有限,最大的瓶颈在于SPI Nor Flash的擦除速度。使用高速波特率作为宣传,只是JS为了提升价格的借口,这是为我们所不齿的。

如何高速下载调试程序?

上面已经分析了通过串口速率提升下载速率是不太可能了的,那如何提升下载调试效率呢?
答案是使用JTAG接口直接下载elf文件或者模型。
Sipeed的MAIX Go开发板板载了JTAG+UART 下载仿真器,既可串口下载(同样支持3M波特率)至Flash,又可以支持JTAG高速直接下载入片内RAM调试。
因为JTAG是直接下载到片内RAM,没有Flash擦除时间,加上高达8Mbps的JTAG速率,1MB的固件在短短数秒既可下载完毕,这才是提升下载调试速率的正确打开方式。

如果没有购买MAIX Go,也可以购买Sipeed的RV调试器,同样也是JTAG+UART的形式,可以实现JTAG下载调试程序。
Sipeed已切换企业店铺到: https://shop365481095.taobao.com/index.htm 18

后记

Sipeed 前身 荔枝派,一直致力于做性价比开发板,让广大学生都能用得起高端前沿开发板。
该用料的时候用料,该节省的时候节省,不为了设计而设计,更不为了提价/吹嘘 而盲目使用无实际意义的物料。

像我们的荔枝派Zero,一直使用的Molex接插件,却从不以此吹嘘宣传,而反观有些厂家却以此吹嘘,并贬低常用国产TF卡槽为“垃圾”卡槽,贬低CH340为“垃圾”芯片,实在匪夷所思。
在这里,我要告诉大家的是,国产器件也在崛起,现在不是10年前,看到国外牌子就要跪舔的时代;
我们的荔枝派Zero,就有德国客户的定制版,他们就弃用Molex接插件,而使用了普通国产自弹式TF卡槽,理由是便宜,同样好用,符合外壳高度限制。

我们要务实地进行器件选型,而不是跪舔国外品牌;
我们要做的是开发板界的“小米”,而不是坑小白的“8848”

发表评论