我把项目传到了这个地址:
XXXXXXXXXXXXXXXXXX/11tools/usb_fpga_logic
为了调一些不同协议的摄像头和热成像模组,需要逻辑分析仪, 在某宝上搜了一下逻辑分析仪, 发现是这样的
要么是这样的:
前者只需要25元, 而后者需要好几百, 差异是, 前者只有8个通道,采样率24M, 而后者16个通道, 采样率100M以上
8通道24M的采样率。。。 有点聊胜于无的样子, 这样的采样率最多拿来分析一下PWM, I2C、 SPI之类的协议, 但是这些协议又非常简单, 完全没有必要用到逻辑分析仪,而我想要分析的摄像头,LCD的协议, 通常如下:
如图是一个摄像头的时序, 需要VSYNC, HSYNC,HREF, D[7:0]... 算下来需要的通道超过8个了,而且像素的时钟也很快, 通常是27M的时钟, 这样不能使用上面几十块钱的那种协议分析仪。
而上面几百钱的那个呢, 又觉得太贵了,性价比不高, 感觉自己都能做一个出来, 于是查了一下这些逻辑分析仪的资料,发现这些逻辑分析仪都是用的一个叫做sigrok的开源软件
这个软件的官网如下:
XXXXXXXXXXXXXXXXXX/wiki/Main_Page
主要提供了两个软件,一个叫做sigrok-cli, 一个叫做pulseview。
研究了一下这种软件的工作方式,sigrok-cli是一个命令行的工具, 可以把二进制的数据转换成pulseview格式的数据,保存成.sr的文件, 然后pulseview打开sr文件, 就可以显示波形了,对于16个通道的逻辑分析仪采集的数据是这样格式的:
低八位 高八位 低八位 高八位 低八位 高八位 低八位 高八位 低八位。。。。。
比如16个通道15个全部接地,D15是1, 那么数据就是:
这样的格式, 我们只要把这样的数据保存成文件, 然后用sigrok-cli软件处理, 就得到处理后的文件,处理的命令如下:
sigrok-cli -I binary:numchannels=16:samplerate=1000000 -i input.bin -o output.sr
然后再用pluseview 打开output的文件,就得到了波形图, 如图下面的D15是1
接着就是个重要的问题了, 我们用什么硬件来快速采集接口的数据呢?
从sigrok的网站上面看到的硬件支持列表, 大部分的都是使用cy7c68031的USB方案
但是如果只使用一块cy7c68031的芯片, 采样率最大只有24M, 因为68031的晶振就是24M的, 如果要支持100M的方案, 需要使用到一块FPGA或者CPLD的芯片,结构如下:
如图比较简单, 用FPGA或者CPLD采集到的数据, 直接写到CY7C68013的FIFO, 然后发给电脑,这种方法适合100M到150M的采样率。
但如果采样率要求大于200M, 就需要使用SRAM或者SDRAM,先把数据保存到SDRAM里面, 再慢慢发给电脑, 按道理说也可以用异步fifo芯片,但我没有找到16bit的异步fifo芯片
接着是适合的硬件, 按道理说只要有CY7C68013和CPLD、FPGA的板子都可以,我用的是这个板子
这个板子最初在某宝上卖200元, 现在芯片涨价,涨到290元, 有一份原理图,但是不提供PCB图,
不过自己做的话, 价格肯定比290元贵得多。。。
除此之外我还有一块CPLD的板子, 架构也是和上面的差不多, 这个板子有原理图和PCB图,
有兴趣的同学可以自己去打样, 就是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的有源晶振
运行的效果如下,采集TVP5150模拟摄像头芯片的数据
TVP5150的像素时钟是27M的,输出BT656的格式,采样的频率是100M,从上面可以看出一帧的数据, 100M的时钟采集27M的CLK还是很吃力, 像素时钟看起来不是很规律。如果要看出规律的时钟,需要的采集频率可能需要200M左右
用这个FPGA采集TVP5150的图片如下, 摄像头是一个0.0001lux的低照度摄像头
不过千万要注意这种逻辑分析仪是没有IO电平隔离的,如果接入超过3.3V的电压,
可能会把FPGA烧坏
还未完成的工作:
直接把firmware对接到pluseview上面, 这样就不用额外的驱动和数据转换了, 也可以实时采集
把SDRAM、SRAM利用起来, 这样就可以用200M以上的采集频率了
添加电平隔离的硬件
后续用国产FPGA替代, 这样可以更加减少硬件成本
目前使用FPGA板的成本依然是比买成品逻辑分析仪好的,成品100M, 16bit的价格都在300元左右,还没有SDRAM 。。。
而且这个开发板后续可以用来采集摄像头的数据, 采集ADC的数据, 这些都是逻辑分析仪做不到的
淦, 这个轮子其实造的价值还是很大的,相对于示波器那样难度和成本较高, 逻辑分析仪还是比较简单的。而且指标和商品差异不大
倒是触发功能可以多研究一下, 另外梦源的程序好像是基于sigrok,但是还是改了很多, 看看能不能找来参考一下
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。