刷机步骤

分区对照表

分区文件名地址备注
otpotp.bin0x1FFF7000
bootloaderbootloader.bin0x08000000
firmwarefirmware.bin0x08008000
core2radiostm32wb5x_BLE_Stack_light_fw.bin0x080D7000
core2fusstm32wb5x_FUS_fw_for_fus_0_5_3.bin0x080EC000"condition": "==0.5.3",
core2fusstm32wb5x_FUS_fw.bin0x080EC000"condition": ">0.5.3",

一、OTP刷写

选其一即可,刷写会自动生成。

刷写命令

python3 ./otp.py flash_all \
  --version 12 \
  --firmware 7 \
  --body 9 \
  --connect 6 \
  --display unknown \
  --color black \
  --region world \
  --name Kalicyh

生成命令

python3 ./otp.py generate \
  --version 12 \
  --firmware 7 \
  --body 9 \
  --connect 6 \
  --display unknown \
  --color black \
  --region world \
  --name kalicyh \
  kalicyh_otp

参数

--version: 版本号(在PCB主板上)
--firmware: 固件版本号(必须提供)
--body: 机壳版本号(必须提供)
--connect: 连接版本号(必须提供)
--display: 显示类型(必须提供,需从 OTP_DISPLAYS 字典中选择)
--color: 颜色(必须提供,需从 OTP_COLORS 字典中选择)
--region: 区域(必须提供,需从 OTP_REGIONS 字典中选择)
--name: 名称(必须提供,长度不超过 8 个字符,仅支持 a-zA-Z0-9)
OTP_COLORS = {
    "unknown": 0x00,
    "black": 0x01,
    "white": 0x02,
    "transparent": 0x03,
}

OTP_REGIONS = {
    "unknown": 0x00,
    "eu_ru": 0x01,
    "us_ca_au": 0x02,
    "jp": 0x03,
    "world": 0x04,
}

OTP_DISPLAYS = {
    "unknown": 0x00,
    "erc": 0x01,
    "mgg": 0x02,
}

关于地区

可能会影响到可使用的无线电频率

关于屏幕

/* MGG v0+(ST7567)
* EV = 32
* RR = V0 / ((1 - (63 - EV) / 162) * 2.1)
* RR = 10 / ((1 - (63 - 32) / 162) * 2.1) ~= 5.88 is 6 (0b110)
* Bias = 1/9 (false)
*/

/* ERC v1(ST7565) and v2(ST7567)
* EV = 33
* RR = V0 / ((1 - (63 - EV) / 162) * 2.1)
* RR = 9.3 / ((1 - (63 - 32) / 162) * 2.1) ~= 5.47 is 5.5 (0b101)
* Bias = 1/9 (false)
*/

v0是最旧的版本使用ST7567
v1是节约成本使用的ST7565
v3是芯片停产使用的ST7567

所以最新屏幕是:erc

二、Core2刷写

生成

./fbt fw_dist
./fbt copro_dist
./fbt updater_package

注意!!! 先core2再core1

python ./scripts/flash.py core2radio 0x080CE000 /stm32wb5x_BLE_Stack_full_fw.bin

python ./scripts/ob.py set

python ./scripts/flash.py core2fus 0x080EC000 --statement=AGREE_TO_LOOSE_FLIPPER_FEATURES_THAT_USES_CRYPTO_ENCLAVE stm32wb5x_FUS_fw_for_fus_0_5_3.bin

python ./scripts/flash.py core2fus 0x080EC000 --statement=AGREE_TO_LOOSE_FLIPPER_FEATURES_THAT_USES_CRYPTO_ENCLAVE stm32wb5x_FUS_fw.bin

scripts/ob.py set

三、Core1刷写

应该可以由官方刷机工具代替

python ./scripts/flash.py wipe --port 3001

python ./scripts/ob.py set

bootloader

firmware

Flash脚本

打开终端或命令行,使用以下格式来运行脚本并执行不同的命令:

python3 otp.py <子命令> <参数>

例如:

  • 擦除 MCU 闪存(wipe):

    python3 otp.py wipe --port swd --serial <ST-Link Serial Number>
    
  • 刷写 Core 1 引导程序:

    python3 otp.py core1bootloader --port swd --serial <ST-Link Serial Number> bootloader.bin
    
  • 刷写 Core 1 固件:

    python3 otp.py core1firmware --port swd --serial <ST-Link Serial Number> firmware.bin
    
  • 同时刷写 Core 1 引导程序和固件:

    python3 otp.py core1 --port swd --serial <ST-Link Serial Number> bootloader.bin firmware.bin
    
  • 刷写 Core 2 FUS:

    python3 otp.py core2fus --port swd --serial <ST-Link Serial Number> --statement AGREE_TO_LOSE_FLIPPER_FEATURES_THAT_USE_CRYPTO_ENCLAVE 0x08000000 fus.bin
    
  • 刷写 Core 2 无线电栈:

    python3 otp.py core2radio --port swd --serial <ST-Link Serial Number> radio.bin --addr 0x08000000
    

命令解释

  • --port:指定连接端口,通常是 swdusb1
  • --serial:指定 ST-Link 的序列号,用于正确连接设备。
  • <bootloader.bin>:引导程序二进制文件路径。
  • <firmware.bin>:固件二进制文件路径。
  • <fus.bin>:固件更新服务二进制文件路径。
  • <radio.bin>:无线电栈二进制文件路径。
  • --addr:无线电栈的起始地址。

通过运行这些命令,您可以执行不同的固件刷写任务。