FT4232H体验记录

体验背景

对于单片机来讲,串口通信是比较方便的接口了,打印log什么的不需要自己写上位机,网上串口助手一大把,随便找个就行,比较适合嵌入式项目的前期调试使用。

但是,随着嵌入式芯片的速度不断提高,产生的log越来越多,串口也需要比较高的速度,前段时间给mcu的串口终端通信压力测试时候,用国产山寨pl2303把速度设到921600才能给mcu一点压力。

并且新的项目需要更加快速的log速度,于是我开始寻找更加快速的串口。首先想到的是以前玩px4时候用的ft232高贵的三十多块钱的串口,速度好像3m左右来着,当年也没什么特殊需求,也没在速度这边做研究。于是打开FTDI的官网,发现最大速度12m,而且还有更加高贵的版本,70多块的ft4232,相当于4个ft232的版本。更加新一代的产品ft4233在当前(2020/5/1)还没有发售,比ft232支持了typec的pd功能(其实这个更符合我的需求,奈何淘宝没有,之后联络供应商可能会有其他回答)

体验(踩坑)历程

  1. 淘宝卖家发来的是没有焊接引脚的版本,对于我这种手残党,直接翻车。
正面
背面

清晰可见电容扭曲,因为我焊接引脚时候焊锡落在在电容上,两个电容是我后焊上去的,折腾了好久。如果不是测试用,强烈不建议购买这种,做工很差,pcb特别薄,而且明显的拼版,掰开后没打磨,在从usb拔出时候极易割伤手指(我已经被割伤了)。四周尖角,扎人。非要买的话,建议一起买个锉刀,打磨下。

2. 驱动的话,windows 10manjaro linux基本都能自己驱动,不用折腾,连接在PC上4个COM口,linux的话lsusb出现一个设备,/dev/ttyUSB出现4个,在我这边测试都是从小到大对应ABCD,没有出现反人类情况。

3. 新的FTDI芯片可以通过FT PROG对eeprom进行配置。这个软件只能windows运行。

FT Prog

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

对这个错误进行搜索,可以查询到这是一个已知的问题,https://www.ftdicommunity.com/index.php?topic=39.0

简单来说就是和我的鼠标冲突(因为我键盘使用ps2接口,不使用USB HID协议),于是拔下鼠标,按F5然后再把鼠标插上就可以正常工作了,这里根据需要设置即可,不过感觉设置没什么作用,可能是因为我还没有测试D2XX接口。

4 通过串口助手进行发送测试,波特率直接测试12000000,通信没什么问题,回环和逻辑分析仪都没什么问题,但是循环发送速度特别慢,约几kb/s,让人难以接受,在网络上搜索没什么有效的结果,于是上逻辑分析仪进行测试。

overview
两包数据间隔时间

可以看到每次传输都是比较快的,但是在中间等待了很长时间才进行下一次传输,于是猜测串口助手影响,使用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语言串口也需要测试一下),于是对每次传输字节数量进行增加,得到下面波形,可见大数据是可以高速通信的。

传输大byte
放大一点

接收的话12m的波特率没什么问题,可以正常看到数据,没发现丢包情况,不过看串口助手cpu占用率挺高,快占满一个核心了,估计自制串口通讯工具时候也需要注意这一点,把串口接收单独一个线程,防止丢数据。

启动电平时间

这方面应该跟板载电容大小有关,但是作为淘宝货,应该也是直接抄的公版电路,所以对启动电平的测量也能在一定程度上说明一定问题,对今后串口下载电路的实现可以起到一定的借鉴作用.因为这个板子没有usb的电压接口,只能采取测量ldo的3v3输出.

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