格拉斯哥:苏格兰电子军刀

2020-08-10 06:02:49

让我们聊聊吧!我们的IRC频道是#Glasgow at freenode.net;我们的不和谐频道是#Glasgow at 1BitSquared‘s Discorde服务器。

格拉斯哥是一个探索数字接口的工具,面向嵌入式开发人员、逆向工程师、数字档案员、电子爱好者以及其他任何希望以高可靠性和最小麻烦与各种数字设备通信的人。它可以连接到大多数设备,而无需额外的有源或无源组件,并且包括针对意外条件和操作员错误的广泛保护。

格拉斯哥硬件可以支持许多数字接口,因为它使用可重新配置的逻辑。它不是只提供少量标准硬件支持的接口选择,而是使用FPGA动态适应手头的任务,而不会影响性能或可靠性,即使是不寻常的、自定义的或过时的接口也是如此。

格拉斯哥的软件是一组构建块,旨在消除附带的复杂性。每个接口都打包成一个自包含的小程序,可以直接从命令行使用,也可以作为更复杂系统的一部分重复使用。使用Glasgow不需要任何编程知识,但是如果您了解一点Python,它会变得更加强大。

使用雅马哈OPLx/OPM芯片合成声音并在网页上实时播放,

上面的一切只需一块格拉斯哥RevC电路板,一些电线,以及根据被测设备的不同,外加电源就可以完成。

格拉斯哥的硬件会随着时间的推移而发展,每一个重要的里程碑都被称为修订版。尽管所有版本现在和将来都支持相同的软件,但它们的功能差别很大,所选的版本将限制可能的任务。

格拉斯哥电路板使用revXN格式的版本,其中X是修订号(在重大设计更改时增加),N是步进号(在任何布局或组件更改时增加)。例如,revC0是修订版C的第一步。

修订版A和B的制作数量不多,包含主要的设计问题,因此大多具有历史意义。然而,每个拥有Reva/Revb板的人都可以继续使用它们-永远。

修订版C是最新的修订版,正在为批量生产做准备。它提供16个I/O引脚,最大数据速率约为。200 Mbps/针(100 MHz)*、独立方向控制和独立可编程上拉/下拉电阻。I/O引脚分为两个I/O端口,每个I/O端口可以使用1.8 V到5 V的任何电压,检测和监控被测设备的I/O电压,并提供高达150 mA的电源。该主板使用USB 2供电、配置和通信,可实现高达336 Mbps(42 MB/s)的持续组合吞吐量。

*实际可实现的最大数据速率取决于许多因素,并且会因具体的接口和小程序设计而大不相同。只需最少的开发工作即可实现12 Mbps/针(6 MHz);要达到更高的数据速率,需要仔细的HDL编码和对时序分析的深入理解。

格拉斯哥完全用Python3编写。运行在FPGA上的接口逻辑使用nMigen描述,nMigen是一种基于Python的领域特定语言。在主机PC上运行的支持代码是用带有异步的Python编写的。这样,FPGA上的逻辑可以针对任何请求的配置按需组装,使其尽可能快速和紧凑,并且可以在网关软件和软件之间共享代码,从而消除了添加容易出错的胶水样板的需要。

格拉斯哥没有开源的iCE40 FPGA工具链是不可能的,它不仅非常可靠,而且速度极快。它的速度如此之快,以至于FPGA位流不会被缓存(除了不重建设备上已有的位流),因为对于UART之类的东西,从零开始构建一个位流只需要几秒钟。在开发新的applet时,很少需要等待工具链。

实现可靠、高性能的USB通信绝非易事-打包、缓冲和USB怪癖加在一起。格拉斯哥抽象了USB:在FPGA上,小程序网关写入FIFO或从FIFO读取,而在主机上,小程序软件写入或读取类似套接字的接口。惯用的Python代码可以在现代PC上以最大USB2批量带宽进行通信,而不需要额外的工作。此外,当未来的格拉斯哥版本除了使用USB之外还将使用以太网时,将不需要更改小程序代码。

调试新的小程序可能很困难,特别是在涉及双向总线的情况下。格拉斯哥提供内置的精确周期逻辑分析仪,可以将I/O引脚电平和方向变化与小程序接收和发送的命令和响应相关联。逻辑分析仪压缩波形,如果其缓冲区即将溢出,则可以暂停小程序。

许多人报告了与下面的安装说明有关的各种问题。如果其中有任何部分不起作用,请将其作为bug进行归档,以便让每个人的体验更加流畅。

您将需要Git和Python3.7(或更新的版本,在这种情况下,请将3.7替换为下面的版本)。在Debian或Ubuntu系统上,可以使用以下命令进行安装:

您还需要来自主分支的yosys和nextpnr-ice40。按照Yosys和nextpnr的设置说明进行操作。

将您的系统配置为允许非特权访问(plugdev组中的任何人)格拉斯哥硬件:

脚本放在$HOME/.local/bin中,因此一定要将该目录添加到PATH环境变量中;之后,您可以从终端运行Glasgow。除了调整path,还可以使用python3.7m的glasgow.cli。

尽管一流的Windows支持是一个重要的目标,而且格拉斯哥已经可以在Windows上运行,但安装过程还没有准备好。

出厂闪烁指的是为全新的格拉斯哥电路板(您可能刚刚组装好的)分配一个序列号的过程,以及编写一些关键配置选项以让正常的格拉斯哥CLI获取此设备的过程。除非出现严重和异常的EEPROM损坏,否则每个电路板只执行一次此过程。

作为工厂闪烁的前提条件,请按照“如何使用格拉斯哥?”部分中的所有步骤操作。

任何出厂闪存的电路板都必须有一个空白的FX2_MEM EEPROM。如果FX2_MEM EEPROM未完全擦除(所有字节均设置为FF),出厂闪烁过程可能会失败。

将您的系统配置为允许(plugdev组中的任何人)对枚举为Cypress FX2 ROM引导加载程序的任何硬件进行无特权访问:

请注意,此udev规则将影响更多设备,而不仅仅是格拉斯哥,因为Cypress VID:PID对是共享的。

插入新组装的设备。此时,lsusb|grep 04b4:8613应该列出一个条目。假设您正在出厂闪存电路板版本C1,运行:

@Whitequark构思设计,协调项目,实现大部分网关和软件;

格拉斯哥是在0条款BSD许可和Apache2.0许可的条款下分发的。