体验背景
对于单片机来讲,串口通信是比较方便的接口了,打印log什么的不需要自己写上位机,网上串口助手一大把,随便找个就行,比较适合嵌入式项目的前期调试使用。
但是,随着嵌入式芯片的速度不断提高,产生的log越来越多,串口也需要比较高的速度,前段时间给mcu的串口终端通信压力测试时候,用国产山寨pl2303
把速度设到921600
才能给mcu一点压力。
并且新的项目需要更加快速的log速度,于是我开始寻找更加快速的串口。首先想到的是以前玩px4
时候用的ft232
高贵的三十多块钱的串口,速度好像3m左右来着,当年也没什么特殊需求,也没在速度这边做研究。于是打开FTDI的官网,发现最大速度12m,而且还有更加高贵的版本,70多块的ft4232
,相当于4个ft232
的版本。更加新一代的产品ft4233
在当前(2020/5/1)还没有发售,比ft232
支持了typec的pd功能(其实这个更符合我的需求,奈何淘宝没有,之后联络供应商可能会有其他回答)
体验(踩坑)历程
- 淘宝卖家发来的是没有焊接引脚的版本,对于我这种手残党,直接翻车。


清晰可见电容扭曲,因为我焊接引脚时候焊锡落在在电容上,两个电容是我后焊上去的,折腾了好久。如果不是测试用,强烈不建议
购买这种,做工很差,pcb特别薄,而且明显的拼版,掰开后没打磨,在从usb拔出时候极易割伤手指(我已经被割伤了)。四周尖角,扎人。非要买的话,建议一起买个锉刀,打磨下。
2. 驱动的话,windows 10
和manjaro linux
基本都能自己驱动,不用折腾,连接在PC上4个COM口,linux的话lsusb
出现一个设备,/dev/ttyUSB
出现4个,在我这边测试都是从小到大对应ABCD,没有出现反人类情况。
3. 新的FTDI芯片可以通过FT PROG
对eeprom进行配置。这个软件只能windows
运行。

这个软件在点击扫描时候有可能闪退(比如我这),通过上面命令行执行SCAN
命令,可以看到错误

对这个错误进行搜索,可以查询到这是一个已知的问题,https://www.ftdicommunity.com/index.php?topic=39.0
简单来说就是和我的鼠标冲突(因为我键盘使用ps2接口,不使用USB HID协议),于是拔下鼠标,按F5
然后再把鼠标插上就可以正常工作了,这里根据需要设置即可,不过感觉设置没什么作用,可能是因为我还没有测试D2XX
接口。
4 通过串口助手进行发送测试,波特率直接测试12000000
,通信没什么问题,回环和逻辑分析仪都没什么问题,但是循环发送速度特别慢,约几kb/s,让人难以接受,在网络上搜索没什么有效的结果,于是上逻辑分析仪进行测试。


可以看到每次传输都是比较快的,但是在中间等待了很长时间才进行下一次传输,于是猜测串口助手影响,使用golang写(抄)了如下测试代码。
package main
import (
"flag"
"github.com/tarm/goserial"
"github.com/larspensjo/config"
"os"
"log"
)
var (
conFile = flag.String("configfile","/config.ini","config file")
)
var TOPIC = make(map[string]string)
func main() {
file, _ := os.Getwd()
cfg, err := config.ReadDefault(file + *conFile)
id, err := cfg.String("COM","COMID")
baud, err := cfg.Int("COM","BAUD")
c := &serial.Config{Name: id, Baud: baud}
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
data := []byte("0")
for i:=0; i< 1000000; i++ {
_, err := s.Write(data)
if err != nil {
log.Fatal(err)
}
}
}
[COM]
COMID=COM17
BAUD=12000000
依旧间隔很久,肉眼可见的等待时间,怀疑驱动层或者goserial
或者windows系统对串口处理有问题(linux尚未测试,c语言串口也需要测试一下),于是对每次传输字节数量进行增加,得到下面波形,可见大数据是可以高速通信的。


接收的话12m的波特率没什么问题,可以正常看到数据,没发现丢包情况,不过看串口助手cpu占用率挺高,快占满一个核心了,估计自制串口通讯工具时候也需要注意这一点,把串口接收单独一个线程,防止丢数据。
启动电平时间
这方面应该跟板载电容大小有关,但是作为淘宝货,应该也是直接抄的公版电路,所以对启动电平的测量也能在一定程度上说明一定问题,对今后串口下载电路的实现可以起到一定的借鉴作用.因为这个板子没有usb的电压接口,只能采取测量ldo的3v3输出.

可以看到上电初期时序,做下载电路的话,dtr时间最长.适合作为rst使用.大约40us左右,rts可以作为类似与stm32的boot0一样的存在,用于选择引导位置.