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

And for a straightforward flashing process using the merged firmware:

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

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

要使用这些脚本,请将代码保存到项目文件夹中名为 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 Flash:

选项参数
SPI SPEED
40MHz
SPI MODE
DIO
  • 步骤 6:配置下载面板:
  • COM:检查设备管理器中的端口,USB-SERIAL 是正确的端口。 (这里我们选择 COM4
  • Baud: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

点击 工具 > 开发板 > 开发板管理器

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

  • 步骤 3:添加库文件
参考库文件

在 Arduino IDE 中,您可以在库管理器中搜索,例如 Seeed_Arduino_AHT20,然后安装它。

点击预览离线安装

离线安装,您可以从 GitHub 下载仓库 zip 文件,导航到 项目 -> 包含库 -> 添加 .ZIP 库,然后选择您下载的库文件。

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

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

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

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

文件 -> 打开,然后选择示例代码文件(.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...