全志A64启动时卡在U-Boot,常见原因有哪些?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
祁圆圆 2026-04-03 13:45关注```html一、现象层:UART日志定位卡点(最表层可观测信号)
全志A64启动卡顿的首要判断依据是串口(UART0)输出。典型停顿位置包括:
spl: start(SPL未执行)、DDR init...(DRAM初始化中止)、Hit any key to stop autoboot(U-Boot主镜像加载成功但bootcmd异常)。若完全无输出,需优先排查UART0硬件连接(TX/RX是否反接)、电平匹配(3.3V TTL)、波特率(默认115200,但部分定制板为921600)及引脚复用配置(如PA13/PA14是否被误设为GPIO或SPI功能)。二、介质层:Boot ROM加载路径完整性验证
- SD卡/eMMC分区结构:必须满足全志规范——boot0位于LBA 0(512B对齐),boot1位于LBA 16(8KB偏移),且均需通过
fex2bin工具烧写; - 镜像签名与校验:A64 Boot ROM强制校验boot0头结构(含magic、length、checksum),任意字段错位将导致SPL不跳转;
- 介质兼容性:部分高速UHS-I SD卡在A64 ROM阶段存在时序兼容问题,建议使用Class10及以上但非UHS总线模式的卡进行回归测试。
三、固件层:U-Boot构建与配置深度稽核
配置项 必要性 典型错误表现 CONFIG_SPL必需 SPL未启用→卡在“spl: start”后无后续日志 CONFIG_SUNXI_EMAC网启依赖 tftpboot失败但串口正常→常被忽略 CONFIG_SUNXI_RSBAXP803通信基础 PMIC读取超时→电压异常却无报错 四、硬件抽象层:时钟树与电源管理协同分析
A64依赖多级PLL(PLL_PERIPH0/1, PLL_VIDEO等)驱动不同总线。常见错误包括:
① 在arch/arm/mach-sunxi/clock.c中误设cpu_freq为1.2GHz(超规格)导致AXI总线锁死;
② AXP803初始化失败(drivers/power/sunxi_pmic.c中i2c_read返回-ENODEV),根源常为PCB上I²C上拉电阻缺失或RST_N悬空;
③ 未在FEX中正确配置[pmu_power_supply]节区,导致VDD-CPU电压被锁定在0.8V以下,无法完成DRAM训练。五、物理层:DRAM初始化失败的跨域归因
graph TD A[DDR初始化失败] --> B{是否输出“DDR training pass”?} B -->|否| C[时序参数不匹配
• tRFC/tRP/tRCD等
• ZQ校准电阻值偏差] B -->|是| D[PCB信号完整性问题
• CLK/ADDR/DQS走线长度差>15ps
• VREF未做AC耦合] C --> E[修改dram_para.fex中的dram_tpr10/dram_zq] D --> F[实测TDR阻抗+仿真S参数修正布线]六、运行时层:U-Boot环境变量链式故障
执行
printenv bootcmd若返回空或bootz 0x4a000000(无效地址),说明env已损坏。修复方式包括:
• 短接eMMC的CMD与GND进入USB烧录模式,用PhoenixSuit重刷完整镜像;
• 若支持saveenv,可在U-Boot命令行手动设置:
setenv bootcmd 'fatload mmc 0:1 0x4a000000 zImage; fatload mmc 0:1 0x4f000000 sun50iw1p1.dtb; bootz 0x4a000000 - 0x4f000000'
• 强制fallback机制:在include/configs/sun50iw1p1.h中定义CONFIG_BOOTCOMMAND作为硬编码兜底。七、系统级验证:交叉比对与黄金样本法
当单点排查陷入僵局时,推荐采用“黄金样本对照法”:
```
① 使用官方SDK(如LicheePi Zero A64 SDK v2022.04)编译标准镜像,在同一硬件平台验证;
② 对比boot0.bin的SHA256哈希值(标准值:e7b9a2c1...);
③ 利用sunxi-fel工具dump内存:先执行fel write 0x40000000 /dev/zero 0x1000清空DRAM,再逐段读取SPL加载区域(0x10000~0x1ffff)比对CRC;
④ 原理图逆向验证:确认A64的BOOT_MODE引脚(PB22/PB23)是否按设计接地/悬空,避免ROM误入UART下载模式。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- SD卡/eMMC分区结构:必须满足全志规范——boot0位于LBA 0(512B对齐),boot1位于LBA 16(8KB偏移),且均需通过