以下是针对杰理(Zhuhai Jieli Technology)芯片外挂SD NAND的完整技术方案,结合硬件设计、软件配置及常见问题解决,整理为系统化指南:
SPI引脚复用方案
PA10
:SDDAT/SPI_CS(片选)
PA11
:SDCLK/SPI_DI_DO(单线双向数据)
PA12
:SDCMD/SPI_CLK(时钟)
推荐引脚配置(已验证兼容性):
关键限制:
使用非推荐引脚需自行测试稳定性;
软件SPI暂不支持烧写外挂FLASH命令,需提前烧录FAT文件系统
SD卡与I²C外设复用
冲突处理:
SD卡检测需改用GPIO电平检测或CLK信号检测,禁用CMD检测;
I²C操作时挂起SD卡功能(调用 sd_io_suspend()
),结束后恢复(sd_io_resume()
),避免死锁。
SPI与SD卡初始化
关键宏定义修改(app_config.h
)
#define TCFG_FLASH_SPI_TYPE_SELECT 0 // 启用软件SPI#define TCFG_HW_SPI1_MODE SPI_MODE_UNIDIR_1BIT // 单线半双工模式#define TCFG_NORFLASH_DEV_ENABLE ENABLE_THIS_MODULE // 使能外挂FLASH
SD卡分组调整:
在 device_list.c
中将SD卡设为 B组
FAT文件系统集成
分区配置(norflash_fat_dev_data
结构体)
.start_addr = 0, // 起始地址.size = 2*1024*1024, // 容量需≤实际FLASH大小(如25Q128=16MB)
容量超限处理:
若配置尺寸大于物理FLASH,上电会复位,需在初始化时动态适配容量
PC模式格式化与文件操作
启用宏 TCFG_APP_PC_EN=1
,通过USB连接电脑格式化SD NAND为FAT分区;
支持直接拖拽音频文件到设备,音乐模式调用FATFS接口(f_open
, f_read
)播放
方法 | 步骤 | 适用场景 | 工具依赖 |
---|---|---|---|
二次打包烧录 | 资源文件 → 杰理工具打包为.dir → 二次打包为.dir_ex_flash → 通过download_bat.c 烧写 | 量产前调试 | 杰理官方打包工具 |
直接BIN烧录 | 单次打包为.dir → 用WinHex全盘复制 → 生成与FLASH等大的BIN文件 → 烧录器写入 | 批量生产 | WinHex + 烧录器 |
U盘分区克隆 | U盘分区为FLASH大小 → FAT格式化并存入文件 → WinHex克隆分区数据为BIN | 无物理FLASH时快速验证 | DiskGenius + WinHex |
WinHex操作要点:全选设备数据(Ctrl+A)→ 复制至新建等尺寸文件 → 保存为BIN
模式切换串音(如FM与TF卡同时播放)
根因:任务退出不彻底;
修复:在SD卡插入消息中强制退出FM任务
case MSG_SD1_ONLINE: if (task_get_cur() == TASK_ID_FM) { task_fmmode_exit(); // 退出FM任务 delay_2ms(10); // 延时确保资源释放 } // ...挂载SD卡
SPI驱动失效
检查点:
确认 spi.c
中硬件SPI使能(如 #define SPI1_ENABLE 1
);
核对物理引脚与IC规格书是否一致,避免SDK默认配置错误
FLASH初始化失败
日志分析:
复位信息提示容量不符 → 重设 .size
参数;
无识别日志 → 检查CS引脚电平及SPI速率(建议≤4MHz)
硬件设计:优先采用已验证引脚复用方案,缩短杜邦线长度防信号干扰;
量产准备:选择 二次打包烧录(灵活调试)或 BIN直接烧录(高效量产);
资源管理:通过FATFS实现文件按名访问,避免底层Flash操作
下一篇:sdnand怎么进入spi模式