前言:X9HP ptg4.3 在将 spi6 资源调整至 safety 后出现 cpu 0 data abort
【问题详述】:
在将 spi6 资源从 ap 调整到 safety 后,调用 hal_spi_creat_handle() 函数时出现异常报告:cpu 0 data abort, synchronous external abort on write。
【过程分析】:
- 调整资源:根据文档《SemiDrive_基于Domain的资源分配指南_Rev0.5.pdf》修改代码。
- 开启 spi_hal 和 spi_demo:在 safety 中打开 SUPPORT_SPI_MASTER_DEMO 和 SUPPORT_SPI_MASTER_SDDRV 编译 spi_demo 命令。
- 确认问题:根据日志确认,在操作 spi6 的寄存器时,safety 出现了 cpu data abort。
- 分析 hal_spi_creat_handle 函数:该函数会遍历资源列表中的 spi,进行寄存器的 hw_init 操作。访问 spi6 寄存器导致系统崩溃,怀疑资源还没有真正调整到 safety。
- 在 ap1 设备树中使能 spi6 的时钟,启动时系统崩溃报 synchronous external abort,说明资源也不在 ap1 上,domain_res.h 的配置生效。
- 恢复默认的资源分配(spi6 在 ap1),调用 hal_spi_creat_handle,程序正常运行,说明 safety 的 spi 驱动和 hal 没问题。
- 分阶段定位问题:在 soc_init、control_pannel app 中都调用 hal_spi_creat_handle,前者正常,后者 cpu data abort,说明问题是在 dil2 之后出现的。
- 擦除 ap1 和 ap2 的所有固件(包括 preloader),症状和前述一样,说明问题和 ap1、ap2 无关。
- 排查 secure:在 boot_secure 函数前后分别调用 hal_spi_creat_handle,前者正常,后者 cpu data abort,说明问题的出现和 secure 的 ssystem 有关。
- 相同的配置在 ptg4.0 可行,在 ptg4.3 出错。怀疑 ptg4.3 的 ssystem 做了更改,替换 ptg4.0 的 ssystem.bin,访问 spi6 正常,但因版本不适配,两三秒后系统崩溃。
- 芯驰关闭 ssystem 防火墙后重编 ssystem,替换烧录到板子上,问题解决。
【解决方案】:
ptg4.3 开启了防火墙导致 safety 访问 spi6 失败,关闭防火墙并重新编译 ssystem 即可成功将 spi6 资源切换到 safety。
评论