您尚未登录。

楼主 # 2023-02-28 01:24:50

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

怒开新坑,自制低成本高速USB分析仪(随缘更新)

最近参加了沁恒举办的[RISC-V MCU创新应用大赛](https://www.wch.cn/RISC-V-MCU-competition),虽然很可惜没能在限定的时间内完成所有工作,不过毕竟也做了一些有意义的事情。在deadline来临之际,这里我把之前整理的一些资料和已经完成的部分分享给大家,后续有时间会尽力完成这个设计,争取把BOM成本降低到可以自制的水平,做一个有实用价值的东西出来。
考虑到参加比赛的情况,这里暂时不会把参赛用的代码直接发出来,但后续会提供一个开源版本,希望能够和大家一起讨论相关技术,一起改进现有的设计。
由于楼主工作繁忙,更新进度比较随缘,还请大家见谅。

离线

楼主 #1 2023-02-28 01:51:18

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

既然要做一个USB分析仪,那自然要对它的原理有一个初步的了解,只知其然不知其所以然总归是不好的嘛。

在大多数应用中,USB分析仪也就是一个特殊的逻辑分析仪,通过抓取逻辑信号的方式来获取USB传输的物理层信号,之后通过层层翻译最终得到USB协议包、USB类乃至应用层的信息。当然,相对于一般意义上的逻辑分析仪,USB分析仪有以下几点不同:

  • USB的传输速率和当前的USB模式有关,如果是全速(12Mbps)或者低速(1.5Mbps)的话,普通的逻辑分析仪就可以实现(事实上sigrok等逻辑分析仪上位机已经支持USB全速和低速分析了);但是,高速(480Mbps)还是比较有难度的,这个速率超过了大部分逻辑分析仪可以达到的速度。

  • 从物理层来看,高速USB其实是个比较蛋疼的存在:一方面为了兼容性需要使用3.3V CMOS电平进行握手和一些特定状态的处理,一方面为了传输效率使用了17.78mA的差分电流源,而这两种电平需要两路驱动和接收器在不同状态下进行切换。因此,如果要抓取高速USB信号,也必须要有相应的设计才行。

  • 相对于通用的逻辑分析仪,USB传递的数据基本上是遵循一些上层协议的(如USB类),所以分析得到的数据时最好也要整理为相应形式以呈现给开发者,否则由于USB数据量大于大部分常见协议,可能会造成分析上的困难。

除了抓取物理层信号分析的方式,其实我们还有其它方式可以分析USB,比如在计算机上使用软件(例如Bus Hound等)进行抓包。实际上,软件抓包在大多数场合都要比USB分析仪好用,毕竟在计算机上更容易实现数据过滤和分析,但是,在有些场合,USB分析仪还是无法替代的:

  • 最典型的情况是在嵌入式开发USB主机相关应用。在嵌入式中,通常难以使用软件抓包的方式来分析,即使能够通过输出log等方式获取一些简略的信息,但终究无法反映所有的信息。

  • 对于USB无法正常使用的场合,USB分析仪能够抓取错误的波形和数据,而软件抓包只能在驱动层进行操作,对于USB控制器自动过滤或者忽略的情况则毫无办法。一个典型的例子是,Windows在获取描述符失败后无法识别设备,因此在驱动层面无法给出具体的错误信息。

  • USB分析仪可以抓取更精确的信息,例如时间戳等。由于驱动层给出的信息可能不准确(比如说驱动层反馈信息的时间有延迟),这个时候就需要USB分析仪补充相关信息了。

  • USB分析仪可以在一些特殊情况下使用,例如系统启动时、休眠时等。

考虑到USB分析仪的使用场景,我们通常可以假定其不需要分析物理层的内容,可以从协议层开始看起。那么,一个完整的USB分析仪系统,就可以分为以下这三个部分:

  • USB信号采集,也就是把抓取到的物理层信号翻译为USB协议包,并且附加一些信息(如时间戳等)。

  • USB数据转发,一般是把采集到的USB协议包传输到上位机,当然也可以保存下来之类的。

  • 上位机分析,也就是把USB协议包翻译成方便人类阅读的方式,从而高效的定位和分析问题。

不考虑USB物理层的原因不外乎以下几点:

  • 这部分内容以分析信号传输质量为主,通常由专业仪器测定,一般只有IC和PCB设计时会考虑,程序猿不用头疼这个事情。

  • 高速USB的鲁棒性其实挺强的,你想想一般情况下接个几米的线都没问题,如果不是板子画得太离谱,一般不需要往这个方面去考虑问题。

  • 退一步说,就算高速USB出问题,一般情况下都会回退到全速,这个就真的是“拉通了就能用”的程度,以USB堪比Windows的兼容性来看,只要全速USB能工作,剩下的问题应该就容易定位了。

luna-r04-top-preliminary.jpg

LUNA(现在硬件部分改名为Cynthion)就是一个完整的USB分析仪实现,也是本文的主要技术参考和灵感来源。可以从官方网站Cynthion - Great Scott Gadgets获取更多信息。

USB分析仪有一点和逻辑分析仪很像:作为调试程序时使用的工具,USB分析仪的上位机是非常重要的,一个成熟可靠的上位机才是吸引大家使用的关键。对于个人来说,开发USB分析仪上位机是一件比较庞杂的工作,好在我们可以搭上开源的快车,像Great Scott Gadgets开源的ViewSB(不得不说这个名字在汉语语境中十分微妙)Packetry都是可以参考的对象。

综上所述,如果要自制USB分析仪,我们至少需要完成以下工作:

  • 设计一套能够抓取USB信号,并将信号传输到上位机的硬件

  • 为这套硬件编写必要的代码,使之可以和上位机通信

  • 在上位机中适配新的USB分析仪

接下来的帖子也将围绕这些工作展开。

离线

楼主 #16 2023-03-07 00:15:21

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@Blueskull

LUNA确实底子挺不错的,这也是主要参考它的原因(这个项目没有参与过哈哈,顶多就是产品的使用者而已)。可惜HDL部分更新缓慢,现在HyperRAM都还没用上,等到USB分析以外的功能都做好估计得等到众筹发货了(是的,前年的众筹发货时间已经推迟到今年年中了),不过倒是已经有不少人已经有板子了(毕竟硬件都全开源了)。
我也有一块LUNA的板子,价格不贵(接近200),作为FPGA感觉性价比尚可。不过如果只是想做个USB分析仪的话,感觉还是有些浪费,所以在考虑做一个低成本方案,只做一件事情的话应该可以把FPGA砍成低容量的型号。

离线

楼主 #17 2023-03-07 00:17:48

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@echo

是的,我这边目前调试USB也是以全速设备为主,逻辑分析仪其实就够用了。之前也用逻辑分析仪找出了不少USB相关的问题。
不过我也在考虑一个问题,如果USB分析仪可以做更高级的事情(比如做USB Class层面的分析),那样的话还是有意义的——因为总有一些情况是没法把USB设备直接接电脑调试的,而一个靠谱的USB分析仪能够以更小的代价解决问题。

离线

楼主 #20 2023-03-07 12:53:40

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

echo 说:

@metro
FPGA可以考虑AGM的AG10KL144H,价格便宜,焊接容易。还有内置64Mbits SDRAM的版本AG10KSDE176。

这个挺适合做高配版本的,加上CH569可以实现功能完整的USB分析仪了,BOM成本可以做到80-100。
不过呢,这次我打算从低配版本做起,先验证下功能再确定高配版本的设计。
这一版计划使用更低端的MCU和FPGA,成本减半应该没啥问题,主要看功能是否满足需要。估计月底可以画好板子,之后看软硬件要调试到什么时候了。

离线

楼主 #22 2023-03-07 23:39:41

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@echo

嗯,所以接下来需要确认下需要使用多少资源,如果AG1280够用的话那当然是最好的(虽然估计只能实现部分功能,buffer长度也比较堪忧),不够用就上更大资源的FPGA呗。
如果没记错的话,LUNA的USB分析仪使用了4K左右的LUT(包括了一个完整的USB控制器,用于连接PC)。不过LUNA实现的功能太少,连基础的USB速度自动识别和时间戳功能都不支持,HyperRAM目前也是闲置的状态。

离线

楼主 #26 2023-03-08 14:53:26

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@bigniudiy

我手头也有LUNA,是之前淘宝那个众筹的版本,从FPGA到上位机都跑过了,ViewSB可以正常抓包,Windows和Linux都能用。这方面有问题可以交流下。
另外,LUNA那个协议栈我也尝试过移植到其它FPGA板子,Sipeed Tang Primer 20K的USB demo就是俺搞的🤣不过导出Verilog这事儿做起来太麻烦,最好还是能用Lattice这样有全套EDA工具的FPGA来玩。

离线

楼主 #27 2023-03-08 14:55:00

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

astankvai 说:

楼主的这个是USB 2.0 HS 还是想USB 3.0?    手上有一个WCH 的 2.0 HS, 2000不到, 性价比还可以。 支持楼主!

目前是抓2.0的信号,有考虑用3.0的USB和上位机连接。
想抓3.0信号的话需要FPGA支持5G的serdes,这个成本就上去了,先不着急吧(反正3.0的spec还没看过(逃

最近编辑记录 metro (2023-03-08 15:18:43)

离线

楼主 #36 2023-03-09 23:39:50

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

david 说:

设计不错 就是内存小 要是能跟sigrok连上 功能会更好些

其实sigrok可能未必是最好的,原因上面有总结过,主要是USB分析仪需要能分层次呈现相关信息。至于其它方案,我想到的比较好的有两种:

  1. 使用已有的开源USB分析上位机,比如上面提到的ViewSB(不过这玩意实在是太半成品了一些),或者是同一个作者正在优化的Packetry。这个比较适合实时捕获,不过功能上还比较简陋,需要优化。

  2. 将数据保存为其它工具可以打开的形式,之后可以进行离线分析。这个我能想到最好的软件是Wireshark,配合相应插件可以实现USB Class级的分析,并且有强大的功能支持(例如正则表达式筛选)。按理来说这个工作量不会很大,不过似乎没有看到过成品。

离线

楼主 #39 2023-03-11 00:42:20

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@Blueskull

其实LUNA也是类似这样的方案,如果去看LUNA的代码(从抓USB信号到转发全都是nMigen写的,哦不这玩意现在应该叫做Amaranth了),就会发现逻辑其实很清晰:抓ULPI信号,加上包长度,一个FIFO给USB控制器,直接往一个端点发数据就完事了。
至于高云的那个SoftPHY 2.0,俺也玩过,确实能跑,但是成本其实不算低(记得单一个PHY至少需要2k的LUT,加上控制器大概4k),也就是说最少需要GW1N-LV4级别的才够用,成本其实比MCU要高一些(CH32V307也就十块出头)。

离线

楼主 #41 2023-03-13 18:03:26

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

曾半仙 说:

考虑下商业软件的上位机 比如totalphase的data center, ellisys的visualusb

目前没有适配商业软件的计划,不过到时候应该会开源全部代码,可以自行适配。

离线

楼主 #42 2023-03-16 00:02:43

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

趁下班时间画了一版,大家猜猜这是什么方案😏
AQUA-Lite.png

离线

楼主 #46 2023-03-16 11:19:25

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

Blueskull 说:
metro 说:

趁下班时间画了一版,大家猜猜这是什么方案😏
https://whycan.com/files/members/1510/AQUA-Lite.png

这是要用PIO做USB PHY?也就是只能测FS/LS咯?

是的,先从简单的做起,熟悉下上位机。
不过这个会按照自己的想法做一些功能,具体的话可以期待一下🤭

离线

楼主 #49 2023-03-20 14:21:25

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

1847123212 说:

@metro
寂寞哥不考虑用agrv2k做一个吗,2k逻辑可能勉强够用

AGRV2K挺可惜的,带了DWC2但接了个只支持到全速的PHY,如果能够把ULPI拉出来就很合适,可以用2K逻辑做很多想做的事情了。

离线

楼主 #50 2023-03-22 12:03:38

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

来个图,有空就开始写代码
IMG_20230321_142531.jpg

离线

楼主 #53 2023-03-22 13:14:27

metro
会员
注册时间: 2019-03-09
已发帖子: 442
积分: 486

Re: 怒开新坑,自制低成本高速USB分析仪(随缘更新)

@echo
主要原因是我手上的AtoC线比其它线都多,插座也是😂当然USB-C也有优势,比如说电源触点多能过大电流(USB-C插座基本上都能过3A),对只有USB-C的笔记本更友好(CtoMicro的线基本上只能另外买),线材质量相对更好(毕竟成本本来就更高)等,正反插毕竟也还是更方便的。

最近编辑记录 metro (2023-03-22 13:16:35)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn