NOR FLASH 驱动参数配置检查清单

2 阅读6分钟

/**

  • 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.hlittlefs_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   (20242614: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.csrc/drivers/drivers/sfc/
"看日志使用示例"log_manager_examples.cExample 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 的测试!🎉