尊敬的香榭丽舍
我尝试运行简单的裸机 DSP F/W (只是 LED 闪烁...) AM5728 GP EVM B/D 上运行的软件。 (处理器 SDK Linux 06.03.00.106)
我通过 JTAG 调试器检查了我的 DSP f/w 与 CCS、它运行正常!!!
(没有任何引导阶段或保持 u-boot 阶段、两者都可以。)
因此、我将".out"文件复制到"/lib/firmware/dra7-dsp1-fw.xe66 "上的 Linux 文件系统路径。
然后我重新启动了一个 B/D 以在内核启动序列中使用 remoteproc 启动 DSP F/W。。
下面是使用 remoteproc 启动内核的消息...
root@am57xx-EVM:~# dmesg | grep remoteproc [7.535443] remoteproc remote0:588200.IPU 可用 [ 7.701710] proc remoteproc proc1:5502000.IPU 可用 [ 7.852374] remoteRemoteproc removeproc 2:408000.dsp 可用 [ 7.948015] mspc remote2:1150001.001.mspc remoteDSP 可用] 启动 FW 映像 dra7-dsp1-fw.xe66、大小为742408 [ 8.246866] remoteproc remoteproc0:启动588200.IPU [ 8.252731] remoteproc remotecproc0:启动 FW 映像 dra7-ippu1-fw.xem4、大小为6884184 [ 8.303815] remotepre 8.52000-1 :启动 mute1.451080 ws 已注册 远程处理器0 (类型7)[8.428313]远程处理器远程处理器0:远程处理器588200.IPU 现已启动[8.709654]远程 处理器处理器进程1:已注册的远程处理器1 (类型7)[8.741043]远程处理器远程处理器1:远程处理器5502000.IPU 现已启动[9.529.442]远程处理器远程处理器启动[DSP 51003] 启动 FW 映像 dra7-dsp2-fw.xe66、大小20483260 [9.678107] remoteproc remoteproc 3:注册的 virtio2 (类型7) [9.746024] remoteproc remoteproc remoteproc 3:远程处理器41000000.dsp 现已启动 [14.241376] remoteproc remoteproc 4:14.74604b2dprc remote2u.24674b4000:14.4bpr854.b24674bpr85] remote45b4000可用 提供4b2b8000.PRU
我认为 DSP1 F/W 出现了问题、
因为没有消息:“远程处理器40800000.dsp 现已启动”
这是我的 DSP 代码(简单状态 LED 闪烁环路)
void main (void) { //焊盘配置 board_initCfg boardCfg; boardCfg = Board_init_unlock_MMR | Board_init_uart_stdio | Board_init_module_clock | Board_init_PINMUX_config; board_init (boardCfg); //启用 GPIO 时钟 HW_WR_REG32 (CSL_MPU_L4PER_CM_CORE_RESG+CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO7_CLKCTRL_REG、0x102); while ((HW_RD_REG32 (CSL_MPU_L4PER_CM_CORE_regs+CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO7_CLKCTRL_REG)&(0x00030000U))!= 0x0) { ; } GPIOModuleReset (CSL_DSP_GPIO7_regs); GPIOModuleEnable (CSL_DSP_GPIO7_regs); GPIODirModeSet (CSL_DSP_GPIO7_regs、8、GPIO_DIR_OUTPUT); GPIOPinWrite (CSL_DSP_GPIO7_regs、8、GPIO_PIN_HIGH); GPIODirModeSet (CSL_DSP_GPIO7_regs、9、GPIO_DIR_OUTPUT); GPIOPinWrite (CSL_DSP_GPIO7_regs、9、GPIO_PIN_HIGH); GPIODirModeSet (CSL_DSP_GPIO7_regs、14、GPIO_DIR_OUTPUT); GPIOPinWrite (CSL_DSP_GPIO7_regs、14、GPIO_PIN_HIGH); GPIODirModeSet (CSL_DSP_GPIO7_regs、15、GPIO_DIR_OUTPUT); GPIOPinWrite (CSL_DSP_GPIO7_regs、15、GPIO_PIN_HIGH); HW_WR_FIELD32_RAW (GPO7_8_PINMODE_ADDR、PINMUX_SETMASK、 0、GPO7_8_PINMODE_VAL); HW_WR_FIELD32_RAW (GPO7_9_PINMODE_ADDR、PINMUX_SETMASK、0、GPO7_9_PINMODE_VAL); HW_WR_FIELD32_RAW (GPO7_14_PINMODE_ADDR、PINMUX_SETMASK、0、GPO7_14_PINMODE_VAL); HW_WR_FIELD32_RAW (GPO7_15_PINMODE_ADDR、PINMUX_SETMASK、0、GPO7_15_PINMODE_VAL); while (1) { GPIOPinWrite (CSL_DSP_GPIO7_regs、8、GPIO_PIN_HIGH); GPIOPinWrite (CSL_DSP_GPIO7_regs、9、GPIO_PIN_LOW); GPIOPinWrite (CSL_DSP_GPIO7_regs、14、GPIO_PIN_HIGH); GPIOPinWrite (CSL_DSP_GPIO7_regs、15、GPIO_PIN_LOW); 延迟(4000000); GPIOPinWrite (CSL_DSP_GPIO7_regs、8、GPIO_PIN_LOW); GPIOPinWrite (CSL_DSP_GPIO7_regs、9、GPIO_PIN_HIGH); GPIOPinWrite (CSL_DSP_GPIO7_regs、14、GPIO_PIN_LOW); GPIOPinWrite (CSL_DSP_GPIO7_regs、15、GPIO_PIN_HIGH); 延迟(4000000); } }
我还在与状态指示 GPIO 相关的内核器件树上阻止 GPIO 设置。
am57xx-beagle-x15-common.dtsi // LED{ // 兼容="GPIO-LED"; // led0{ // 标签="beagle-x15:usr0"; // GPIO =<&GPIO7 9 GPIO_ACTIVE_HIGH>; // linux、default-trigger ="检测信号"; // 默认状态="off"; // }; // LED1{ // 标签="beagle-x15:USR1"; // GPIO =<&GPIO7 8 GPIO_ACTIVE_HIGH>; // linux、default-trigger ="CPU0"; // 默认状态="off"; // }; // LED2{ // 标签="bagle-x15:usr2"; // GPIO =<&GPIO7 14 GPIO_ACTIVE_HIGH>; // linux、default-trigger ="mmc0"; // 默认状态="off"; // }; // LED3{ // 标签="beagle-x15:usr3"; // GPIO =<&GPIO7 15 GPIO_ACTIVE_HIGH>; // linux、default-trigger ="磁盘活动"; // 默认状态="off"; // }; // };
但在启动后、状态 LED 全部熄灭。
因此、我需要了解裸机 DSP f/w 为何不起作用。
在 Linux 环境中、
我在以下链接中找到了 CCS 和 JTAG 的调试技术"Out of reset":
但是、这些内容仅适用于带有 EvmK2的 C66x!!
在 GP EVM AM5728上不工作....
CCS 中出现弹出错误:
连接到目标时出错: (错误-1180 @ 0x0) 器件保持复位状态。 使器件退出复位状态、然后重试此操作。 (仿真包9.2.0.00002)
以及 CCS 中的日志:
Cortex_M4_IPU1_C0:GEL 输出:->>>AM572x Cortex M4启动序列正在进行中... <<-- Cortex_M4_IPU1_C0:GEL 输出:--> AM572x Cortex M4启动序列完成! <<-- Cortex_M4_IPU1_C1:GEL 输出:--> AM572x Cortex M4启动序列正在进行中... <<--- Cortex_M4_IPU1_C1:GEL 输出:--> AM572x Cortex M4启动序列完成! <<-- Cortex_M4_IPU2_C0:GEL 输出:--> AM572x Cortex M4启动序列正在进行中... <<-- Cortex_M4_IPU2_C0:GEL 输出:--> AM572x Cortex M4启动序列完成! <<-- Cortex_M4_IPU2_C1:GEL 输出:--> AM572x Cortex M4启动序列正在进行中... <<--- Cortex_M4_IPU2_C1:GEL 输出:--> AM572x Cortex M4启动序列完成! <<--- C66xx_DSP1:GEL 输出:--> AM572x C66x DSP 启动序列正在进行中... <<--- C66xx_DSP1:GEL 输出:--> AM572x C66x DSP 启动序列完成! <<--- C66xx_DSP2:GEL 输出:--> AM572x C66x DSP 启动序列正在进行中... <<--- C66xx_DSP2:GEL 输出:--> AM572x C66x DSP 启动序列完成! <<-- CortexA15_0:GEL 输出:--> AM572x Cortex A15启动序列正在进行中... <<--- CortexA15_0:GEL 输出:--> AM572x Cortex A15启动序列完成! <<-- CortexA15_1:GEL 输出:--> AM572x Cortex A15启动序列正在进行中... <<--- CortexA15_1:GEL 输出:--> AM572x Cortex A15启动序列完成! <<-- 德州仪器 XDS2xx USB 调试探针/C66xx_DSP1:加载程序前必须连接目标方。 德州仪器(TI) XDS2xx USB 调试探针/C66xx_DSP2:加载程序之前必须连接目标。 IcePick_D:GEL 输出:IPU RTOS 从等待复位中释放。 IcePick_D:GEL 输出:IPU SIMCOP 从等待复位中释放。 IcePick_D:GEL 输出:IVAHD C66从等待复位中释放。 IcePick_D:GEL 输出:IVAHD ICONT1从等待复位中释放。 IcePick_D:GEL 输出:IVAHD ICONT2被从等待复位中释放。 C66xx_DSP1:连接到目标时出错:(错误-1180 @ 0x0)器件保持在复位状态。 使器件退出复位状态、然后重试此操作。 (仿真包9.2.0.00002)
我使用以下 DSP 代码测试了其他测试:
void main (void) { int ncnt = 0; while (1) { 延迟(4000000); nCnt++; } }
而且也没有消息:“远程处理器40800000.DSP 现在已启动”
可能需要设置 link.cmd 文件的系统信息??
以下是我的 link.cmd 文件:
-stack 0x1000 /*软件堆栈大小 */
-heap 0x2000 /*堆区域大小 /*
指定系统内存映射*/
内存
{
RST_START: org = 0x00800000 len = 0x0300
IRAM_MEM: org = 0x00800300 len = 0x7c00
MMU_TLB:origin = 0x4031C000 length = 0x000004000
/* SBL 将使用地址0x80000000处的1KB 空间用于 EVE */
DDR3_A8:org = 0x80000400 len =(0x0B000000 - 0x400)/* 176 MB *
DDR3_boot: org = 0x000000 8Blen = 0x00010000 // 32 MB */
DDR3_DSP: org = 0x8B010000 len = 0x01FF0000 /* 32 MB */
DDR3_M3VPSS:org = 0x8D000000 len = 0x01000000 // 16 MB */
DDR3_M3VIDEO:org = 0x8E000000 len = 0x01000000 // 16 MB */
DDR3_SR0: org = 0x8F000000 len = 0x01000000 /* 16 MB */
}
//指定段分配到内存*/
SECTIONS
{
boot:
{
rts*.lib (.text)
}load > ddr3_boot
.cachetest_ddrbuf > IRAM_MEM
组:加载> IRAM_MEM
{
.bss: /*未初始化或零初始化*/
.neardata:
.rodata:
}
Board_IO_DELAY_DATA:LOAD > IRAM_MEM
Board_IO_DELAY_CODE:LOAD > IRAM_MEM
.cSL_vect:load > RST_start
.vects: load > IRAM_MEM
L2_int:LOAD > IRAM_MEM
pmIdleFunc:load > IRAM_MEM
init:load > IRAM_MEM
.cio :加载> IRAM_MEM
text:load > IRAM_MEM /*代码 *
.data:load > IRAM_MEM /*初始化的全局和静态变量。 *
/*全局和静态变量。 *
RUN_START (BSS_START)
RUN_END (BSS_END)
.const:LOAD > IRAM_MEM /*全局常量 *
.cinit:加载> IRAM_MEM
stack:load > IRAM_MEM /*软件系统堆栈 */
.far:load > IRAM_MEM
.plt :load > IRAM_MEM
.fardata:load > IRAM_MEM
.switch:load > IRAM_MEM
.my_sect_DDR:load > IRAM_MEM
.sysmem:load > IRAM_MEM
}
我认为下面的情况是可疑的…
DDR3_boot: org = 0x000000 8Blen = 0x00010000 // 32 MB */
我还使用以下进行了测试,但结果相同...(无消息:远程处理器40800000.DSP 现已启动)
DDR3_boot: org = 0x99000000 len = 0x04000000 /* 32 MB */
如何计算 DDR3_boot org 和 len???
请检查我的 DSP 项目:
e2e.ti.com/.../am572x_5F00_dsp0_5F00_baremetal.zip
我的 CMA 和 CMEM 设置如下:
am57xx-beagle-x15-common.dtsi 存储器@ @ @0{device_type ="存储器";reg =<0x0 0x80000000 0x0 0x80000000>;// 2GB};保留存储器{#address-cells =<2>;#size-cells =<2>;ranges;ippu2_memory_region:i5800000 = 0x99000" 共享存储器区;"dma-region = 0x99000";dma-dma-region = 0x99000";dma-region dma-region = 0x99000";dma-dma-region dma-region = 0x99000";dma-region dma-region = 0x99000";dma-dma-dma- reg =<0x0 0x99000000 0x0 0x4000000>; 可重用; status ="确定"; }; ipu1_memory_region:ipu1-memory@ @9d000000{compatible ="共享 dma-pool";reg =<0x0 0x9d000000 0x0 0x2000000>;可重用;status ="确定";};dsp2_dma-pool = 0x800000000;0xdma-region = 0x000000;"0xdma-region dma-status";0xdma-que";0xdma-dma-dma-que" am57xx-evme-cmem.dtsi /{ 保留存储器{ #address-cells =<2>; 大小单元格=<2>; 范围; cmem_block_mem_0:cmem_block_mem@a0000000{ reg =<0x0 0xa0000000 0x0 0x0c000000>; 无地图; 状态="正常"; }; cmem_block_mem_1_ocmc3:cmem_block_mem@40500000{ reg =<0x0 0x40500000 0x0 0x100000>; 无映射; 状态="确定"; }; }; cmem{ 兼容="ti、cmem"; #address-cells =<1>; #size-cells =<0>; #pool-size-cells =<2>; 状态="正常"; cmem_block_0:cmem_block@0{ reg =<0>; memory-region =<&cmem_block_mem_0>; cmem-buf-pools=<1 0x0 0x0c000000>; }; cmem_block_1:cmem_block@1{ reg =<1>; memory-region =<&cmem_block_mem_1_ocmc3>; }; }; };
和内存状态:
根部@am57xx-evm:~ @ @ @ @/proc/iomem 20013000-2ffffff:MEM 20100000-201ffff:0000:00:00.0 40300000-4037ffff:40300000。ocmcram 40500000-4051700fff:CMEM 40800000-40847fff:l40800d4000-40fff :4040406400f:1504040f:4064000-040f:4064000-040f:404064000-040f:4064000-040f:4064000-040f:4064000-040f:4064000-040f OCP 45000000-45000fff : OCP 4802000-4802001f : serial 48032000-4803207f : timer@48032000 48034000-4803407f : timer@48034000 48036000-4803607f : timer@48036000 4804804804804804804804804804804804804804804804804000-4803e07f : timer@ @ @ @ @ @ @ @ @ @48048048048048048048048048048051000-480551000 f: 100551000 gpio 54000-560055000 f: 1004000-400000 gpio 54000-4804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804804000-4804000-4804000-480534000-48051000 I2C@4807c000 48086000-4808607f:计时器@48086000 48088000-4808807f:计时器@48088000 48090000-48091fff:rng@48090000 4809c000-4809c3ff:MMC@4809c000 4805000 480a5000-480400000 a 509f:@ @ @ @ @ @ @ @ @ @48048484484484000-48448448244000-48484824f:48448484848484484484484bf:48448484484484b4000:484484484b4000 计时器@48824000 48826000-4882607f:计时器@48826000 48828000-4882807f:计时器@48828000 4882a000-4882a07f:计时器@4882a000 4882c000-4882c07f:计时器@ @ @ @ @ @ @ @ @ @ @4882c000 4880000_48848800fr:4884880000:48848800fr:48848800_48800f:48848800fr 48848800f:48848800_48800f:48848800f:48848800f:48848800fr 48848800f:48848800_48800f:48848848800f:48848848800_48800fr 48848800f @ bandgtrl@4a0021e0 4a002380-4a0023ab:bandgap@4a0021e0 4a0023c0-4a0023fb:bandgap@ @ @ @ @ @4a0021e0 4a00246c-4a00246f:ldo 地址4a002470-4a0024072-4a0024072-a02456f:b4a4000-4a04000-4a024074-bdma:4a024074-a024074-a024074-a024bdma-4a024074-a024bdma-4a024074-a024bdma-4a024bdma-4a024bdma:4a024076-4a024074-a024074-a024bdma-4a024bdma-4a024074-a024bdma-4a024bdma-4a024074-a0a024bdma-4a024bdma @@ phy_TX 4a084c00-4a084c3f:pll_ctrl 4a085000-4a0853ff:phy@4a085000 4a090000-4a09001f:ocp2scp@4a090000 4a074000-4aaeaeaeaeaeaeaeaeaeaeefphy_phy_4a094400-4a074000-4a074000-4a074000-4a074000-4a0742-4a074000-4a074e074-0743-4e074-0743-4e074-0742-0742-0742-0742-074e0742-074-0742-074e0742-074-074-0724-0742-0742-0742-0742-074e0742-074-0743-4e074-0724-0743-074-0724-074-074-074-0742-074-074-074-074-073-074e074-074-074-074-0742-0742-0742-074- 设置地址 4ae0c154-4ae0c157:ldo-address 4ae0c158-42240c15b:ldo-address 422410000-42200101ff:gpio@4ae10000 4ae14000-42241407f:wdt@4aeae4000-4b24000bf :timer@ @ @ @4b240004b2b24b2b24bf:4b2b2b2b2b2b2b2b2b4b4000-b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4bf:24b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4000-b4b4b4b4b4b4b4b4b4b2 debug 4b2a4000-4b2a43ff:control 4b2a4400-4b2a44ff:debug 4b2b4000-4b2b6fff:IRAM 4b2b8000-4b2b2障 板:IRAM 4b500000-4b50009f:AES@ @ @ @4b5000004b700000-4b70000584000-4b5b5800f:100b5840000f:100b5b5rf:100b5840000100b5b5b5b40000f:100b5840000f:100b5840000f:100b5b5b5b5b40000f:100b5b5b5b5b40000f:100b58400b5b5b5b5b5b5b40000f:100b5b5b400b5b400b5b400b5b400b400b5b400b5b5b400b5b400b5b400b5b400b400b5b5b400b400b5b5b5b400b5b pll2 58040000-580401ff:wp 58040200-5804027f:pll 58040300-5804037f:phy 58060000-58078fff:core 5882000-5882ffff:l2ram58882000-588820ff :mu@ @~ 58882000 80000000-58078ffff:corp :/proc/cmem 8000-800000-8000-8000 dffff:l2ramf RAM:l600-8000-5888000f:inuerf:inuf:1000:1000 emb:inuf 1 bufs size 0xc000000 (请求0xc000000) 池0忙 bufs: ID 0:phys addr 0xa0000000 (缓存) 池0空闲 bufs:
如何在这种情况下进行调试?
您能为我提供此问题的解决方案吗?
谢谢你。