无线电轨智能车校内赛 | 在什么情况下必须刷新ESP32的 MicroPython 固件?

什么样的BOOT程序错误需要重新安装固件?

01 线电轨


一、问题/目标

  在对于ESP32 进行MicroPython 编程的时候,  在 Thonny 软件中会碰到 无论 怎么 按动 STOP 按钮,  都无法使得 ESP32 回到 REPL 状态下, 也就是 Shell 窗口中出现 三个大于号的 命令提示符。  此时, 即使重新给 ESP32上电, 也无法返回正常状态。 究竟在什么情况下会出现 MicroPython 无法返回REPL? 如何解决这个问题呢?
GM1690607833_1280_720.MPG|_-4

▲ 图1.1.1 基于ESP32的MicroPython 控制板

▲ 图1.1.1 基于ESP32的MicroPython 控制板

二、基本原理

1、出错原因

  根据我们对 MicroPython 启动过程的了解, 可以知道只有在 ESP32 单片机内部的 boot 文件程序出错, 才会出现 单片机无法进入 MicroPython 的 REPL 状态。 一般其它运行软件, 只要重新上电启动便可以恢复到 REPL。  那么究竟在 boot 文件中什么地方出错,  会导致 MicroPython 循环出现错误, 而不是返回到 REPL呢,  下面通过一些测试 , 来找到这个错误类型。  当然, 如果出现这种无法恢复的情况下,  最终只能通过重新安装 MicroPython 固件来彻底解决这个问题。  下面让我们对于 boot 文件设置几个错误, 看看是否能够引起无法返回 REPL 的严重错误。

GM1690608241_1280_720.MPG|_-7

2、设置Boot程序错误

  首先,将原来可以运行的程序中, 估计将 Pin 这个函数修改成 PPPin,  这样程序执行时, 在这句就会出错。  将该程序存储之后, 按动控制板上的 复位按钮, 可以看到 Shell 显示 程序运行出错结果, 并最终回到了 REPL 状态。

GM1690543022_1280_720.MPG|_-3

  这个错误是在 MicroPython 程序中前面初始化的时候设置错误, 程序出错时会在显示错误之后自动返回到 REPL。  下面在无限循环中设置一个错误, 比如这里故意设置 LED000, 可以看到程序仍然跳出循环, 显示错误并回到 REPL。  这里在第一行 import 语句估计设置一个不存在的模块, 运行后, 程序仍然显示错误, 但返回到 REPL。 可以看到一般情况下, 软件出现错误之后都会返回到 REPL。 所以这并不可怕。  这是将 boot 中的所有错误修改完, 运行之后, 程序停留在 boot 程序中的 while 循环中, 电机STOP 程序依然在运行。 此时, 使用鼠标电机 Shell 窗口, 按动 CTRL+C, 程序显示接收到键盘中断, 并返回到了 REPL。

GM1690543707_1280_720.MPG|_-4

3、带有循环中断程序

  这里测试一个带有循环中断程序,  利用硬件定时器,  周期改变 控制板上 LED的状态。   这里声明的 timer0 对象,  定义它的中断服务程序,  程序就一句话,  设置 LED的状态 是上次状态取反,  也就是每次中断都改变 LED 的状态。  设置 timer0 的属性, 设置为周期为 100毫米的周期中断模式。 根据它的中断服务程序的功能, 程序执行后,电路板上的 LED就以 每200毫秒的周期, 也就是 5Hz 的频率进行闪烁。   程序的循环主题就是一个延迟程序。  我们看到程序执行后, 控制板上的 LED灯开始闪烁,  闪烁的周期为 200毫秒,  这是程序正常运行状态的情况。

GM1690605932_1280_720.MPG|_-13
▲ 图1.2.1  软件运行后LED闪烁

▲ 图1.2.1 软件运行后LED闪烁

  现在在中断程序中设置一个错误, 比如修改 LED0, 使其别成一个不存在的变量名。 重新运行之后, 会看到 Shell 窗口不断涌现出报错的信息。 而且按动 STOP 按钮, 或者 CTRL+C 都无法终止报错, 使得 MicroPython 重新回到 REPL 状态。 因此 在编写程序的过程中, 特别是编写 boot 程序中, 对于循环中断中的程序需要在调试正确之后再修改 boot 文件。   到了这个状态,  只有一个办法了, 那就是通过 Thonny 直接刷新 ESP32 内部的 MicroPython 固件。 这个过程比较长。  刷新完毕之后, ESP32 便可以重新回到 REPL 状态,  打开看 内部的 boot 文件, 它已经变成 一个空文件。 后面可以重新进行开发了。

GM1690607286_1280_720.MPG|_-5

三、练习/实验

  本文讨论了 ESP32 器件中 boot 程序, 如果出现在中断中的程序错误,  就会造成软件无法通过 STOP , 或者 CTRL+C 复位到 REPL状态。 造成软件无法继续开发。 遇到这种情况,  最终可以通过重新安装 MicroPython 固件来解决。

GM1690608426_1280_720.MPG|_-3

02 座资料


一、讲座视频

什么样的BOOT程序错误需要重新安装固件?

二、讲座资料


■ 相关文献链接:

● 相关图表链接:

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/131986577