注释
听起来 ESP32 并没有使用我们的固件。我建议制作一个新的控制器。这会更容易,让您完全控制和未来的升级。 |
我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。字符集看起来像 base64,除了使用 : 而不是 +。但是,即使您确实反转了该编码,您仍然必须发现数据的含义。我怀疑这些消息可能是某种质询/响应身份验证方案,用于防止未经授权使用激光。如果有人控制了 20W 无线激光器并引发火灾,那可能会非常危险。 |
谢谢两位 是的,我认为他们没有使用您的固件。由于板上同时存在 ESP32 和 Atmega328,我假设 Atmega328 上有标准的 GRBL 固件,ESP 仅充当 Wi-Fi 的接口,也可能用于通过 USB 进行串行通信。 所以我认为架构是 PC <==> USB/WIFI <==> ESP32 <==> Atmega328 他们在 ESP32 中实现了一个固件,该固件部分显示为“透明”(例如 GCODE 流正常发送,以及一些即时命令和实时状态消息)并部分改变了一些东西;吃“ok”消息,以不同形式的消息更改错误消息,添加一个
乍一看,我也有这种印象,但是尝试使用 base64 对其进行解码会导致无法读取的结果。 这些消息在某些特定场合交换:
它可能看起来像,但事实并非如此。即使不发送加密命令,您仍然可以发送 GCode 命令并激活激光。 相反,这些消息似乎激活了“模式”。例如,您交换为“页眉”的内容会激活一种“程序中”模式,并且板会发出“哔”声并开始发送 |
PS:即使我知道这与你的 fw 无关,我还是选择在这里写,因为也许你们中间有人是 ESP32 的小专家,他可以识别出与已经看到的东西有一些相似之处。我希望它不会打扰! |
他们所做的不太可能与 ESP32 处理器特定的任何事情有关。这显然是某种协议喋喋不休。我知道的唯一特定于 ESP 的协议是 ESP-Now,它适用于完全不同的用例——比如智能灯。 一种可能性是他们发明了自己的 base64 变体,并使用它直接传输数据结构值。 由于透明发送似乎有效,可以忽略那个额外的协议吗? 如果不是,特定用例的消息是否始终相同,或者即使您执行完全相同的操作,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中哪些消息值激活哪些模式。你可能已经想到了;我只是为了完整性而提到它。 |
你能窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的吗? |
从执行命令的意义上讲,它可以工作,但是由于缺少“确定”响应,因此很难(如果不是不可能的话)将 gcode 流式传输到板上而不会溢出缓冲区,因为您不知道 grbl 何时接收和管理他们,所以你可以发送更多。 获得来自董事会的命令/流式反馈(并因此能够实施字符计数协议)的 了解这些 VSta、SBuf、LTC 的含义也会很有趣。
我做了一些分析,这就是我所看到的:
所有这一切让我认为消息是加密的,并且添加了一个 foo/忽略的字符/数字来随机化加密的结果。 幸运的是,在不知道它们的含义的情况下发送已知消息似乎会欺骗接收者。
不是那么容易,因为我应该放一些电线,也许在 PCB 上切一些路径。 |
我从http://www.vigotec.cn/下载了 VG-L7 和 VG-L7x 的软件。在 VG-L7 zip 文件中,我找到了一个自述文件,上面写着这个
这让我认为 ESP32 可能被编程为 USB 和 AVR 之间的透明网关,在 AVR 芯片中有特殊固件。ESP32 可能还具有从 WiFi 到 AVR 的网关的 WiFi 模式。 如果这个想法是正确的,那么可以使用 XLoader 用标准 GRBL 重新编程 AVR,问题就解决了。 Vigo 应用程序有一个屏幕,可将设备恢复为出厂默认设置,如有必要,您可以将特殊固件放回 AVR。 根据我对产品开发团队工作方式的了解,我认为我的猜测很可能是正确的。更简单的 VG-L7 版本可能是第一款产品。他们开发了特殊的 AVR 固件来支持他们的应用需求。后来,当他们想要添加新的支持 WiFi 的版本时,他们保持 AVR 代码与以前相同,并且只添加了支持新功能所需的最小 ESP 功能。他们首先将 ESP32 编程为透明网关,因此他们所有现有的应用程序代码和 AVR 固件都运行不变,然后他们加入了额外的 WiFi 网关功能。 注意:根据我刚刚发现的信息,以下想法可能已经过时。 另一种可能性是将 ESP32 重新编程为真正透明的网关。您可以分阶段进行,如下所示
如果 esptool 不起作用,可能是制造商试图让通过 USB 端口重新编程变得困难。我怀疑这是因为他们使用的是 CH330N USB 串行芯片,而不是更常见的 CH340 或 CP2102。CH330N 的引脚太少,无法支持大多数 ESP32 模块用来将 ESP32 切换到编程模式的额外 RTS 和 DTR 引脚。CH330N 有 RTS,但没有 DTR。他们可能有一个聪明的方法让它工作,但你必须尝试 esptool 才能看到。 或者,也可以使用 ESP32 OTA 来更改 ESP32 固件。 |
关于窥探,不需要切割痕迹,因为您将在线路中添加额外的接收器,并且可以安全地完成。电线可以焊接到 ESP32 模块上的引脚上。这些引脚大且易于访问。 |
我无法通信的雕刻机型号是 L7x,它是带 WiFi 的型号,使用VigoWork软件。VigoWork for L7x 的下载包中既没有提供 Atmega 固件,也没有提供 ESP32 固件。 L7 型号有一个标准的 Atmega328 控制器,并使用一个不同的软件(尽管 UI 相似),称为VigoEngraver。尽管自述文件中有说明,但下载中的固件是一个非常标准的 grbl。加载在 Arduino 上的通信没有任何加密包或与 GRBL 的显着差异。 拥有一个透明的 ESP32 是最简单的事情,除此之外,我还发布了ESP8266 的草图,它充当 telnet 桥接器,只需进行一些修改即可适用于 ESP32。虽然是最简单的选择,但似乎这并不是 VG-L7x 的开发者所走的路 是的,重新编程芯片可能是一个解决方案,但我的目标不是使板与 LaserGRBL 兼容,而是相反(使 LaserGRBL 与该板兼容)。这允许该模型的所有所有者使用 LaserGRBL,而不仅仅是能够重新编程 fw 的“极客”。 幸运的是,我现在取得了不错的成绩。我可以发送“嗅探”的加密消息,并且董事会按预期响应。我相信我可以对 LaserGRBL 进行必要的更改,使其与雕刻机兼容。 此外,我手头的董事会不是我的。它是由购买此雕刻机的 LaserGRBL 用户发送给我的。
我有电子技能,所以我可以使用欧姆表、焊机等。 关于第 2 点。我从不直接转储/编程 ESP32 芯片(仅使用带有集成 USB 的 devkit)。 那么您是否将 IO0 接地并重置 ESP32 应该足以通过 USB 板端口读取 esp 内容? 明天我会做一些测试,我希望能够克隆固件(如果没有读保护)。 |
是的,引导加载引脚是 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“客户”。 |
感谢 Mitch 第一个测试是让 ESP 与带有来自 gnea/grbl 的标准 grbl 固件的 arduino nano 通信。 这确认了 arduino 固件是标准的,并且协议更改(加密消息,不正常等)仅由 esp32 fw 完成。 但是,我认为我不会进一步尝试解码编码消息,因为我认为这必然需要对 sw / fw 进行逆向工程以理解加密方案。一旦我确认机器在每种情况下都正确接受了“间谍”消息,我想我会感到满意,并且我拥有制作 LaserGRBL 伪造 VigoWork 协议所需的所有信息 再次感谢您的所有建议,我可以关闭线程 |
古皮塔 评论 on 12 Oct 2020
大家好,我是LaserGRBL的开发者。
我正在尝试使我的程序能够与激光雕刻机 (Vigo VG-L7x) 进行通信,制造商在该激光雕刻机上没有发布规格,甚至没有联系电子邮件,对标准“grbl”进行了一些更改通过插入一些在我看来它们看起来“编码”甚至“加密”的消息来协议。
这导致这台机器只能与他们的软件(这是一块垃圾)交谈,所以人们开始要求我在 LaserGRBL 中支持它(如果可能的话)。
看起来,当雕刻师与他们的标准程序交谈时,除了交换人类可读的 G 代码命令流外,它还会交换一些无法理解的信息,因为它们是经过编码的。
控制板有一个ESP32芯片和一个Atmega32。我认为通信是由与 Atmega32 通信的 ESP32 处理的(他们有标准的 grbl 固件)。
这是此编码通信的一些示例(参见图片或 pastebin)
https://pastebin.com/v3q14rdE
这些消息会根据特定操作定期发送:连接时、开始发送作业文件之前、作业流结束时等,并激活 ESP32 上的某些内容以使其能够工作。
例如,板子不会在收到每个命令时发送“ok”,而是使用一种状态报告
<VSta:2|SBuf:5,1,0|LTC:4095>
,通过 Sbuf 编号来告知接收、处理了多少行等。问题是这个报告是仅当您发送一个特殊的加密命令“我正在开始流式传输作业”时才会激活(并且董事会在收到此命令时会发出哔哔声)。在多个工作会话之间,消息内容总是不同的,但长度相同。
https://pastebin.com/AXz6k3tQ
如果我发送之前的会话消息,雕刻师可以毫无问题地识别它。
了解它是简单编码的(并且是可逆的)还是加密的,真的可以帮助我不浪费时间。
任何想法?
谢谢大家!