概述

ESP32-S2最令我心仪的改进是原生支持USB,即带有一个集成了收发器的全速 USB OTG 外设,符合 USB 1.1 规范,理论速度1.5m/s,利用得当将会是一个非常巨大的进步。

目前ESP32-S2已经得到CircuitPython的支持,本文内容是我经过一番资料查询和整理后做出的关于仅使用原生USB接口来烧录 TinyUF2 bootloaderCircuitPython 的方法总结。

本文列举的操作是在一款搭载 ESP32-S2-WROVER 模组的小型开发板ESP32-S2-Saola-1上进行的,操作系统为Windows10,其他不同型号的模组及开发板则需进行对应适配,在下就不另作描述了。

在开发板上接一个直连芯片的USB母口

  1. ESP32-S2-Saola-1开发板上并没有提供直连ESP32-S2的USB接口,需要参考 ESP32-S2-WROVER模组技术规格书(PDF)中的管脚定义确定 USB OTG 从哪些管脚引出的,也可以直接看看外围设计原理图

  1. 整一个四线的USB Type-C母口对应接口焊接上去,当然别的USB接口型号也类似。

将ESP32-S2设为 bootloader 引导模式

参考ESP32-S2官方API指南中的通过USB升级设备固件章节,通过原生USB接口与PC连接上后,按住 Boot 键的同时按一下 Reset 键,再松开 Boot 键,使ESP32-S2芯片处于 bootloader 引导模式,此时在windows设备管理器里即可以查看到新的USB串行设备。

通过esptool将TinyUF2烧录进ESP32-S2的flash中

  1. 确保已经安装了python3.4或更高版本,进入cmd命令提示符窗口,输入:
pip install esptool
  1. 安装上esptool后,再输入以下命令擦除flash:
esptool -p com9 --after no_reset erase_flash

--after no_reset在此处比较关键,指定在esptool.py操作完成后,不重置芯片,而将芯片留在 bootloader 引导模式中,执行结果如下:

>esptool -p com9 --after no_reset erase_flash
esptool.py v3.1-dev
Serial port com9
Connecting...
Detecting chip type... ESP32-S2
Chip is ESP32-S2
Features: WiFi, ADC and temperature sensor calibration in BLK2 of efuse
Crystal is 40MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 16.3s
Staying in bootloader.
>
  1. 在此连接:github TinyUF2 下载对应开发板型号的 tinyuf2-espressif_saola_1_wrover-0.5.1.zip 文件到本地然后解压。

  2. 在cmd中输入指令进入此文件路径中,例如:

请在cd /d 后正确输入你所解压到的文件夹的路径

cd /d D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1
  1. 参考TinyUF2的ESP32S2说明文档在cmd中输入如下指令将其烧录进flash中:
esptool --chip esp32s2 -p com9  -b 460800 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x1000 bootloader.bin 0x2d0000 tinyuf2.bin

正确烧录完成的话执行结果如下:

D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1>esptool --chip esp32s2 -p com9  -b 460800 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x1000 bootloader.bin 0x2d0000 tinyuf2.bin
esptool.py v3.1
Serial port com9
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports. Chip is ESP32-S2
Features: WiFi, ADC and temperature sensor calibration in BLK2 of efuse
Crystal is 40MHz
MAC: 7c:df:a1:38:80:ca
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00001000 to 0x00006fff...
Flash will be erased from 0x002d0000 to 0x002effff...
Compressed 3072 bytes to 136...
Wrote 3072 bytes (136 compressed) at 0x00008000 in 0.1 seconds (effective 446.1 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 31...
Wrote 8192 bytes (31 compressed) at 0x0000e000 in 0.1 seconds (effective 645.0 kbit/s)...
Hash of data verified.
Compressed 20832 bytes to 13005...
Wrote 20832 bytes (13005 compressed) at 0x00001000 in 0.4 seconds (effective 464.5 kbit/s)...
Hash of data verified.
Compressed 130736 bytes to 82339...
Wrote 130736 bytes (82339 compressed) at 0x002d0000 in 1.5 seconds (effective 677.7 kbit/s)...
Hash of data verified. Leaving...
Staying in bootloader. D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1>
  1. 按一下开发板上的RESET复位键,可以在本地设备管理器列表中查看到一个名为 SAOLA1RBOOT 的便携存储器,及一个名为 Adafruit UF2 Bootloader USB Device的磁盘驱动器



烧录CircuitPython固件

1.前往CircuitPython官网ESP32相关下载页面,所有CircuitPython支持的ESP32开发板都在这里了。此处没有我使用的ESP32-S2-Saola-1,但找到一个相似度极高的使用同一个ESP32-S2-WROVER模组的,即 NanoESP32 S2 w/WROVER

2.点击CircuitPython 7.0.0-alpha.6中的DOWNLOAD .UF2 NOW下载到本地

3.最后一步很简单,复制到 SAOLA1RBOOT 移动存储器中。

4.待开发板自动复位后,可以在本地设备管理器列表中查看到与之前不同的便携存储器及磁盘驱动器,且新增了一个USB串行设备com端口。



5.通过支持CircuitPython的IDE例如Thonny即可在此开发板上进行编程。

各模式之间的切换方法

  1. 在烧录好CircuitPython固件后,开发板重新上电或按一下Reset键,将进入CircuitPython模式。

  2. 按住 Boot 键的同时按一下 Reset 键,再松开 Boot 键,将进入 ESP32-S2 bootloader 模式,esptool在此模式下可对flash进行操作。

  3. 在0.5秒内快速按一下 Reset 键再按一下 Boot 键,将进入TinyUF2 bootloader 模式,支持UF2的固件可以由此烧录进flash。

ESP32-S2原生USB 烧录 TinyUF2 bootloader 加 CircuitPython的更多相关文章

  1. 转:A10/A20 Bootloader加载过程分析

    来自:http://blog.csdn.net/allen6268198/article/details/12905425 A10/A20 Bootloader加载过程分析 注:由于全志A10和A20 ...

  2. 【转】全志A10/A20 Bootloader加载过程分析

    原文 : http://blog.csdn.net/allen6268198/article/details/12905425 从这里开始:http://linux-sunxi.org/Bootabl ...

  3. 850 USB 烧录模式

    /************************************************************************* * 850 USB 烧录模式 * 说明: * 本文 ...

  4. 页面性能优化-原生JS实现图片懒加载

    在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...

  5. 原生js实现上拉加载

    原生js实现上拉加载其实超级简单,把原理整明白了你也会,再也不用去引一个mescroll啦~ 好了,废话不多说,开始进入正题:上拉加载是怎么去做的,原理就是监听滚动条滑到页面底部,然后就去做一次请求数 ...

  6. Lab_1:练习4——分析bootloader加载ELF格式的OS的过程

    一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...

  7. Lab1:练习四——分析bootloader加载ELF格式的OS的过程

    练习四:分析bootloader加载ELF格式的OS的过程. 1.题目要求 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootl ...

  8. 非标准USBasp下载线烧录Arduino BootLoader的参数设置

    本文仅适用于BootLoader损坏且买到国产“免驱USBasp下载线”导致Arduino IDE无法识别从而不能烧写的情况.是一种略显非主流的操作方式. 因为Arduino的IDE并不支持这种免驱的 ...

  9. EDK II之USB设备驱动程序的加载与运行

    本文简单介绍一下USB设备的驱动程序是如何匹配设备以及被加载的: 上文(UDK中USB总线驱动的实现框架)提到USB总线枚举设备的最后一步是调用gBS->ConnectController()去 ...

随机推荐

  1. MySQL 数据库恢复一张表中的数据

    如果使用 mysqldump -uroot -p123 user > test.sql备份了user数据库中的所有数据,但是当前只想要恢复该数据库的某张表数据,该怎么处理呢? 已知恢复整个数据库 ...

  2. 4shell中的特殊变量

    1.位置参数 2.其他特殊变量 2.1 用法举栗 2.2 $* 和 $@ 的区别 2.3 $?的用法 1.位置参数 运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 ...

  3. python 01篇

    一.Pycharm 使用小tips 1.1 pycharm创建项目时,选择Python环境,不使用默认的虚拟环境 1.2 如何在pycharm中查看python版本 路径:File-Settings- ...

  4. [刘阳Java]_Web前端入门级练习_迅雷官宣网设计

    也有一段时间没有写一些技术专题文章,今天给大家来几篇Web前端入门级练习的文章.主讲<迅雷官宣网>的设计,相信大家平时也用过迅雷这个下载工具,所以分享的这篇技术大家在一定程序会感兴趣. 先 ...

  5. pagehelper插件使用时查询不到数据

    刚用mybatis 的分页插件时,老项目中分页封装的分页类起始为( pageno-1)* pagesize  于是直直接在pagehelper.start(start,pagesize)来进行分页.结 ...

  6. 【贪心】数列分段Section I luogu-1181

    题目描述 对于给定的一个长度为\(N\)的正整数数列\(A_i\),现要将其分成连续的若干段,并且每段和不超过\(M\)(可以等于\(M\)),问最少能将其分成多少段使得满足要求. 分析 简单思考一下 ...

  7. synchronized锁定类方法、volatile关键字及其他(八)

    同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁.看一下例子,注意一下printC()并不是一个静态方法: public ...

  8. synchronized锁代码块(七)

    synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...

  9. Jmeter 学习 搭建(1)

    功能 1.web自动化测试 2.接口测试 3.压力测试 4.性能测试 5.通过jdbc进行数据库测试 6.java测试 优缺点 优点 1.开源,可扩展性好 2.GUI界面,小巧灵活 3.100%  j ...

  10. Vulnhub -- DC1靶机渗透

    信息收集 开启了 22端口,ssh服务 80,http服务 111,RPC服务 先观察80端口 发现采用的是Drupal的cms 目录爆破: 但是,没有找到可以直接利用的点 登录的页面进行SQL注入即 ...