Skip to main content

如何刷写原生固件

SenseCAP indicator 有两个 MCU,ESP32-S3 和 RP2040。本教程提供了全面的指南来帮助开发者上手,包括刷写开箱即用的工厂原生固件以及将早期出货的设备更新到最新固件。

固件更新特别适用于两种场景:

  1. 如果您在 2023 年 6 月之前购买了不带 OpenAI 固件的产品,固件版本为 1.0.0,您可以下载并更新到包含 OpenAI 功能的最新固件。最新固件可以从这里下载。
  2. 如果您已经开发了一个应用程序并希望刷写自定义固件,您可以按照下面提供的教程进行操作。

简而言之,您需要本教程是因为:

  1. 您有一个需要刷写到 ESP32-S3 或 RP2040 的固件。
  2. 您已经修改了代码,需要编译并将其刷写到设备中。

让我们开始这个教程。

准备工作

要开始,您只需要您的 SenseCAP Indicator 和一台 Windows/Mac/Linux 计算机。

获取原生固件

SenseCAP Indicator 的默认出货固件对于 ESP32-S3 和 RP2040 都是完全开源的。

您有两个选项来获取开箱即用固件:
  • 源代码: 在刷写之前,您可以选择根据您的需求修改代码。您需要一个工具链(ESP-IDFArduino)来编译它。
  • 固件: 直接刷写预编译的二进制文件,无需任何代码修改或编译。使用诸如 EsptoolFlash Download Tools 等工具。

源代码

固件

对于 ESP32-S3

ESP-IDF

ESP-IDF(Espressif IoT 开发框架)是 Espressif Systems 提供的软件开发框架,专门用于为其 ESP32 和 ESP8266 系列微控制器设计固件和应用程序。有关更多信息,您可以参考 ESP-IDF 编程指南

如果您选择将源代码编译成固件,您需要 ESP-IDF 来执行编译过程。

注意

ESP-IDF 版本必须大于 v5.0。如果您使用的是较旧版本,您需要将其更新到最新版本。

对于新用户,这个视频可能会帮助您更好地理解以下步骤:

工具链安装

官方 Espressif 文档:Windows 工具链标准设置

选项 1:使用离线安装程序

对于 Windows 用户,您可以选择直接下载 ESP-IDF 离线安装程序。这里是直接下载链接:🖱️下载离线安装程序 v5.1.1

选项 2:使用推荐脚本

导航到使用命令提示符

构建项目和刷写

如果您选择将源代码编译成固件,您需要 ESP-IDF 来执行编译过程。

要构建、烧录和监控您的项目,请执行以下命令:

cd  <your_sdk_path>/examples/indicator_basis/
idf.py -p PORT build flash monitor
tip

如果不指定 PORT,IDF 将自动选择可用端口。

到此为止,通过输入命令 idf.py -p PORT flash,固件已成功烧录到 ESP32-S3 中。

Esptool

ESPtool - GitHub 是一个基于 Python 的开源实用程序,提供了与 Espressif 芯片中 ROM 引导加载程序通信的平台无关方式。

Esptool 可以作为您 Python 脚本的一部分使用。在本指南中,我们将使用 Esptool 发布页面 上提供的 打包软件。选择与您计算机操作系统对应的软件。

使用 Esptool 进行烧录

提供了两个脚本,展示了如何有效利用 Esptool 将固件烧录到 ESP32-S3 微控制器上。

注意

请注意,提供的脚本是为 Windows 操作系统量身定制的。如果您使用的是不同的操作系统,您需要调整脚本以适应您的环境。

merge.bat 脚本特别有用,因为它智能地将引导加载程序、分区表和指示器基础二进制文件合并为单个固件文件。合并后,可以使用 flash.bat 脚本将此固件无缝烧录到 ESP32-S3 上。出现提示时,输入与您设备对应的 COM 端口,烧录过程将开始。完整操作可总结如下:

merge.bat
esptool.exe --chip esp32s3 ^
merge_bin -o sensecap_indicator_basis_v1.0.0.bin ^ # Target file name
--flash_mode dio ^
--flash_size 8MB ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin

或者,如果您更喜欢直接烧录单个二进制文件而不是合并文件然后烧录,您可以直接使用 just_flash.bat 脚本:

just_flash.bat
esptool.exe --chip esp32s3 --port COMx --baud 921600 write_flash -z ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin

对于使用合并固件的直接烧录过程:

flash.bat
esptool.exe --chip esp32s3 --port COMx --baud 921600 write_flash -z 0x0 indicator_basis_v1.0.0.bin

请密切注意起始(0x0)地址,特别是在不合并二进制文件时。对于单独的二进制文件,请参考 Flash Download Tools 单独二进制文件 中的说明。遵循这些指导原则可确保无错误烧录。

要使用这些脚本,请将代码保存到项目文件夹中名为 merge.batflash.bat 的单独文本文件中。这种组织方法简化了访问和使用。

通过使用这些脚本,您可以简化固件准备和烧录阶段,有助于实现更流畅、更可靠的过程。

├── indicator_basis
│ ├── CMakeLists.txt
│ ├── build
│ ├── docs
│ ├── main
│ ├── partitions.csv
│ ├── sdkconfig
│ └── .defaults
│ └── flash.bat
│ └── merge.bat
  1. 使用 merge.bat 合并二进制文件。
  2. 使用 flash.bat 烧录合并的固件。

烧录固件

对于烧录固件,您可以使用提供的 flash.bat 脚本。此脚本旨在简化将固件烧录到 ESP32-S3 微控制器的过程。

显示 flash.bat 代码
@echo off
setlocal
cd /d "%~dp0"
:: Set Chip
set chip=esp32s3
:: Set Baud
set baud=921600
:: List COM ports
echo Available ports and devices:
echo.
for /F "tokens=* delims=" %%A in ('wmic path Win32_PnPEntity get Name ^| findstr /C:"COM" ^| findstr /C:"CH340"') do (
echo %%A
)
:: Prompt for port
:chooseport
echo.
echo Please enter the COM port to use (e.g., COM5):
set /p port=
:: Check if chosen port is valid and contains "CH340"
for /F "tokens=* delims=" %%A in ('wmic path Win32_PnPEntity get Name ^| findstr /C:"%port%" ^| findstr /C:"CH340"') do (
set device=%%A
goto :flash
)
echo Port %port% not found
goto :chooseport
:flash:: Print chosen parameters
echo.
echo You have chosen:
echo Chip: %chip%
echo Port: %port% - %device%
echo Baud: %baud%
@REM echo Press any key to continue to...
@REM pause >nul
:: Run esptool for the single file
esptool.exe --chip %chip% --port %port% --baud %baud% write_flash -z 0x0 indicator_basis_v1.0.0.bin
if ERRORLEVEL 1 (
echo Flashing with the single file failed with error %ERRORLEVEL%.
goto :end
)
:: End of script
:end
endlocal

合并二进制文件

提供的 merge.bat 脚本可用于将必要的二进制文件合并为一个固件文件。此脚本简化了过程并确保正确合并以成功烧录,这允许您烧录单个 bin 文件而不是烧录单独文件

显示 merge.bat 代码
@echo off
SETLOCAL
SET CurrentDir=%cd%
SET ScriptDir=%~dp0
SET CurrentDir=%CurrentDir:~0,-1%
SET ScriptDir=%ScriptDir:~0,-1%
IF NOT "%CurrentDir%"=="%ScriptDir%" (
cd /d "%ScriptDir%"
)
esptool.exe --chip esp32s3 ^
merge_bin -o indicator_basis_v1.0.0.bin ^
--flash_mode dio ^
--flash_size 8MB ^
0x0 ../../build/bootloader/bootloader.bin ^
0x8000 ../../build/partition_table/partition-table.bin ^
0x10000 ../../build/indicator_basis.bin
ENDLOCAL

Flash Download Tools (仅限Windows)

Flash Download Tools 用于对ESP8266和ESP32系列微控制器进行编程或固件烧录。它们提供图形用户界面(GUI),让用户可以轻松地将固件烧录到ESP微控制器上。

按照以下步骤烧录预编译固件:

下载: Flash Download Tools (仅限Windows)

  • 步骤1双击 .exe 文件进入工具的主界面。

  • 步骤2:选择以下选项:

选项参数
芯片类型
ESP32-S3
工作模式
Develop
加载模式
UART
  • 步骤3:使用USB type-C线缆将SenseCAP Indicator连接到您的笔记本电脑。

  • 步骤4:在SPI下载选项卡中,点击"..."并导航到您刚刚下载的固件。

  • 步骤5:配置SPI闪存:
选项参数
SPI速度
40MHz
SPI模式
DIO
  • 步骤6:配置下载面板:
  • COM:检查您设备管理器中的端口,USB-SERIAL是正确的端口。 (这里我们选择COM4)
  • 波特率:921600(推荐值)

然后点击START开始烧录。

当显示FINISH时,固件烧录已完成。

用于单独二进制文件的Flash Download Tools

在前面提到的指南中,二进制文件"Default_Factory_Firmware_ESP32-S3.bin"将三个二进制文件合并为一个。

但是,如果您使用ESP-IDF构建固件,直接烧录单个文件可能会导致错误。相反,您需要找到您构建的三个单独的二进制文件并指定正确的地址(您可以使用自己的地址),如下所示:

  • bootloader.bin ----> 0x0
  • partion-table.bin ----> 0x6800
  • termial_demo.bin ----> 0x10000

对于 RP2040

通过 Arduino IDE 烧录

RP2040 开发工具利用 Arduino 来增强您的编码体验。

Arduino IDE 是用于编写 Arduino 开发板代码的免费软件。凭借其用户友好的界面,您可以轻松编写和上传代码。基于简化版的 C++,它提供了库和示例,非常适合初学者。

下载:

  • 步骤 1:安装 Arduino IDE

  • 步骤 2:添加 Raspberry Pi Pico 开发板

打开您的 Arduino IDE,点击 Arduino IDE > Preferences,并将以下 URL 复制到 Additional Boards Manager URLs

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

点击 Tools > Board > Board Manager

在开发板管理器中搜索 "indicator" 并安装 "Raspberry Pi Pico/RP2040"

  • 步骤 3:添加库
参考库

在 Arduino IDE 中,您可以在 Library Manager 中搜索它,例如 Seeed_Arduino_AHT20,然后安装它。

点击预览离线安装

离线安装,您可以从 GitHub 下载仓库 zip 文件,导航到 Sketch -> Include Library -> Add .ZIP Library,然后选择您下载的库。

  • 步骤 4:使用提供的 USB Type-C 线缆将设备连接到您的 PC。

  • 步骤 5:选择开发板和端口

搜索 "Indicator" 并选择 Seeed INDICATOR RP2040 开发板,然后选择 usbmodem 串口。

  • 步骤 6:打开示例代码文件

File -> Open,然后选择示例代码文件(.ino 文件)。

我们提供了一个示例代码文件,您可以根据需要修改代码。

  • 步骤 7:验证并上传文件。

至此,我们已经完成了在 RP2040 上构建和烧录(下载)固件。

烧录 .uf2 文件

  • 步骤 1:将设备连接到您的 PC

使用针长按此内部按钮,然后通过提供的 USB Type-C 线缆将设备连接到您的 PC,连接后释放按钮。

  • 步骤 2:固件烧录

连接成功后,您的 PC 将显示一个磁盘。

.uf2 文件复制到磁盘,然后磁盘将注销。

升级将自动运行。

ESP32 & RP2040 通信协议

ESP32 和 RP2040 使用串口通信,采用 cobs 通信协议。演示中使用的命令列表如下:

命令格式由数据包类型和数据包参数组成。

资源

SenseCAP Indicator ESP32 SDK

SenseCAP Indicator RP2040 演示

常见问题

如何区分串口?

在设备管理器中检查端口

  • "USB Serial Device(COMx)" 或 "USB 串行设备" 是 RP2040 的端口
  • "USB-SERIAL CH340" 是 ESP32 的端口 简而言之,CH340 端口是 ESP32 的端口。

最近更新

  • 2023-11-17
    • 移除了补丁部分
  • 2023-08-25
    • 使补丁部分更加清晰
  • 2023-07-25
    • 添加了使用 Esptool 刷写固件的内容
  • 2023-05-29
    • 添加了补丁部分

技术支持

需要 SenseCAP Indicator 的帮助?我们随时为您提供协助!

Loading Comments...