使用ICE-1000下载程序到SPI flash(2块ADSP-21565搭载w25Q256)
本文介绍了在ADSP-2156x平台上实现SPI Flash驱动的方案及烧录流程。驱动设计采用模块化架构,支持多种Flash芯片和访问模式。重点阐述了使用cldp工具进行程序烧录的步骤,包括菊花链配置方法、常见错误排查以及Bootloader处理策略。针对双DSP共用SPI Flash的情况,详细说明了带/不带Bootloader时的不同处理方式。该方案为嵌入式系统开发提供了可靠的Flash编程解
一、背景
- 背景:使用ICE-100将DSP程序(2块ADSP-21565)下载到SPI Flash(型号是w25Q256),官方支持的SPI flash驱动为is25lp512m。
二、操作步骤
驱动生成
在ADSP-2156x硬件平台上实现SPI Flash驱动,通过抽象化的架构设计,为不同厂商和容量的SPI Flash芯片(如Winbond W25Q256、ISSI IS25LP512M等)提供统一的擦写编程接口。核心架构包含:
- 可配置的芯片支持层:通过flash_info_cfg.h集中管理不同Flash芯片的参数(容量、页大小、扇区大小)和指令集差异
- 4字节地址模式适配:自动处理16MB以上大容量Flash的地址模式切换(W25Q256需要4字节模式,IS25LP512M使用3字节模式)
- 多重访问模式支持:提供单线、双线、四线SPI模式操作,兼顾兼容性和性能优化
- 完整的存储管理功能:包括扇区擦除(4KB)、页编程(256字节)、芯片复位、状态查询、忙等待机制等
该驱动使开发人员能够在不修改核心逻辑的情况下,通过简单配置文件切换支持不同的Flash芯片。
cldp烧录命令
- elfloader.exe将编译出来的.dxe文件转成.ldr文件(dsp程序编译脚本已包含,此步骤可省略,该设置看文档 《CCES 2.9.0 Loader and Utilities Manual》)
D:\git\dspbuildframework\Tools\cces\elfloader.exe -proc ADSP-21565 -b SPIMASTER -bcode 0x1 -f hex -Width 8 -init "D:\git\dspbuildframework\p567_dsp\ldr\2156x_init.dxe" -o ADSP21565_0.ldr "D:\git\dspbuildframework\p567_dsp\Build\Release\PREMIUM_APP_DSP0.dxe"
- cldp.exe进行烧录
.\cldp.exe -driver -driver "C:\Analog Devices\EV-2156x_EZ-KIT-Rel3.0.0\EV-2156x_EZ-KIT\Examples\Device_Programmer\Legacy_SPI\w25q_dpia_2156x\EV-SOMCRR\21569\w25q_dpia_21569\Debug\w25q_dpia_21569.dxe" -cmd prog -config "D:\git\dspbuildframework\p567_dsp\config.ini" -format bin -file "D:\git\dspbuildframework\p567_dsp\Build\Release\PREMIUM_BOOT.bin"
此部分需要考虑的问题我们的电路板是自定义的,存在两块21565,需要配置菊花链,配置菊花链的教程参见
https://ez.analog.com/dsp/software-and-development-tools/cces/w/documents/13839/how-to-program-two-adsp-21364-on-the-same-jtag-chain-using-cldp-audit或者,![[图片]](https://i-blog.csdnimg.cn/direct/ee247e72772c458dacd294797a8ed844.png)
![[图片]](https://i-blog.csdnimg.cn/direct/9cda76f6bd5e40b0947d7d98be8a82e1.png)
菊花链设置流程



官方回复,此菊花链配置文件config.ini如果需要在别的电脑上运行,需要下载CCES软件重新生成,不能简单复制过去
常见问题
1. Error: [TpsdkServer] Failed to connect to processor.
a. JTAG菊花链配置错误
b. 此生成的config.ini不是CCES软件生成的,或者cldp.exe应为CCES软件目录下的
2. Error Description: Failed passing JTAG loop test
a. 不能打开CCES,占用串口
b. 使用ICE-1000的ICE Test功能测试ICE-1000是否能检测到,如果报错,检查
[图片]
c. 检查硬件链接,ICE1000的链接是否接对
3. Error: [TpsdkServer] Invalid processor ID
a. 因为ADSP-21565是单核的,只能出现-core 0 ,就算是两个ADSP-21565,DSP1命令行也是-core 0
实现结果
@echo off
chcp 65001 >nul
set cldp_path=C:\Analog Devices\CrossCore Embedded Studio 2.11.1\cldp.exe
if not exist "%cldp_path%" (
echo 错误: 找不到 cldp.exe
echo 请确认路径: %cldp_path%
pause
exit /b 1
)
echo 正在烧写 BOOT.bin...
"%cldp_path%" -driver "C:\Analog Devices\EV-2156x_EZ-KIT-Rel3.0.0\EV-2156x_EZ-KIT\Examples\Device_Programmer\Legacy_SPI\w25q_dpia_2156x\EV-SOMCRR\21569\w25q_dpia_21569\Debug\w25q_dpia_21569.dxe" -cmd prog -config "config.ini" -format bin -file "BOOT.bin"
if %errorlevel% neq 0 (
echo 错误: BOOT.bin 烧写失败!
pause
exit /b %errorlevel%
)
echo 所有文件烧写成功!
pause
Bootloader和不带Bootloader
- 带Bootloader:
- Bootloader放在Flash起始区(0x03000000)。
- 应用程序放在偏移地址(如0x03001000)。
- 不带Bootloader:
- 应用程序直接烧录到0x03000000,编译时无需地址偏移。
如果使用到两块21565共用一个SPI Flash,如果不带Bootloader,需要将DSP0.bin和DSP1.bin合并烧录进去,否则DSP0复位后从Flash 0x00000000读取并执行,DSP1复位后也从Flash 0x00000000读取(默认起始地址),如果不合并bin文件,DSP1无法知道自己的程序在Flash中的位置,而如果两块分别两个SPI Flash,可以不带Bootloader只要下载到flash起始地址也可以运行。
- 应用程序直接烧录到0x03000000,编译时无需地址偏移。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

![[图片]](https://i-blog.csdnimg.cn/direct/6f320009884b4503aeed4482e16f894a.png)



所有评论(0)