一、背景

  • 背景:使用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或者,
[图片]
[图片]

菊花链设置流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

官方回复,此菊花链配置文件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起始地址也可以运行。
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐