Knight1/VanMooof-Module

GitHub: Knight1/VanMooof-Module

对 VanMoof S3/X3/S4/X4 电动自行车通信模块进行逆向工程,提供固件提取、BLE 密钥读写、UART 调试控制台访问和固件刷写等完整工具链,帮助用户在公司破产后自主维护和修复车辆。

Stars: 14 | Forks: 0

# VanMooof-Module ES3 目前,这主要涵盖 SX3 和 SX4(如果你碰巧拥有极少数之一)上的 MX25L51245GMI-08G-TR SPI Flash 芯片。 欢迎提交 Pull Request! 该芯片具有 512 兆位(64 兆字节)的 Flash 容量。 [https://github.com/Omegaice/go-xmodem/blob/master/ymodem/ymodem.go](https://github.com/Omegaice/go-xmodem/blob/master/ymodem/ymodem.go) [https://pkg.go.dev/github.com/sandacn/ymodem/ymodem](https://pkg.go.dev/github.com/sandacn/ymodem/ymodem) [https://unix.stackexchange.com/questions/273178/file-transfer-using-ymodem-sz](https://unix.stackexchange.com/questions/273178/file-transfer-using-ymodem-sz) [硬件图片](https://github.com/ciborg971/VanmoofX3RE/tree/master/OG) [电池图片](https://github.com/dtngx/VMBattery) 如果你需要固件、BMS 工具或常规帮助,请在 Discord 或 Telegram 上联系我 如果你需要关于固件的深入信息(例如:启用越野 aka. :) 模式),我推荐 [chwdt/vanmoof-tools](https://github.com/chwdt/vanmoof-tools) [固件信息](FIRMWARE.md) [BLE UUIDs](BLEUUID.md) [声音分析](SOUND.md) [使用示例](EXAMPLES.md) [错误列表](ERRORS.md) [修复技巧](REPAIRS.md) ### 功能 - ble 密钥(读/写) - bike comm - bike Sharing - Workshop - bikecomm.vanmoof.com / ublox1.vanmoof.com - /upload - /ping-response - 'guid':'%s','statistics':{'batt':%d,'mac':'%s','swv':'%s','dist':%d} - /bike-message - fmna 密钥 - fmna-rework(如果你碰巧有 Apple FMNA API 的访问权限) - 所有固件 - [STM32F413VGT6 LQFP100](https://www.mouser.de/datasheet/2/389/stm32f413cg-1851205.pdf) - mucoboot(Bootloader) - Mainware - [CC2642R1F](https://www.ti.com/lit/ds/symlink/cc2642r.pdf) - bleboot(Bootloader) - bleware - [STM32L072CZT6 LQFP48](https://www.mouser.de/datasheet/2/389/stm32l072v8-1851235.pdf) - bmsboot(Bootloader) - Batteryware - Shifterware [MM32F031F6U6](https://crossic.com/wp-content/uploads/2021/12/DS_MM32F031xx_EN.pdf) - Motorware [TMS320F28054F](https://www.ti.com/lit/ds/symlink/tms320f28054f.pdf) - GSMWare [SARA-G350](https://www.mouser.de/datasheet/3/3699/1/SARA-G3_DataSheet_UBX-13000993.pdf) - 日志 - Shell (UART) 用于 - 模块 - BLE (bledebug) - GSM (gsmdebug) - Tag Connect 端口(至少一个 6 针和一个 10 针) ### Golang 工具的功能 - 读取 SPI Flash 转储文件并显示身份验证密钥 - 将转储文件中的 pack 提取到单独的文件中 - 将 pack 提取为各个固件文件 - 读取日志 - 解密/加密 Pack 文件 - 从 SPI 转储文件中导出、转换为 wav 格式并分析 VM_SOUND“铃声”文件 - 检测失败的 VM_SOUND 上传(损坏的文件通常为 14434 字节) - 熵分析与 ECB 模式检测 - 通过 y-modem 上传固件/ Pack 文件 - 密钥提取与校验和 - 制造密钥提取与验证 - SPI 转储后自动提取 BLE 身份验证密钥 - 带有 MOOF 签名的 MAC 地址验证 - 用于转储完整性的 SHA512 校验和生成 - 未测试:将新的 ble 身份验证密钥写入 Flash - 未实现:上传声音文件 有关详细的使用示例,请参见 [EXAMPLES.md](EXAMPLES.md)。 ### 那 Cartridge 呢? VanMoof 内部及 Fixie App 中使用的正确名称是 Module。 ### 模块死机了? 你可以通过普通充电端口上的 DC 插头施加 12Vdc,即使连接了主电池(无论好坏),它也只会为模块电池充电。 ### 失败的 VM_SOUND 更新 失败的固件更新可能会损坏 VM_SOUND 条目。这些损坏的文件: - 通常正好是 **14434 字节**大小 - 包含固件二进制文件而不是音频数据(例如 ASCII,“source/tasks/audiotask.c”) ### 模块在自行车外部进入运输模式? 连接随车附赠工具箱中的 42Vdc 充电器。在普通充电插头上使用 12Vdc 也可以唤醒模块。 ### 模块在自行车外部显示骷髅头 这表示在模块被移除时自行车处于锁定状态,或者启用了 remote_lock。 最简单的修复方法:将模块放入车架中,解锁自行车,然后再移除模块。 ### 没有激活码的模块 激活码绑定的是车架而不是模块。如果你好好商量,合作伙伴甚至可以远程为你更换模块。 ### 使用寿命 #### 电池 首先确认你的 BMS 实际运行的版本是 V1.17.1! 限制你的自行车充电量。 由于充电在物理上基本上只是平衡电压的结果。如果你将充电器上的电压限制到最低,自行车在没有外部插头的情况下只能充到 85-90%。一些人(包括我)通过监控充电器使用的功率来停止充电过程。这甚至更好,因为它仍然会为模块中的电池充电。唯一的缺点是你总是会遇到 Error 21,因为自行车将这种操作检测为错误。当你断开充电器时,错误就会消失。 - 像平常一样将自行车连接到充电器。 - 断开充电器输入端,然后再断开自行车。 - 等到第二天,让充电器完全放电。 - 取下橡胶脚垫并拧下螺丝。你需要一把特殊的螺丝批头。iFixit 工具包中包含它。 - 当你打开充电器时,顶部 LED 所在的位置有一个切口。 - 在那里你会找到一个电位器。使用普通螺丝刀将电位器一直向右旋转。 - 将所有东西重新关闭并拧紧。确保连接的电缆正确放置在塑料外壳中。 ## 如何开始? ### 从 SPI Flash 获取固件、自行车密钥和日志 你需要模块 PCB 的背面才能转储 SPI Flash。 所需工具:梅花螺丝刀套装。我使用了我的 iFixit 工具包。 1. 解锁自行车并从车架中取出模块 2. 如果你不解锁自行车,警报会一直开启并让你感到烦恼。如果我忘了,我会用胶带把扬声器盖住。 2. 打开模块并拧下 PCB 的所有内部螺丝以移除 PCB。确保小心地拔下 Matrix LCD 电缆!如果你弄断了它,你可以更换它。 3. 在 PCB 的背面,靠近背光端口处是 Macronix 16 针 SPI Flash 芯片。 4. 使用 16 针!SPI Flash 芯片夹和 Raspberry Pi 转储该 Flash 1. 我使用了 Raspberry Pi Zero v1.1。你需要使用 raspi-config 启用 SPI 接口 5. 当你将其重新组装时,务必使用 99% 的酒精清洁触点,并使用如 Loctite 之类的螺纹锁固剂。来自/去向电池的(初始)浪涌电流以及流向电机的交流电压都很高,尤其是当电池电量低从而导致电压低时。如果在你骑行时有螺丝松动,就会产生小火花。 使用 flashrom 转储 SPI Flash 芯片。有关详细的命令示例,请参见 [EXAMPLES.md](EXAMPLES.md)。 ### 其他重要硬件 ``` 5C604L (6x mosfet) AK4430ET (audio controller) MAX9768 (class-D audio amp) DRV8301 (gate driver) TXS0108E (level shifter) ``` ### 获取我的自行车的控制台访问权限 你可以使用 Pi Debug Probe、一个 Pi,或者为了便携访问使用 Pi Pico 1/2 (WH)、便宜或昂贵的 USB 转 UART 适配器。 我更喜欢 Pico Probe,因为我可以轻松地用我的 Mac 上传固件。 [https://github.com/raspberrypi/debugprobe](https://github.com/raspberrypi/debugprobe/releases/tag/debugprobe-v2.2.3) JTAG 115200 波特率 黑色 - GND 绿色 - TX 橙色 - RX 黄色 - NC(未连接) ### 重要注意事项 这一切都基于逆向工程。因此,不同固件之间可能存在一些版本差异。 因此,请备份你的 Flash 转储文件,并将其保存在如 1Password 这样的安全地方。如果你压缩该转储文件,文件会变得非常小。 ## 修复一些错误 ### Err 缺少 Display "DiSPlay" ``` I2C1 Error 01/00:07:02 ERR dsp freeze ``` 你无法真正登录.. ### Err 54(无/坏 SIM 卡) 模块正在寻找具有特定 ICCID(集成电路卡标识符)的 SIM 卡。 其前缀为 ``` 89 31 44 0400 MM CC II N{12} C MM = 89 (Mobile Networks) CC = 31 (Netherlands, The) II = 4X Vodafone N{12} = Account ID C = Checksum ``` ### 固件 我们正在寻找 ``` 50 41 43 4B BC 16 09 00 40 01 00 00 4F 41 44 20 (PACK¼ �@��OAD) ``` OAD PACK 类似,字符串在 108A5C 中 bleware.bin(FMI 版本有所不同。旧自行车支持 FMI,只是固件中没有。测试一下就知道了。) mainware.bin motorware.bin shifterware.bin batteryware.bin ``` 0x0002000 ? 0x005A000 BLE Secrets (60) 0x005af80 M-ID/M-KEY (60) 0x007c000 0x0280000 VM_SOUND 0x0300000 VM_SOUND 0x0380000 VM_SOUND 0x2621440 VM_SOUND 0x3145728 VM_SOUND 0x4194304 VM_SOUND 0x4718592 VM_SOUND 0x5242880 VM_SOUND 0x5767168 VM_SOUND 0x6291456 VM_SOUND 0x640XXXX unknown 0x6815744 VM_SOUND 0x7340032 VM_SOUND 0x7864336 VM_SOUND 0x8388608 VM_SOUND 0x8912896 VM_SOUND 0x9437184 VM_SOUND 0x9961472 VM_SOUND 0x10485760 VM_SOUND 0x11010064 VM_SOUND 0x11534336 VM_SOUND 0x12058624 VM_SOUND 0x12582912 VM_SOUND 0x13107200 VM_SOUND 0x13631488 VM_SOUND 0x14155776 VM_SOUND 0x14680064 VM_SOUND 0x15204352 VM_SOUND 0x15728640 VM_SOUND 0x16252928 VM_SOUND 0x16777216 VM_SOUND 0x17301504 VM_SOUND 0x17825792 VM_SOUND 0x66965504 LOGS? // WRONG? 0x3fdd000 LOGS READ AND DECODE LOGS 6 GSM power ok 1723060256 Info ask tracking 1723060256 GSM_CMD_SMS_INIT 1723060256 GSM: sms= 0 1723060256 GSM_CMD_POWEROFF 1723060256 Poweroff g350.. 1723060261 Poweroff g350 ok 1723060261 ES3.1 Main 1.08.02 1723060261 ES3 boot 1.09 1723060261 Motorware S.0.00.22 1723060261 BMSWare 1.14 RSOC 100 Cycles 64 HW 3.10 1723060261 Shifterware 0.237 stored: 0.237 1723060261 BLEWare 2.4.01 1723060261 GSMWare 08.90 1723060261 CMD_BLE_MAC 24:9F:89:FF:FF:FF 1723060261 PDOCP 0 1723060261 PDSCP 1 1723060261 iccid 89314404000913371337 1723060261 Modem ready 1723060261 GSM_CMD_IDLE ``` ### IDA 这是 IDA 的入口点 (0x080030ec)! ### UART #### Bootloader 在 UART(调试)端口上按 ESC 键,直到 MCU(微控制器)重启并停留在 Bootloader 中。它将显示: ``` STM32 bootloader <1.09> Muco Technologies (c)2019 ``` ``` For more information on a specific command, type HELP command-name help This tekst ver Software version reboot reboot CPU stm32 STM32 internal bootlaoder crc CRC32 check ea Erase application es Erase shadow app em Erase motor app eb Erase battery app ec Erase shifter app ua Upload app (Y-modem) us Upload shadow app (Y-modem) um Upload motor app (Y-modem) ub Upload battery app (Y-modem) uc Upload shifter app (Y-modem) st Start application vi Version information ``` ``` ver STM32 bootloader <1.09> Muco Technologies (c)2019 ``` ``` vi STM32 bootloader v1.09 (Feb 21 2020 14:50:53) Loaded Application: v1.08.02 (May 9 2022 10:58:01) size 220144 bytes Shadow Application: v1.08.02 (May 9 2022 10:58:01) size 220144 bytes Shifter Application: v0.ed.02 (Oct 23 2020 14:09:11) size 11944 bytes Motor Application: v0.00.16 ( 03 2021 00:48:35) size 61720 bytes No Battery Application ``` ``` crc APP CRC ok SHADOW CRC error MotorPcb CRC ok No Battery application Shifter CRC ok ``` ``` st Wake Reason: WAKE_KICKLOCK ES3 v1.08.02 ERR Led Display ERR Light sensor ERR ST3115 wake 01/00:07:01 SIM: PCB RCC_FLAG_WWDGRST RCC_FLAG_PINRST 01/00:07:01 GSM_CMD_IDLE 01/00:07:01 Set power state to PWR_NORMAL (Current limit: 20.0 A, SOC: -1 %) 01/00:07:01 BIKE_INIT 01/00:07:01 Restore power level 4 01/00:07:01 LiPo SoC 0% (first read) 01/00:07:01 Wake from shipping I2C1 Error 01/00:07:01 BIKE_LIPOCHARGE 01/00:07:01 ERR dsp freeze I2C1 Error 01/00:07:01 ERR dsp freeze I2C1 Error 01/00:07:01 ERR dsp freeze CMD_BLE_VERSION_INFO CMD_BLE_MAC ``` #### 重置 Find My 按 5 次电源按钮以重置 Find My (fmna)。 ``` fmna-unpair ``` #### 充电 只要闪电? 符号闪烁,就说明模块电池正在充电。 #### Mainware(调试端口)控制台 登录主密码:vEVjGF!paYsM2EBV8SoDT8*T0eB&#T6xevaoxCaO ``` Available commands: help This tekst reboot reboot CPU login Login shell logout Logout shell ver Software version distance Manual set dst gear set gear region Region 0..3 blereset hard reset BLE bledebug redirect uart8 show Parameters motorupdate Update F2806 CPU vollow Audio volume volmid Audio volume volhigh Audio volume wheelsize Wheel 24/28 inch speed override speed loop main loop time shipping Shipping mode factory-shipping Factory shipping mode (ignores BMS) logprn Print log logclr Clear log 6 logapp 1/ 0 powerchange 1/ 0 factory Load factory defaults battery Show battery batware Battery update batreset Battery reset shiftware Battery update shifterstatus Show shifter shiftdebug Show Modbus shiftresetcounter Reset shift counter motorstatus gsminfo Info from Ublox gsmstart start GSM function gsmdebug redirect uart2 bmsdebug Show Modbus sound sample,volume,times adc read adc bwritereg Modbus Bat write register bwritedata Modbus Bat write data breadreg Modbus Bat read register swritereg Modbus Shift write register swritedata Modbus Shift write data sreadreg Modbus Shift read register stc read lipo monitor stcreset setoad test setgear save muco shifter ``` ``` ver ES3.0 Main 1.08.02 ES3 boot 1.09 Motorware BMSWare 0.00 RSOC 0 Cycles 0 HW 0.00 Shifterware 0.0 stored: 0.237 BLEWare 1.4.01 GSMWare CMD_BLE_MAC F8:8A:5E:FF:FF:FF ``` ``` show < I/O > Botton_Left 0 Botton_Right 0 Lock 1 Wheel 0 Charger 1 Off/rst 0 MEMS_WAKE 0 BLE_WAKE 0 BAT_FAULT 1 BAT_KEY_IN 0 Fb coil det 0 Simcard 1 LiPo STAT 1 LiPo Status LIPO_UNKNOWN Serial 2043531337 Error Flags: 0x00000040 00000000 APP DISCON Ibat 20.0A No extbat Dark 200 Lx now 591 Lx backupcode set Volume Low 20 Volume Medium 30 Volume High 38 Group low 00000000 Group medium 383F33FE Group high 47C0CC00 Unit Metric Wheel 28 inch Transmission:AUTO Light mode: LIGHT_ALWAYS_ON 0 MaxSpeed 0 hm/h 0 % 1 MaxSpeed 160 hm/h 30 % 2 MaxSpeed 220 hm/h 30 % 3 MaxSpeed 270 hm/h 30 % 4 MaxSpeed 320 hm/h 30 % 5 MaxSpeed 320 hm/h 101 % Region: REGION_US Moment 1 up:100 down:80 hm/h Moment 2 up:190 down:170 hm/h Moment 3 up:240 down:220 hm/h Saved version: 10802F4 Alarm Enable log_by_app Serial Shipping Active Alarm state STANDBY 11 remote_locked 0 Horn file 10 Distance 4119.5 Km Play_lock 1 Shifter 0.237 epoch_horn 0 shftr tries 0 pedal_speed: 0 torque : 0 power level: 4 ride change: No bike state 20 ``` ``` battery BAT_ID 0x0 FAULT 0x0 BAT_TP1 -2731 BAT_TP2 -2731 MOS_TMP -2731 UBAT 0 RSOC -1 I 0 CHARGE 0 DSG_PRT 0 TST_DBG 0 HW_VER 0.00 FW_VER 0.00 DATE_1 0 DATE_2 0 NOM_CAP 0 FUL_CAP 0 REM_CAP 0 ABS_SOC 0 CYL_CNT 0 CHG_ON 0 U_1 0 U_2 0 U_3 0 U_4 0 U_5 0 U_6 0 U_7 0 U_8 0 U_9 0 U_A 0 U_MAX 0 U_MIN 0 FSR 0x0000 DOTP 0 DUTP 0 COTP 0 CUTP 0 DOCP1 0 DOCP2 0 COCP1 0 COCP2 0 OVP1 0 OVP2 0 UVP1 0 UVP2 0 PDOCP 0 PDSCP 0 MOTP 0 SCP 0 ``` ``` shipping Set shipping mode 01/00:24:53 BIKE_SHIPPING 01/00:24:53 SOUND_SO vol 26 Lights P2c CMD_AUDIO_STOPPED 01/00:25:02 BIKE_SET_SHIPPING 01/00:25:02 BIKE_CPU_STOP_MODE 01/00:25:02 BIKE_SPECIAL_GEAR_OPERATION 01/00:25:07 Shipping mode sets gear:2 01/00:25:07 BIKE_END_SPECIAL_OPERATION 01/00:25:09 BIKE_CPU_STOP_MODE 01/00:25:09 Wake counter 254 of 168, type 10 01/00:25:09 Force Lights Off 01/00:25:09 BMS off 01/00:25:09 BIKE_CPU_STOPPED No MOTOR_SLEEP_MODE from motor 0x0404 01/00:25:09 EnterSTOPMode 0 min Wake:Shipping ``` ``` factory-shipping Set factory shipping mode BLE remove id 112 nr 5C 01/00:27:36 EnterSTOPMode 0 min Wake:Shipping ``` ### 蓝牙低功耗 Shell 输入 bledebug 进入 BLE 芯片 Shell,然后执行 reset 获取以下输出: ``` Connect to UART8 reset Mon Feb 17 20:00:34 2025: Platform reset Thu Dec 31 23:00:00 2020: This image is not provisioned *** VANMOOF S3/X3 Monitor Program *** BLE MAC Address: "f8:8a:5e:ff:ff:ff" Device name ................ : ES3-F88A5EFFFFFF Firmware version ........... : 1.04.01 Compile date / time ........ : Mar 29 2021 / 14:20:30 BIM firmware version ....... : 1.00.00 BIM compile date / time .... : Apr 23 2020 / 14:10:12 reset type ................. : pin reset systick .................... : 30316279 Type 'help' for a list of all available commands. ``` ``` > help The following commands are available: firmware-update - update a new image of firmware to the external flash extflash-verify - verify the current flashchip log-count - get log-count statistic log-dump - print blocks starting at address log-flush - flush all log-entries log-inject - Create fake-logs audio-play - play audio bound to the specified index audio-stop - stop playing the current audio file audio-dump - dump all audio files in external memory audio-upload - upload audio binary using Y-Modem at the address linked to the specified index audio-volume-set-all - set audio level of all audio-clips (0-3) pack-upload - upload a PACK file by Y-Modem pack-list - list the contents of a PACK file pack-delete - delete a PACK file pack-process - process pack files in external flash memory ble-info - dump current BLE connection info / statistics ble-disconnect - force a disconnect of all connected devices ble-erase-all-bonds - erase all bonds fmna-get-auth-uuid - Get the FMNA authentication UUID fmna-get-serialnumber - Get the FMNA serialnumber fmna-set-serialnumber - Set the serialnumber (hexstring, 8 bytes / 16 hexdigits) fmna-erase-external - erases the external provisioned data (will be reset on reboot if internal exists) ble-erase-fmna-bonds - will erase all fmna bonds fmna-blob-upload-int - upload a FMNA factory blob fmna-rework - Replace provisioning data using Y-Modem fmna-enable-pairing - enables pairing (if unpaired) fmna-unpair - Force FMNA unpair (i.e. 5x reset shutdown - shutdown the system rtos-statistics - dump memory stats every 500ms rtos-nvm-compact - Compact the non-volatile storage reset - perform software reset of the MCU info/ver - show basic firmware info exit - exit from shell help - show all monitor commands ``` ``` > extflash-verify Flash type : MX25L51245G Device size (Mbyte): 64 SW status register write protection: y Block write-protection enabled : n ``` ``` > pack-process Sat Jan 1 00:55:04 2000: invalid pack content Processing pakfs, expect a small startup delay because of mainware erasing its shadowflash, which blocks all serial I/O > Cold boot ES3 v1.08.02 ``` ``` > ble-info number of connections: 0/3 Device address: cb:9e:4f:ff:ff:ff ``` ``` > ble-erase-all-bonds ``` ``` > pack-delete Deleting PACK archive... Erase pack progress <99%> Done ``` ``` > pack-upload CCCCCCYModem successfully received 595968 bytes for file "pack.bin" ``` ``` > pack-list Scanning PACK archive.. 217,884 bytes bleware.bin 220,144 bytes mainware.bin 61,720 bytes motorware.bin 11,944 bytes shifterware.bin 83,940 bytes batteryware.bin ``` ``` > log-flush Done erasing logs ``` ``` > pack-process Processing pakfs, expect a small startup delay because of mainware erasing its shadowflash, which blocks all serial I/O > Sat Jan 1 02:18:53 2000: Platform reset Thu Dec 31 23:00:00 2020: This image is not provisioned Wake Reason: WAKE_KICKLOCK ES3 v1.08.02 ERR ST3115 wake 01/02:15:43 SIM: Holder RCC_FLAG_PINRST 01/02:15:43 GSM_CMD_IDLE 01/02:15:43 Set power state to PWR_NORMAL (Current limit: 20.0 A, SOC: -1 %) 01/02:15:43 BIKE_INIT 01/02:15:43 Restore power level 4 01/02:15:43 LiPo SoC 0% (first read) 01/02:15:43 Wake from shipping Seq 2 Order 1 2 3 4 5 01/02:15:43 ERR dsp freeze 01/02:15:43 BIKE_OAD_UPDATE CMD_BLE_VERSION_INFO CMD_BLE_MAC Disable Advertise 01/02:15:50 LiPo state changed to LIPO_ERROR ``` ### GSM 调制解调器 参见 Chris 的仓库。你需要使用 AT 命令。调制解调器直接连接到 UART 输出。 ### 理解控制台数值 有趣的是 LiPOSOC 和 BMSSOC ``` TIME; LiPOSOC; BMSSOC; BATTEMP; BATVOLTAGE; BATCURRENT; MOTORCURRENT; MOTORTMP; DRIVERTMP; SPEED; ODO; BOOST; LUX; BATDSG 01/00:11:04; 0.0; -1; -247.-6; 0.00; 0.00; 0.0; 0; 0; 0.0; 4119.5; 0; 0; 0 ``` ### 更新 mainware 固件 我在 Mac 上使用 minicom。最简单的方法是进入包含固件的文件夹,然后启动 minicom。 **确保模块已充了一定量的电,或者连接上充电器!**。 确保它是原始固件,或者如果已修改,则 CRC32 和 Magic 值是正确的。 要更新或降级 Mainware(即你在 App 中看到的固件版本),你需要更新 shadow 应用程序。 不要直接更新 Mainware(已加载的应用程序)。 1. 通过按 ESC 键直到重启进入 muco Bootloader。 2. 输入 "es"(擦除 shadow),回车 3. 输入 "us"(上传 shadow),回车 4. 在 minicom Shell 中按 CONTROL-A S(在 Mac 上),选择 mainware_XXX.bin 5. 输入 "vi"(版本),回车。确认显示的版本是你期望的版本。 6. 输入 "st"(启动),回车。Mainware 应该会启动。 7. 按 ESC 键,直到你再次进入 Bootloader。它会自动将 shadow 复制到 mainware 分区。 8. 它会自动重启。确认 ES3 v.X.XX.XX 之后的版本号是你所期望的! ``` 'MT' (@) 2019 STM32F4, Stop top >es Erasing shadow flash 256 Kb... Erase sector 7 Erase sector 8 OK >us Send .bin Ymodem CCC >vi STM32 bootloader v1.09 (Feb 21 2020 14:50:53) Loaded Application: v1.01.15 (Jun 7 2023 07:21:48) size 195784 bytes Shadow Application: v1.01.0F (Jun 7 2023 07:21:48) size 195784 bytes Shifter Application: v0.ed.02 (Oct 23 2020 14:09:11) size 11944 bytes Motor Application: v0.00.16 ( 03 2021 00:48:35) size 61720 bytes No Battery Application >st Wake Reason: WAKE_SRC_BUTTON_1 WAKE_SRC_MEMS WAKE_KICKLOCK ES3 v1.01.21 ERR ST3115 wake 01/00:11:03 SIM: Holder RCC_FLAG_WWDGRST RCC_FLAG_PINRST 01/00:11:03 GSM_CMD_IDLE 01/00:11:03 Set power state to PWR_NORMAL (Current limit: 20.0 A, SOC: -1 %) 01/00:11:03 BIKE_INIT 01/00:11:03 Restore power level 4 01/00:11:03 LiPo SoC 0% (first read) 01/00:11:03 Wake from shipping 01/00:11:03 BIKE_LIPOCHARGE 01/00:11:03 CMD_BLE_VERSION_INFO CMD_BLE_MAC ERR Read STC TIME;LiPOSOC;BMSSOC;BATTEMP;BATVOLTAGE;BATCURRENT;MOTORCURRENT;MOTORTMP;DRIVERTMP;SPEED;ODO;BOOST;LUX;BATDSG 01/00:11:04 ;0.0;-1;-247.-6;0.00;0.00;0.0;0;0;0.0;4119.5;0;0;0 'MT' (@) 2019 STM32F4, Stop Copy Shadow to App..Erase sector 5 Erase sector 6 Erasing shadow flash... Erase sector 7 Erase sector 8 OK Jump Wake Reason: WAKE_SRC_BUTTON_1 WAKE_SRC_MEMS WAKE_KICKLOCK ES3 v1.01.15 ``` ### 将 Dynapack BMS 固件更新到 1.17(最新版本) 如果你想降级 BMS,也可以使用此方法。它没有降级检查。 我在 Mac 上使用 minicom。最简单的方法是进入包含固件的文件夹,然后启动 minicom。 **确保电池和模块都有一定的电量,并且没有与电池相关的任何错误**。 拜托。当保险丝处于 OL(开路)状态时,不要尝试更新 BMS。它不会修复你遇到的任何电池错误! 所有错误都保存到 EEPROM 中(它同时保存了序列号、循环次数、校准数据),因此正常的更新例程不会更新/擦除它。 1. 通过按 ESC 键进入 muco Bootloader 2. 输入 "vi"(版本),回车。如果未安装 v1.17.1 版本,我们需要先上传它。 1. 输入 "eb"(擦除 batteryware),回车 2. 输入 "ub"(上传 batteryware),回车 3. 在 minicom Shell 中按 CONTROL-A S(在 Mac 上),选择 batteryware_1.17.1.bin 4. 输入 "vi"(版本),回车。确认显示的版本是 v1.17。 3. 输入 "st"(),回车。Mainware 应该会启动。 4. 输入 "batware",回车。 5. 更新后使用 "battery" 命令验证 BMS 是否已成功更新。 ### 为了保存里程,我将自行车设为了运输模式。这会将里程保存到 EEPROM 中。 **这不会更新后台中的里程**,但它会在 App 中显示,因此在购买二手时要小心! 这对于 BMS 循环次数也是可能的! ``` > distance 0 Set 0.0 Km ```
标签:BLE, BMS, CC2642, EVTX分析, IoT安全, MUC, SPI Flash, STM32, VanMoof, YMODEM, 云资产清单, 固件分析, 固件提取, 嵌入式系统, 微控制器, 日志审计, 智能硬件, 智能自行车, 物联网, 电动自行车, 电池管理系统, 硬件分析, 硬件改装, 硬件黑客, 蓝牙低功耗, 逆向工程, 通信协议