开源改变世界!!

帮助解码来自专有 vigotec 固件的奇怪消息 #639

推推 grbl 2年前 (2022-10-19) 182次浏览 0个评论
关闭
arkypita 打开了这个问题 on 12 Oct 2020 · 13 条评论
关闭

帮助解码来自专有 vigotec 固件的奇怪消息#639

arkypita 打开了这个问题 on 12 Oct 2020 · 13 条评论

注释

帮助解码来自专有 vigotec 固件的奇怪消息 #639

大家好,我是LaserGRBL的开发者。

我正在尝试使我的程序能够与激光雕刻机 (Vigo VG-L7x) 进行通信,制造商在该激光雕刻机上没有发布规格,甚至没有联系电子邮件,对标准“grbl”进行了一些更改通过插入一些在我看来它们看起来“编码”甚至“加密”的消息来协议。

这导致这台机器只能与他们的软件(这是一块垃圾)交谈,所以人们开始要求我在 LaserGRBL 中支持它(如果可能的话)。

看起来,当雕刻师与他们的标准程序交谈时,除了交换人类可读的 G 代码命令流外,它还会交换一些无法理解的信息,因为它们是经过编码的。

控制板有一个ESP32芯片和一个Atmega32。我认为通信是由与 Atmega32 通信的 ESP32 处理的(他们有标准的 grbl 固件)。

这是此编码通信的一些示例(参见图片或 pastebin)
https://pastebin.com/v3q14rdE

帮助解码来自专有 vigotec 固件的奇怪消息 #639

这些消息会根据特定操作定期发送:连接时、开始发送作业文件之前、作业流结束时等,并激活 ESP32 上的某些内容以使其能够工作。

例如,板子不会在收到每个命令时发送“ok”,而是使用一种状态报告<VSta:2|SBuf:5,1,0|LTC:4095>,通过 Sbuf 编号来告知接收、处理了多少行等。问题是这个报告是仅当您发送一个特殊的加密命令“我正在开始流式传输作业”时才会激活(并且董事会在收到此命令时会发出哔哔声)。

在多个工作会话之间,消息内容总是不同的,但长度相同。
https://pastebin.com/AXz6k3tQ

如果我发送之前的会话消息,雕刻师可以毫无问题地识别它。
了解它是简单编码的(并且是可逆的)还是加密的,真的可以帮助我不浪费时间。

任何想法?
谢谢大家!

帮助解码来自专有 vigotec 固件的奇怪消息 #639 arkypita 更改了标题 直播帮助 帮助解码来自专有 vigotec 固件的奇怪消息 2020 年 10 月 12 日
帮助解码来自专有 vigotec 固件的奇怪消息 #639

这是板子的图片

帮助解码来自专有 vigotec 固件的奇怪消息 #639

帮助解码来自专有 vigotec 固件的奇怪消息 #639
所有者

婚戒 评论 2020 年 10 月 12 日

听起来 ESP32 并没有使用我们的固件。我建议制作一个新的控制器。这会更容易,让您完全控制和未来的升级。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。字符集看起来像 base64,除了使用 : 而不是 +。但是,即使您确实反转了该编码,您仍然必须发现数据的含义。我怀疑这些消息可能是某种质询/响应身份验证方案,用于防止未经授权使用激光。如果有人控制了 20W 无线激光器并引发火灾,那可能会非常危险。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

谢谢两位

是的,我认为他们没有使用您的固件。由于板上同时存在 ESP32 和 Atmega328,我假设 Atmega328 上有标准的 GRBL 固件,ESP 仅充当 Wi-Fi 的接口,也可能用于通过 USB 进行串行通信。

所以我认为架构是 PC <==> USB/WIFI <==> ESP32 <==> Atmega328

他们在 ESP32 中实现了一个固件,该固件部分显示为“透明”(例如 GCODE 流正常发送,以及一些即时命令和实时状态消息)并部分改变了一些东西;吃“ok”消息,以不同形式的消息更改错误消息,添加一个<VSta:2|SBuf:5,1,0|LTC:4095>报告流接收进度的新状态消息(可以用来代替“ok”作为接收确认)以及那些奇怪的编码/加密器措辞。

我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。

乍一看,我也有这种印象,但是尝试使用 base64 对其进行解码会导致无法读取的结果。

这些消息在某些特定场合交换:

  • 当板子打开时
  • 当控制软件连接/断开时
  • 当作业流式传输开始时作为“标题”
  • 作为最后一个 gcode 发送后的“页脚”
  • 在执行最后一个 gcode 时(在董事会的倡议下)处理结束时

我怀疑这些消息可能是某种质询/响应身份验证方案,用于防止未经授权使用激光。

它可能看起来像,但事实并非如此。即使不发送加密命令,您仍然可以发送 GCode 命令并激活激光。

相反,这些消息似乎激活了“模式”。例如,您交换为“页眉”的内容会激活一种“程序中”模式,并且板会发出“哔”声并开始发送<VSta|Sbuf>报告,并在收到“页脚”时停止该模式

帮助解码来自专有 vigotec 固件的奇怪消息 #639

PS:即使我知道这与你的 fw 无关,我还是选择在这里写,因为也许你们中间有人是 ESP32 的小专家,他可以识别出与已经看到的东西有一些相似之处。我希望它不会打扰!

帮助解码来自专有 vigotec 固件的奇怪消息 #639

他们所做的不太可能与 ESP32 处理器特定的任何事情有关。这显然是某种协议喋喋不休。我知道的唯一特定于 ESP 的协议是 ESP-Now,它适用于完全不同的用例——比如智能灯。

一种可能性是他们发明了自己的 base64 变体,并使用它直接传输数据结构值。

由于透明发送似乎有效,可以忽略那个额外的协议吗?

如果不是,特定用例的消息是否始终相同,或者即使您执行完全相同的操作,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中哪些消息值激活哪些模式。你可能已经想到了;我只是为了完整性而提到它。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

你能窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的吗?

帮助解码来自专有 vigotec 固件的奇怪消息 #639
作者

古皮塔 评论 2020 年 10 月 14 日  

由于透明发送似乎有效,可以忽略那个额外的协议吗?

从执行命令的意义上讲,它可以工作,但是由于缺少“确定”响应,因此很难(如果不是不可能的话)将 gcode 流式传输到板上而不会溢出缓冲区,因为您不知道 grbl 何时接收和管理他们,所以你可以发送更多。

获得来自董事会的命令/流式反馈(并因此能够实施字符计数协议)的<VSta:2|SBuf:5,1,0|LTC:4095>唯一方法是激活报告,该报告只能通过发送董事会识别为“开始的正确加密字符串”来激活工作流”。

了解这些 VSta、SBuf、LTC 的含义也会很有趣。
我的猜测是:

  • VSta:“Vigo”状态(0 = 空闲,2 = 工作中)。从未见过不同于 0/2 的值
  • SBuf:串行缓冲区状态。第一个数字可能是 esp32 接收到的 gcode 行,第二个是 esp 接收和“吃掉”的 ok\n 数字,第三个数字总是为零(可能是错误计数?我应该尝试发送错误的 gcode)。

如果不是,特定用例的消息是否始终相同,或者即使您执行完全相同的操作,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中哪些消息值激活哪些模式。

我做了一些分析,这就是我所看到的:

  1. 他们交换的加密消息(从 sw 到 fw,反之亦然)总是不同的,没有任何相似的可识别序列/模式。只有消息(相同类型)的长度看起来重复。
  2. 如果我发送一条旧的已知/窥探消息,则该操作被 fw 确认并接受(这对我来说是个好消息!)。即使您继续向他发送相同的旧窥探消息,董事会也会回复与之前的回复消息不同的加密消息。
  3. 如果您尝试将某些字符更改为消息(考虑长度),则董事会将无法识别该消息并且不会回复。

所有这一切让我认为消息是加密的,并且添加了一个 foo/忽略的字符/数字来随机化加密的结果。

幸运的是,在不知道它们的含义的情况下发送已知消息似乎会欺骗接收者。
我将按照您的建议映射消息。

你能窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的吗?

不是那么容易,因为我应该放一些电线,也许在 PCB 上切一些路径。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

我从http://www.vigotec.cn/下载了 VG-L7 和 VG-L7x 的软件。在 VG-L7 zip 文件中,我找到了一个自述文件,上面写着这个

Important for using VigoEngraverL7_v2.32:
    1.Please upload the new firmware 'VigoEngraver_Firmware_V1.3_B20200718.hex' to the control board before using the new VigoEngraverL7_v2.32.
    2.Two methods for upload the new firmware, use VigoEngraverL7_v2.32 or XLoader.exe.
    3.Follow the software manual, if use the VigoEngraverL7_v2.32, click connect, and the firmware will upload automatically!
    4.If you have other control software and want to use it, please upload the standard grbl firmware named 'Standard_Grbl_1.1f.hex'. Or if you have the appropriative firmware just for the control software, upload it !



Detailed description:
    The default firmware of engraving machine control main board is VIGOTEC special firmware. You can only use the VigoEngraveL7 laser engraving machine software you just downloaded to control engraving. There are two firmware files in the software directory, which are special firmware and general firmware. If you want to use other engraving machine control softwares, please update the firmware of engraving machine motherboard to general firmware. If you still want to use the VigoEngraveL7 laser engraving machine software after you updated the general firmware, please update the firmware back to the special firmware. The main board firmware update method is as follows: Click "Settings > Model Select", Click "Upload Firmware" at the bottom left of the dialog box, Click "OK". Then select one of the firmware file you want to update and click "Open", and wait for the firmware to update automatically.
    If you fail to update the firmware with VigoEngraveL7, you can also use XLoader to update the firmware of the control board. Please refer to step 8 of the User-Guide for update method.

这让我认为 ESP32 可能被编程为 USB 和 AVR 之间的透明网关,在 AVR 芯片中有特殊固件。ESP32 可能还具有从 WiFi 到 AVR 的网关的 WiFi 模式。

如果这个想法是正确的,那么可以使用 XLoader 用标准 GRBL 重新编程 AVR,问题就解决了。

Vigo 应用程序有一个屏幕,可将设备恢复为出厂默认设置,如有必要,您可以将特殊固件放回 AVR。

根据我对产品开发团队工作方式的了解,我认为我的猜测很可能是正确的。更简单的 VG-L7 版本可能是第一款产品。他们开发了特殊的 AVR 固件来支持他们的应用需求。后来,当他们想要添加新的支持 WiFi 的版本时,他们保持 AVR 代码与以前相同,并且只添加了支持新功能所需的最小 ESP 功能。他们首先将 ESP32 编程为透明网关,因此他们所有现有的应用程序代码和 AVR 固件都运行不变,然后他们加入了额外的 WiFi 网关功能。

注意:根据我刚刚发现的信息,以下想法可能已经过时。

另一种可能性是将 ESP32 重新编程为真正透明的网关。您可以分阶段进行,如下所示

  • 通过将串行线路连接到两个 USB 串行转换器的 Rx 线路来窥探 AVR 的串行线路,因此您可以验证 AVR 正在接收标准 GRBL 消息并且没有重新编程以需要一些奇怪的东西。
  • 使用 esptool 保存 ESP32 闪存的当前内容,以便在必要时恢复到出厂程序(尽管可能可以在网上找到恢复映像)。如果您无法使用 esptool 与 ESP32 对话,请参阅下面的讨论。
  • 确定哪些 ESP32 引脚连接到 USB 端口和 AVR。你可以用欧姆表做到这一点。如果您需要帮助,我可以提供更详细的说明。
  • 编写一个简单的 ESP32 程序,从连接到 USB 的串行端口读取数据并写入到 AVR 的串行端口。Arduino示例中可能有一个示例草图。如果没有,我可以帮忙。
  • 稍后,如果有用,您可以添加对 SD 卡和 WiFi 连接的支持。

如果 esptool 不起作用,可能是制造商试图让通过 USB 端口重新编程变得困难。我怀疑这是因为他们使用的是 CH330N USB 串行芯片,而不是更常见的 CH340 或 CP2102。CH330N 的引脚太少,无法支持大多数 ESP32 模块用来将 ESP32 切换到编程模式的额外 RTS 和 DTR 引脚。CH330N 有 RTS,但没有 DTR。他们可能有一个聪明的方法让它工作,但你必须尝试 esptool 才能看到。
幸运的是,通过暂时将 IO0 短接到地然后重置 ESP32 很容易强制编程模式。

或者,也可以使用 ESP32 OTA 来更改 ESP32 固件。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

关于窥探,不需要切割痕迹,因为您将在线路中添加额外的接收器,并且可以安全地完成。电线可以焊接到 ESP32 模块上的引脚上。这些引脚大且易于访问。

帮助解码来自专有 vigotec 固件的奇怪消息 #639
作者

古皮塔 评论 2020 年 10 月 16 日  

我无法通信的雕刻机型号是 L7x,它是带 WiFi 的型号,使用VigoWork软件。VigoWork for L7x 的下载包中既没有提供 Atmega 固件,也没有提供 ESP32 固件。

L7 型号有一个标准的 Atmega328 控制器,并使用一个不同的软件(尽管 UI 相似),称为VigoEngraver。尽管自述文件中有说明,但下载中的固件是一个非常标准的 grbl。加载在 Arduino 上的通信没有任何加密包或与 GRBL 的显着差异。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

拥有一个透明的 ESP32 是最简单的事情,除此之外,我还发布了ESP8266 的草图,它充当 telnet 桥接器,只需进行一些修改即可适用于 ESP32。虽然是最简单的选择,但似乎这并不是 VG-L7x 的开发者所走的路

是的,重新编程芯片可能是一个解决方案,但我的目标不是使板与 LaserGRBL 兼容,而是相反(使 LaserGRBL 与该板兼容)。这允许该模型的所有所有者使用 LaserGRBL,而不仅仅是能够重新编程 fw 的“极客”。

幸运的是,我现在取得了不错的成绩。我可以发送“嗅探”的加密消息,并且董事会按预期响应。我相信我可以对 LaserGRBL 进行必要的更改,使其与雕刻机兼容。

此外,我手头的董事会不是我的。它是由购买此雕刻机的 LaserGRBL 用户发送给我的。
在我把它寄回给他之前,我肯定想做一些你建议的事情。

  1. 窥探 AVR 和 ESP 之间的串行线路以查看加密和 VSta/SBuf 消息是否在 esp 或 avr 中完成(我猜是在 esp 中,因为 atmega328 没有可用的程序空间来实现此类功能)但我想检查一下。
  2. 转储 ESP32 固件并克隆到另一个 ESP32(我有一些 esp devkit),这样我就可以将电路板发回并在测试环境中进行测试。

我有电子技能,所以我可以使用欧姆表、焊机等。

关于第 2 点。我从不直接转储/编程 ESP32 芯片(仅使用带有集成 USB 的 devkit)。
芯片通过电阻连接的 CH330N 与 u0TXD 和 u0RXD 连接到 USB 端口。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

那么您是否将 IO0 接地并重置 ESP32 应该足以通过 USB 板端口读取 esp 内容?
抱歉这个 NOOB 问题,IO0 是 23 号的引脚吗?

帮助解码来自专有 vigotec 固件的奇怪消息 #639

明天我会做一些测试,我希望能够克隆固件(如果没有读保护)。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

是的,引导加载引脚是 GPIO0 / 引脚 23。 https://github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection

CH330N 与 u0TxD 和 U0RxD 的连接完全符合预期,并且与串行引导加载程序兼容,因此在复位后保持 GPIO0 为低电平应该允许您连接 esptool。

我想他们在使用标准 GRBL ok 响应协议时遇到了问题 – 就像其他发件人一样 – 在大量具有大量短动作和 S 字更改的激光作业的繁重负载下。如果他们通过 WiFi 导出标准 GRBL 线路协议且延迟不一致,则此类问题可能会特别麻烦。他们可能正在使用 ESP32 进行额外缓冲。SBuf 报告比正常计数更明确,尤其是当您考虑错误情况时。我想知道第三个数字是否与 ESP32 中的额外缓冲有关?如果我正在为 AVR GRBL 设计一个 ESP32 前端,我可能会在 ESP32 内部提供更多的线路缓冲。窥探 AVR 线路并将 ok 流与 SBuf 流进行比较可以为您提供线索。lines-sent/lines-received 的一个问题是它没有直接为您提供有关队列中可用空间/行数的信息。也许队列长度是隐式知道的,并且与两个 SBuf 数字之间的差异进行比较。更好的协议设计是直接报告可用空间,就像 TCP 对“窗口大小”所做的那样。无论如何,您可能会弄清楚他们在窥探方面做了什么。

关于 VG-L7x .zip 下载中缺少固件映像:我怀疑他们将固件映像埋在应用程序中。对于新用户来说,这更不容易出错、不太复杂,并且需要更少的关于如何查找和选择写入固件文件的文档。

Bart 的 ESP32_Grbl 板之一将为该设备提供比所示板更好的控制器,因此,为了感谢您在这里获得的支持,您可以考虑将该建议传递给您的 Vigotech“客户”。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

感谢 Mitch
您关于转储 ESP32 fw 的建议为我指明了正确的方向,并允许我创建系统的副本。这样我就可以进行所有我想要的测试,而不会损坏原始电路板。

第一个测试是让 ESP 与带有来自 gnea/grbl 的标准 grbl 固件的 arduino nano 通信。
一切正常,VigoWork 软件认为它正在与它的电路板对话。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

这确认了 arduino 固件是标准的,并且协议更改(加密消息,不正常等)仅由 esp32 fw 完成。

但是,我认为我不会进一步尝试解码编码消息,因为我认为这必然需要对 sw / fw 进行逆向工程以理解加密方案。一旦我确认机器在每种情况下都正确接受了“间谍”消息,我想我会感到满意,并且我拥有制作 LaserGRBL 伪造 VigoWork 协议所需的所有信息 :-)

再次感谢您的所有建议,我可以关闭线程
最好的问候

喜欢 (0)

您必须 登录 才能发表评论!