/**
- NOR FLASH 驱动参数配置检查清单
- 请根据你的实际硬件和需求,逐项填写下面的配置参数
- 这个清单将指导你完成所有必需的配置工作 */
========================================================================================
📋 第一部分:硬件信息(必填)
========================================================================================
1.1 开发板信息
开发板型号: _________________________________
制造商: _________________________________
主芯片型号: _________________ (如 WS63)
主频率: _________ MHz
1.2 外挂 NOR Flash 芯片信息
Flash 芯片型号: _________________________________
(检查芯片表面标签,如 GD25Q32)
芯片容量: ___ Mbit 或 ___ MB
(常见: 32Mb, 64Mb, 128Mb)
Chip ID 0x________________
(格式: 0xxxxxxxxx,如 0x1640C8)
制造商: _________________________________
(GigaDevice/Winbond/EON/Macronix...)
1.3 SPI 接口连接
在下表接线:
| 信号 | Flash 脚号 | 开发板脚位 | 验证 ✓ |
|---|---|---|---|
| CLK | ○○ | GPIO__ | [ ] |
| MOSI | ○○ | GPIO__ | [ ] |
| MISO | ○○ | GPIO__ | [ ] |
| CS | ○○ | GPIO__ | [ ] |
| VCC | ○○ | 3.3V | [ ] |
| GND | ○○ | GND | [ ] |
| WP | ○○ | GPIO__ | [ ] |
| HOLD | ○○ | GPIO__ | [ ] |
========================================================================================
🔧 第二部分:编译配置
========================================================================================
2.1 Board Config 配置
文件路径: src/build/config/boards/[你的板子]/config.in
检查并填写:
# SFC 驱动配置
CONFIG_HAS_SFC=y # ✅ 必须 = y
当前值: ___
CONFIG_SFC_CLK_GATE=y # ✅ 时钟门控(推荐)
当前值: ___
CONFIG_HI_SFC_SPEED_MODE= # ⚙️ 选择一个:
0 = 33MHz (安全,兼容所有芯片)
1 = 66MHz (中速)
2 = 100MHz (高速)
3 = 150MHz (最高速,Quad SPI 需要)
你要设置为: ___
当前值: ___
CONFIG_SFC_SUPPORT_QUAD= # ⚙️ 是否支持 Quad SPI
y = 支持(性能好,兼容性可能差)
n = 不支持(安全,推荐)
你要设置为: ___
当前值: ___
2.2 SFC 驱动配置
文件路径: src/drivers/chips/ws63/porting/sfc/sfc_porting.h
检查并填写:
// 基地址配置(这些通常不需要改)
SFC_BASE_ADDR = 0x________________
✅ 常见值: 0x40200000 (保持不变)
// Flash 映射配置
FLASH_MAPPING_START_ADDR = 0x________________
⚙️ 需要与下面的 littlefs 分区地址一致
建议值: 0x200000
你的设置: 0x________________
FLASH_MAPPING_MAX_SIZE = 0x________________
⚙️ 映射大小,通常等于实际 Flash 容量
如果 Flash 总共 4MB,则: 0x400000
如果 Flash 总共 8MB,则: 0x800000
你的设置: 0x________________
2.3 littlefs 配置
文件路径: src/kernel/osal/include/fs_adapt.h 或 littlefs_adapt.h
检查并填写:
// Block 配置(必须与硬件一致)
LFS_BLOCK_SIZE = 4096
✅ 固定值(不要改)
当前值: ____
LFS_BLOCKS =
计算方法: littlefs 分区大小 / 4096
如果 littlefs 分区是 256KB:
LFS_BLOCKS = 256KB / 4KB = 256
你的计算:
分区大小: _________ KB
LFS_BLOCKS = _________ / 4 = _________
应填入: _________
// Cache 和性能配置
LFS_CACHE_SIZE = _____
建议值: 16
LFS_LOOKAHEAD = _____
建议值: 16
LFS_PROG_SIZE = _____
建议值: 256
LFS_READ_SIZE = _____
建议值: 16
========================================================================================
📍 第三部分:分区配置
========================================================================================
3.1 Flash 分区规划
首先绘制你的 Flash 分区图:
Flash 地址空间(总容量: _________ MB)
0x000000 ┌─────────────────┐
│ │ 启动区
│ Bootloader │ 大小: _________
│ │
0x_______ ├─────────────────┤
│ │ 应用区
│ Application │ 大小: _________
│ │
0x_______ ├─────────────────┤ ← littlefs 分区起始
│ │
│ littlefs │ 大小: _________
│ (文件系统) │
0x_______ ├─────────────────┤ ← 日志和用户数据开始
│ │
│ User Data │ 大小: _________
│ (日志、数据) │
│ │
0x_______ └─────────────────┘
(End of Flash)
3.2 littlefs 分区配置
文件路径: vendor/[你的产品]/build_config.json 或分区表文件
填写以下配置:
// littlefs 分区配置
{
"name": "littlefs",
"id": 1, // ⚙️ 分区 ID
"offset": "0x200000", // ⚙️ 起始地址
"size": "0x40000", // ⚙️ 分区大小(256KB = 0x40000)
"type": "filesystem",
"subtype": "littlefs"
}
具体的值应该填:
littlefs 分区 ID: _____
littlefs 分区起始地址: 0x_________
littlefs 分区大小: _________ 字节
(即 0x_________ hex)
littlefs 分区中 Block 数: _________ (大小/4096)
关键检查:
- littlefs 起始地址必须与 FLASH_MAPPING_START_ADDR 相同
- littlefs 分区大小必须是 4KB 的倍数
- littlefs 分区不能与其他分区重叠
========================================================================================
📝 第四部分:日志管理器配置
========================================================================================
4.1 日志存储位置
文件路径: log_manager.h
// 日志存储分区(通常与 littlefs 同一分区)
LOG_PARTITION_ID = _____
建议值: 1 (与 littlefs 相同)
// littlefs 中的日志目录
LOG_MOUNT_POINT = "________"
建议值: "/logs"
// 日志文件名格式
LOG_TIMESTAMP_FORMAT = "YYYYMMDD_HHMMSS"
✅ 推荐格式(自动生成时间戳)
生成的文件名示例:
20240206_143020.log (2024年2月6日 14:30:20)
20240206_143021.log (日志文件自动轮转)
4.2 日志容量配置
// 单个日志文件大小限制
LOG_MAX_FILE_SIZE = ___________ 字节
建议值: 1048576 (1MB)
这意味着:
- 每个日志文件最多 1MB
- 超过后自动创建新文件
- 你可以改成: ______
// 最多保存多少个日志文件
LOG_MAX_FILES = _____
建议值: 20 (存储 20 个日志文件)
总日志容量计算:
LOG_MAX_FILE_SIZE × LOG_MAX_FILES = _________
示例: 1MB × 20 = 20MB
你的配置: _________________ MB
// 自动清理策略
LOG_CLEANUP_THRESHOLD = _____
建议值: 10 (超过 10 个文件时清理旧的)
LOG_AUTO_CLEANUP = _____
建议值: 1 (启用自动清理)
4.3 Flash 容量估算
根据你的分区规划,计算可用的日志空间:
总 Flash 容量: _________ MB
减去 Bootloader: _________ MB
减去 Application: _________ MB
减去 littlefs 文件系统: _________ MB
───────────────────────────────────────────
剩余可用于日志的空间: _________ MB
根据这个空间,设置:
LOG_MAX_FILE_SIZE × LOG_MAX_FILES ≤ 剩余空间
例如,剩余空间 3MB,你可以配置:
方案 A: 20 个 150KB 文件
方案 B: 10 个 300KB 文件
方案 C: 3 个 1MB 文件
你选择: 方案 ___
具体配置:
LOG_MAX_FILES = _____
LOG_MAX_FILE_SIZE = ___________
========================================================================================
✔️ 第五部分:验证检查清单
========================================================================================
在进行编译和测试前,完成以下检查:
硬件检查
- Flash 芯片已焊接到开发板上
- SPI 接线已连接并已验证
- Flash 电源电压为 3.3V(用万用表测量)
- 使用示波器观察 SPI 信号(至少 CLK 有脉冲)
固件配置检查
- CONFIG_HAS_SFC = y
- SFC_SUPPORT_QUAD 已根据芯片选择
- littlefs 分区地址与 SFC 映射地址相同
- littlefs 分区大小能被 4KB 整除
- 分区之间不重叠
编译检查
- 代码能正常编译(没有编译错误)
- 链接成功(没有链接错误)
- 将编译后的固件保存备份:
ws63_App_backup.bin
========================================================================================
🚀 第六部分:快速参考表
========================================================================================
参数速查表
将你确定的参数填入这个表格,便于查阅:
╔════════════════════════════════════════════════════════╗
║ NOR Flash 驱动参数快速参考表 ║
╠════════════════════════════════════════════════════════╣
║ 参数 值 单位 ║
╠════════════════════════════════════════════════════════╣
║ Flash 芯片型号 ____________ (如GD25Q32) ║
║ Flash 总容量 ____________ MB ║
║ SPI 主频率 ____________ MHz ║
║ SFC 映射地址 0x__________ hex ║
║ littlefs 分区起始 0x__________ hex ║
║ littlefs 分区大小 __________ KB ║
║ littlefs Block 数 __________ 个 ║
║ 日志最大文件大小 __________ KB ║
║ 最多日志文件数 __________ 个 ║
║ 总日志容量 __________ MB ║
║ 剩余用户可用空间 __________ MB ║
╚════════════════════════════════════════════════════════╝
========================================================================================
📚 第七部分:相关文档参考
========================================================================================
当你需要快速查找信息时,参考这些文档:
| 问题 | 参考文档 | 位置 |
|---|---|---|
| "我需要修改哪些参数?" | NOR_FLASH_CONFIG_PARAMETER_GUIDE.md | 第一部分 |
| "如何测试 NOR Flash?" | NOR_FLASH_TESTING_QUICK_START.md | 全文 |
| "驱动架构是什么?" | NOR_FLASH_ARCHITECTURE.md | 全文 |
| "支持哪些 Flash 芯片?" | flash_config_info.c | 第 50-150 行 |
| "查看 SFC 驱动源码" | sfc.c | src/drivers/drivers/sfc/ |
| "看日志使用示例" | log_manager_examples.c | Example 9 |
| "littlefs 配置" | littlefs_adapt.h | 文件头部注释 |
========================================================================================
签名与确认
========================================================================================
配置完成确认
我已根据以上清单完成所有配置:
开发者签名: ________________ 日期: ____________
我已验证以下项目:
- [ ] 硬件连接正确
- [ ] 所有参数已填写
- [ ] 编译成功
- [ ] 烧录成功
- [ ] 测试通过
是否所有项目都打勾? 是 [ ] 否 [ ]
如果有"否",请说明原因:
________________________________________________________________________
下一步计划:
________________________________________________________________________
快速求助
如果卡在某个地方,检查以下列表:
| 症状 | 快速解决 |
|---|---|
| 编译出错说 SFC 找不到 | 检查 CONFIG_HAS_SFC=y |
| Flash ID 读着是 0 | 检查 SPI 接线,特别是 MISO |
| littlefs 挂载失败 | 检查分区地址是否対齐 |
| 写入成功但读不出 | 调用 fs_adapt_sync(fd) |
| 性能低于 10MB/s | 改用 QUAD_READ 或提高 SPI 频率 |
下一步: 完成此清单后,开始 NOR_FLASH_TESTING_QUICK_START.md 的测试!🎉