自制高采样率的逻辑分析仪
smith2022/11/14原创 仪器仪表电子技术 IP:广东
中文摘要
自制逻辑分析仪
关键词
FPGA逻辑分析仪CPLD

为了调一些不同协议的摄像头和热成像模组,需要逻辑分析仪, 在某宝上搜了一下逻辑分析仪, 发现是这样的

logic.png

要么是这样的:

esp.png

前者只需要25元, 而后者需要好几百, 差异是, 前者只有8个通道,采样率24M, 而后者16个通道, 采样率100M以上

8通道24M的采样率。。。 有点聊胜于无的样子, 这样的采样率最多拿来分析一下PWM, I2C、 SPI之类的协议, 但是这些协议又非常简单, 完全没有必要用到逻辑分析仪,而我想要分析的摄像头,LCD的协议, 通常如下:

cam.png

如图是一个摄像头的时序, 需要VSYNC, HSYNC,HREF, D[7:0]... 算下来需要的通道超过8个了,而且像素的时钟也很快, 通常是27M的时钟, 这样不能使用上面几十块钱的那种协议分析仪。


而上面几百钱的那个呢, 又觉得太贵了,性价比不高, 感觉自己都能做一个出来, 于是查了一下这些逻辑分析仪的资料,发现这些逻辑分析仪都是用的一个叫做sigrok的开源软件

1200px-Sigrok_logo.svg.png

这个软件的官网如下:

XXXXXXXXXXXXXXXXXX/wiki/Main_Page

主要提供了两个软件,一个叫做sigrok-cli,  一个叫做pulseview。

研究了一下这种软件的工作方式,sigrok-cli是一个命令行的工具, 可以把二进制的数据转换成pulseview格式的数据,保存成.sr的文件, 然后pulseview打开sr文件, 就可以显示波形了,对于16个通道的逻辑分析仪采集的数据是这样格式的:

低八位 高八位 低八位 高八位 低八位 高八位 低八位 高八位 低八位。。。。。

比如16个通道15个全部接地,D15是1, 那么数据就是:

bin.png

这样的格式, 我们只要把这样的数据保存成文件, 然后用sigrok-cli软件处理, 就得到处理后的文件,处理的命令如下:

sigrok-cli -I binary:numchannels=16:samplerate=1000000 -i input.bin -o output.sr

然后再用pluseview 打开output的文件,就得到了波形图, 如图下面的D15是1

log.png

接着就是个重要的问题了, 我们用什么硬件来快速采集接口的数据呢?

从sigrok的网站上面看到的硬件支持列表, 大部分的都是使用cy7c68031的USB方案

hard9.png

但是如果只使用一块cy7c68031的芯片, 采样率最大只有24M, 因为68031的晶振就是24M的, 如果要支持100M的方案, 需要使用到一块FPGA或者CPLD的芯片,结构如下:

logic.png

如图比较简单, 用FPGA或者CPLD采集到的数据, 直接写到CY7C68013的FIFO, 然后发给电脑,这种方法适合100M到150M的采样率。


但如果采样率要求大于200M, 就需要使用SRAM或者SDRAM,先把数据保存到SDRAM里面, 再慢慢发给电脑, 按道理说也可以用异步fifo芯片,但我没有找到16bit的异步fifo芯片


接着是适合的硬件, 按道理说只要有CY7C68013和CPLD、FPGA的板子都可以,我用的是这个板子

fpga.jpg

这个板子最初在某宝上卖200元, 现在芯片涨价,涨到290元, 有一份原理图,但是不提供PCB图,

不过自己做的话, 价格肯定比290元贵得多。。。

IMG_20221110_221206673_HDR.jpg

除此之外我还有一块CPLD的板子, 架构也是和上面的差不多, 这个板子有原理图和PCB图,

attachment icon 第二版USB_CPLD开发板电路图.7z 10.88MB 7Z 95次下载

有兴趣的同学可以自己去打样, 就是EPM1270这颗芯片因为俄乌战争已经变得很贵了



接着上代码, 代码分为几个部分, 首先是FPGA的数据采集程序,难度在于把数据写进Cy7c68013的SlaveFifo, 接着是Cy7c68013的firmware, 主要是USB枚举, 然后配置成16bit, slavefifo模式, 通过ep6端点把数据报上去


接着是电脑端, 使用68013的平台开发读取usb的代码是需要使用C#,不过我没用过, 所以直接使用libusb的方案, 用python读取libusb的驱动,读取到数据, 在Linux平台和Windows都可以用,Linux什么都不用安装Windows下要使用zadig来做驱动

话不多说, 全部的代码发上来, 基于FPGA板的开发的,改一下可以在CPLD上面跑,但是CPLD是没有PLL的,因此CPLD的时钟需要焊接一个100M的有源晶振

attachment icon fpga_usb_logic.zip 85.15MB ZIP 118次下载


运行的效果如下,采集TVP5150模拟摄像头芯片的数据

show.png

new.png


TVP5150的像素时钟是27M的,输出BT656的格式,采样的频率是100M,从上面可以看出一帧的数据, 100M的时钟采集27M的CLK还是很吃力, 像素时钟看起来不是很规律。如果要看出规律的时钟,需要的采集频率可能需要200M左右


用这个FPGA采集TVP5150的图片如下, 摄像头是一个0.0001lux的低照度摄像头

perf.png



不过千万要注意这种逻辑分析仪是没有IO电平隔离的,如果接入超过3.3V的电压,

可能会把FPGA烧坏


还未完成的工作:

  1. 直接把firmware对接到pluseview上面, 这样就不用额外的驱动和数据转换了, 也可以实时采集

  2. 把SDRAM、SRAM利用起来, 这样就可以用200M以上的采集频率了

  3. 添加电平隔离的硬件

  4. 后续用国产FPGA替代, 这样可以更加减少硬件成本

目前使用FPGA板的成本依然是比买成品逻辑分析仪好的,成品100M, 16bit的价格都在300元左右,还没有SDRAM 。。。


而且这个开发板后续可以用来采集摄像头的数据, 采集ADC的数据, 这些都是逻辑分析仪做不到的




来自:仪器与装备 / 仪器仪表电子信息 / 电子技术
13
11
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
smith 作者
2年0个月前 IP:广东
910457

我把项目传到了这个地址:

XXXXXXXXXXXXXXXXXX/11tools/usb_fpga_logic


引用
评论
5
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith作者
2年0个月前 IP:广东
910579

淦, 这个轮子其实造的价值还是很大的,相对于示波器那样难度和成本较高, 逻辑分析仪还是比较简单的。而且指标和商品差异不大


倒是触发功能可以多研究一下, 另外梦源的程序好像是基于sigrok,但是还是改了很多, 看看能不能找来参考一下

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith作者
1年8个月前 IP:广东
917861
引用量子隧道发表于11楼的内容
多亏你没买后边的。仔细看,16通道时采样率只有16Msps了。

是啊, 就这还要700多

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}