Bus Blaster-面向患者发烧友的通用快速bit-bang接口



长期以来,我一直希望拥有一种带有几个输入和输出信号的简单通用的硬件接口,其功能完全由软件来确定,例如令人难忘的PonyProg程序员这样,它不仅可以用作读/写固件,还可以用于通过JTAG调试程序。同时,购买工业产品(我偶尔会宠爱电子产品)是多余且无利可图的-它需要一系列基于bit-bang的“半成品”中的产品

什么是爆炸,为什么需要爆炸
- , Windows 9x (COM) (LPT) . , , . , , . bit-bang, — «», «» ..

2k/XP /, giveio. NT, - .

如您所知,带有大多数硬件端口的现代计算机(尤其是笔记本电脑)并不拥挤,因为大多数用户不需要它们。用于通过RS232和Centronics接口(俗称-COM / LPT)连接设备的USB适配器仅在主要用途的框架内工作良好,并且出于多种原因对它们进行“抽动”是有问题的。首先,这些适配器中的大多数只能以较高的速度处理数据信号(相同的Tx / Rx),并且会以较大的延迟处理控制信号。其次,不同制造商的适配器在硬件方面不兼容,并且通过制造商的驱动程序进行非标准控制的可能性非常有限。第三,几乎所有驱动程序都使用单独的USB数据包向适配器发送命令,这将状态更改的频率限制为每秒仅数千次,对于许多应用而言,这是灾难性的。

幸运的是,FTDI长期以来一直提供一系列USB解决方案,这些解决方案专门针对任意信号的高速交换。对这个问题的快速研究表明,在这方面最受欢迎的是FT232H / FT2232H微电路上的接口

简单的解决方案


最初,FTDI在其USB接口FT232BM,FT232R等中实现了两种附加模式-异步和同步位冲击。为此,添加了八个或更多附加信号线,每个信号线都可以配置为输入或输出。从计算机传输到接口的缓冲数据通过时钟信号设置在输出线上,从该行读取输入数据,进行缓冲并发送到计算机。将I / O绑定到时钟可提供良好的间隔精度-应用程序不再需要以编程方式维护它们。

因此,代替“设置输出线上的有效电平”的传统周期。暂停; 读取输入线的状态;在“设置输出线上的无源电平”上,应用程序将生成一系列字节,每个字节在一个时钟周期内设置输出线的状态。该序列被发送到接口,并从那里读取相同的序列,以反映输入线的状态。在异步模式下,输入和输出彼此独立发生。在同步读取输入之前,必须先在输出端设置信号,然后才能在迅速变化的信号下进行更可靠的工作。

MPSSE控制器


在FTDI芯片的H版本中,添加了多协议同步串行控制器(MPSSE),该硬件实现了各种时钟和数据交换模式。通过向控制器发送一系列内部命令来形成所需协议的信号,这些内部命令指定了时序方法,设置/读取信号的时序(在时钟脉冲的前部或底部),位传输的顺序(LSB / MSB)。控制器发回一系列输入线的“快照”。数据传输速率可以达到30 Mbps。

通过MPSSE,最自然地实现JTAGI2CSPI协议。但是,在控制器的硬件功能范围内几乎可以轻松实现任何“混战”。

FTDI提供大量的文档上的连接和编程及其接口,库和示例程序,通过该MPSSE工作于Windows,Linux和MacOSD2XX驱动程序使用该界面的直接互动。

FTDI接口由受欢迎的节目支持OpenOCD的UrJTAGFlashROM中AVRDUDEHappyJTAG2zJTAG等。

连接性问题


在去年详细了解了所有上述内容之后,我受到启发,但立即发现FT232H / FT2232H具有多种功能,因此不能总是直接连接到最终设备。首先,微电路的外部线路设计为3.3 V的电平,在许多现代设备中,使用2.5 / 1.8 / 1.5 V的电平;其次,输出线路无法以高频率切换到高阻抗状态,反之亦然-仅在初始状态下才有可能通过选择“输入”或“输出”模式来设置行。也就是说,要将具有MPSSE的芯片连接到目标设备,需要一个与信号电平相匹配的缓冲电路,并提供某些输出线的操作关闭(例如,被动TMS信号电平)/ Cs)。

仔细研究缓冲器电路的选项,我发现世界上制造了数量惊人的适配器,仅在该缓冲器中彼此不同。一些程序(但不是全部)允许使用不同类型的缓冲区。因此,选择特定的适配器模型,同时限制了可以使用它的程序范围。为了事先确定类型,有必要再次仔细地搜索并阅读论坛上的讨论,我根本不想这样做。一些适配器允许使用跳线设置缓冲区配置,但这充满了错误,而且价格不菲。

Bus Blaster-声称具有多功能性


关于危险原型的男性想法是最初的两次:第一个-作为连接到FT2232H芯片PLD(CPLD)Xilinx XC2C32A的缓冲器,可以在任何配置下快速对其进行重新编程,第二个-使用其对FT2232H第二个通道进行重新编程。除了实现缓冲逻辑外,FPGA还执行电平匹配-其外部线路工作在1.5-3.3 V范围内。

结果,Bus Blaster板变成了。自项目问世以来,已更换了四个版本的电路板。版本3被认为是最稳定和最广泛的版本,版本4包含一个大型FPGA,该FPGA尚未完全开发,并且使用频率降低。显然,下一个版本将不再存在,因为该项目的开发已于几年前停止。我给人的印象是很少有人真正尝试过该板-潜力巨大,使用起来不太容易。论坛的一部分是为董事会创建的,但是自去年以来,几乎没有任何内容写在那里。

经过反思,我订购了最先进的AliExpress 3c版本,价格为$ 34。然后他们由制造商的商店-Seeed在那里出售,现在只有52美元的经销商出售。直接在Seeed(连同运输)将花费37美元左右。

第一印象


木板看起来与图片完全相同-美丽,整洁,高质量制成。在论坛上,有人抱怨微电路的输出不足,所以我在放大镜下仔细检查了我-没有发现任何缺陷。我之前已经安装了

D2XX驱动程序,因此该主板在旅途中就可以被识别。第一步是处理FPGA中的缓冲区逻辑编程。这是使用UrJTAG程序完成的,但已针对Bus Blaster进行了特殊调整,以正确访问第二个FT2232H通道。

首先,您需要下载并安装UrJTAG基本版本。然后,您需要从该软件包中添加修改后的EXE文件和FPGA(BSDL)的描述。要对嵌入式FPGA进行编程,需要运行修改后的EXE,以与外部设备(主要设备)一起使用。这里描述 FPGA编程过程。为了方便起见,您可以为每个版本的缓冲区的UrJTAG创建脚本,并使用命令行来运行CMD文件来运行它们。

FPGA的集合固件描述兼容缓冲JTAGkeyKT-Link的,并且PicoTap适配器在这里,但BBv3只有一个JTAGkey与自我测试(BBV3-JTAGkey-自检-v1.1.svf)的支持文件。大部分就足够了,但是对Flashrom来说,它对我不起作用,下面将对此进行讨论。

将此固件写入FPGA之后,我按照文档中的说明在连接器中插入了跳线,以将P28线(IO09)接地,从而使主板上的LED点亮。我下载并启动了测试程序 -它显示一切正常。

顺便说一句,自检程序被称为“ BusPiratev2Test”很奇怪,因为Bus Pirate是一个完全不同的项目,与BB不兼容

起初,我通常认为该固件用于自测,而对于“军事”应用则需要某种其他类型的固件,因为描述中有些内容听不见。然后我发现固件是通用的,只是通过短路P28打开其中的测试模式 到地面。

尝试定位


一旦你已经下载从这里(现在有,唉,404)的FlashROM v0.9.6.1-r1704 / Win32的,和封离着某种死主板芯片MX25L8005(的SPI),试图读取它的命令行“上-p ft2232_spi:类型=“ busblaster ”。但是,flashrom表示找不到FT2232。阅读文档显示,它只能通过libusb进行工作-libusb是一个通用接口库,最初是在Linux下编写的,然后移植到Windows下。

通过libusb,他找到了接口,但顽固地声称他没有看到微电路。在包装盒中发现了带有死灵症的果实的其他SPI芯片-也看不到。示波器戳-TMS激起TCK打开TDO,对TDI保持沉默。一般来说,不是一个单一的浪潮。我将示波器通道同时连接到TCKTDO-信号清晰同步地变化。尚无关于可以验证的想法。

连接到ATTiny13接口的flashrom暂时放弃了实验。下载这里的几个不同的版本AVRDUDE,与版本5.11,Patch7610 / Win32的和编程的类型2232HIO最终得到了清晰的控制器识别,读写信息。欣喜之后,他重新连接了SPI芯片,但flashrom顽固地拒绝识别它们。

怀疑这两个微电路都死了,他拔出了USBASP 2.0,将其与AsProg互换使用-他读取它们都没有问题(尽管速度很慢)。顺便说一句,我一般买了三个USBASP来充当ATMega8上方便的原型板的作用,但是该设备竟然是多功能的。

我再次将微电路连接到BB,并开始以不同的分频器值(-p ft2232_spi:type = busblaster,除数= n)在不同模式(Bus Blaster和JTAGKey)下尝试flashrom突然,在其中一种组合中,微电路被识别,但已经拒绝阅读。再经过几次尝试后,标识也消失了。然后几次可以连续获得多个成功的标识,但从未实现读取。

发表在论坛上,但没有得到任何回应。经过搜索后,我发现了几个人对通用(带有自检)FPGA固件的抱怨,然后在那里找到了另外三个固件版本,并与其他参数进行了不同组合的尝试,但没有成功。在用尽所有选项之后,他放弃了实验,直到逻辑分析仪的到来命令了后来的BB。

用分析仪测试


他收到了流行的Saleae Logic 16逻辑分析仪克隆后,将其连接到所有四个SPI线该程序可在Saleae网站上免费获得,可以解密I2C,SPI和其他几个程序,因此它立即显示出所有数据包的解密-发送和接收。显而易见,这些数据包是“浮动的”-程序将相同的位序列一遍又一遍地分组为位于不同边界的数据包。 将微电路数据表上的信号图与记录的电路图进行比较,在某些时候,我注意到TMS信号(连接到CS引脚

)在每个交换会话开始时,它会降至一个低(活动级别)并保持不变,尽管根据协议,它应在每次操作结束时返回至一个高(被动)级别。我将FPGA的“官方”固件更改为另一种固件-TMS开始更积极地移动,在其上对齐数据包的边界,并在flashrom命令行中选择了时钟分频器(在8处停止)之后,微电路终于开始清楚地响应每个请求,进行读取和覆盖。

令我感到惊讶的是,我没有立即对TMS的行为给予应有的关注,我意识到,我对在同一FPGA固件上成功使用AVR感到困惑。查看ATTiny13数据表,我发现RESET信号TMS启动)在整个交换时间内,它可能很低;不需要同步上升。SPI芯片需要它的崛起才能实现同步。

经过测试,我在一个论坛帖子中汇总了有关三种著名的FPGA固件的信息

FPGA重写限制


在一个讨论中,我遇到了一个警告,即重写此FPGA固件的保证周期数仅为大约一千。一开始我很沮丧,因为在实验期间我设法更换了大约一百次固件,并且已经想象到芯片即将死掉。它只花一分钱,但我不想弄乱焊接。然后他意识到,采用适当的方法,剩下的九百个周期将足以满足更多年的需求。

路由器中ROM的在线刷新


一段时间后,我在RT5350F上以代码名称“ ZLMNet H-G5 / P8201”(从Web界面获得的名称)形成了一个新鲜出炉的微型路由器。大约在同一时间,SOIC8 / SOP8的剪辑也到了-我决定尝试使用ROM进行在线工作。

起初,flashrom根本没有通过BB看到EPROM。示波器显示,在CSCLK信号电平方面,处理器始终打败了FPGA与路由器处理器之间斗争。不足为奇的是-在FPGA端子和连接器之间的BB中,存在限流电阻器,可避免烧毁低电流FPGA按键。

我将USBASP与AsProg相连-这是正常的读/写操作,但是又很慢(读取9分钟,擦除-写入-检查周期25分钟)。对于砖的一次振兴,仍然可以接受,但是对于固件不稳定的实验,它不再存在。而且,AsProg不知道如何处理单个页面-仅适用于整个微电路。

我焊接在BB TMS / TCK输出EPROM CS / CLK输入之间,用于发射极跟随器-信号立即达到几乎正确的电平,即flashrom芯片被识别,开始自信地进行读取/写入。除数为8时,完整读取所需的时间少于一分钟,重写所需的时间约为2分钟。

事实证明,编程器与EPROM的通信完全不会干扰处理器-路由器工作正常。显然,CS / CLK线仅分配给EPROM,在启动时会读取一次,如果您不按常规方式开始刷新,则处理器将无法访问它。

BB程序的缺点


可以与MPSSE一起使用的经过测试的程序(zJTAG,flashrom,avrdude,UrJtag,OpenOCD)给人留下了非常可悲的印象。首先,在大多数此类程序中,对于所有各种FTDI适配器,都没有明确指示VID / PID-已知适配器的标识符硬编码到代码中。但是对于模拟BB的JTAGkey,PID设置为CFF8,对于“纯净”的FT2232H它将PID设置为6010。当然,您可以使用FT_Prog更改BB 中的标识符,或者在程序中对表进行修补,但是两个选项均存在差异。好吧,我设法找到了一个Flashrom版本,该版本具有为Windows编译的BB支持(否则我必须安装CygWin),并且在指定2232HIO编程器类型时avrdude可以正常工作

其次,某些程序只能通过libusb与适配器一起使用,libusb又通过其自己的驱动程序来工作,该驱动程序与FTDI驱动程序不兼容。很好的做法是,在Windows中,无需在驱动程序之间进行切换即可完全删除其中的一个并安装另一个驱动程序-您只需通过为给定设备(通道A或B)强制选择正确的驱动程序来对其进行“更新”即可。

发现


现在,回想起在所描述的所有实验中所花费的时间和精力的累积量,我了解到外部优雅的价格和该解决方案的表象普遍性令人望而却步。我还把这段时间花在主要工作上-我将获得一些认真的工业程序员和调试员。但是毫无疑问的是,这样的练习至少可以使您避免最终滑入现成的定制模块的净消耗中,中国人大量提供了这些模块。从这个意义上讲,有可能使古代和中世纪的工程师羡慕不已-几十年来,他们可以热情地解决很久以前在附近数千公里内解决的问题,而他们却一无所知。

我们应该在某些可用的路由器上尝试使用OpenOCD和JTAG,但每个人都无法尝试。

危险原型也有较老的Bus Pirate项目在传统的串行模式下,有一块PIC板和一个简单的接口FT232BL。为了与控制器通信,使用常规终端和文本命令,答案也以文本形式显示。avrdude,flashrom和许多其他程序也可以通过BP工作,但是,由于明显的原因,速度要低几倍。应用程序的广泛性弥补了低速度的不足-使用BP仿真各种协议有很多选择。

考虑到这一辈子您需要尝试一切,我订购了BP v3.6带电缆。是的,是的,我记得关于仙人掌上的老鼠以及“明天我将再次去那里”的故事。

Source: https://habr.com/ru/post/zh-CN380531/


All Articles