# Ninebot Flash **Repository Path**: shaowp/ninebot-flash ## Basic Information - **Project Name**: Ninebot Flash - **Description**: 九号 · ZWK 系列控制器 CAN 更新工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-07-08 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
九号 · ZWK 系列控制器 CAN 更新工具
> **注意**:控制器要上电,并且链接上电压引脚,详细请查看 **Nin9** 项目
---
## 快速开始
### 1. 烧录 ESP32 固件
使用VSCode PlatformIO 编译并上传:
```bash
cd Software/ESP32
pio run -t upload
```
### 2. 打开刷机工具
> 打开 _Software/Ninebot Flash GUI_下的 **Nine_Flash.exe** 刷机软件
操作步骤:
1. 选择 ESP32 对应的串口
2. 点击「浏览」选择 **Firmware** 里面的 `.bin` 固件
3. 点击「刷机」开始更新
---
## APP固件要求
> **main程序开头要求补充:**
```
SCB->VTOR = 0x08003000; // 设置中断向量表偏移地址为 APP 的起始地址
__DSB(); // 数据屏障,确保 VTOR 写入生效
__ISB(); // 指令屏障,刷新流水线
__enable_irq(); // 开启全局中断
```
> **Keil ROM1:**
```
Start:0x8003000 Size: 0x1D000
```
> **固件大小不超过100K**
---
## APP进入Boot
> **如下函数进入Boot,注意不可逆**
```
void Enter_Bootloader_EraseApp(void)
{
// 1. 关闭全局中断
__disable_irq();
// 2. 解锁Flash控制器
flash_unlock();
// 3. 擦除APP所在的第一页 (0x08003000 所在页)
// AT32F415 Flash页大小通常为1KB或2KB,具体查阅数据手册
// flash_sector_erase 的参数是扇区内的任意地址,函数会自动匹配对应扇区
flash_sector_erase(0x08003000);
// 4. 锁定Flash
flash_lock();
// 5. 触发系统复位 → Bootloader检测到无效APP → 留在Bootloader
NVIC_SystemReset();
// 不会执行到这里
while (1)
;
}
```
## 贡献指南
欢迎提交 Issue 和 Pull Request!参与前请阅读:
1. 详细技术文档见 [Docs/BOOTLOADER_ANALYSIS.md](Docs/BOOTLOADER_ANALYSIS.md)
2. 讨论交流请加入 QQ 群
---
交流 QQ 群:202342715 · 欢迎参与贡献