答疑解惑|Uboot阶段访问某个地址导致系统挂死(DE25-Nano开发板)(地址对齐)
测试友晶DE25-Nano开发板在U-Boot阶段用md命令读取数据时出现系统挂死提示如下Synchronous Abort handler, esr 0x96000021, far 0x1ResettingCPU Code: 2a0403f3 17ffffcb 7100129f 54000181 (b94002c3)### ERROR ### Please RESET the board ###从截图可以看到命令md.b 0x1 1会返回数据而命令 md.l 0x1 1会导致系统挂死。如果是访问一个未定义的地址常量系统也会挂死下发echo md.l $YYYQ 1系统会打印md.l 1如下图所以md.l $YYYQ 1命令执行时实际是访问了地址0x1。查看md命令的格式可知md.b (Byte)按单个字节访问地址是字节对齐的所以访问地址 0x01 完全合法能正常返回数据。md.l (Long)按 4 字节访问要求 4 字节对齐的地址。因为 4 字节在 32 位系统中构成一个“字”Word将其看作一个整体进行读写。访问地址必须能被 4 整除如地址 0x00, 0x04, 0x08...否则就会产生非对齐访问Unaligned Access。而我们测试地址0x01这个地址无法被 4 整除是一个典型的非对齐地址因此导致 md.l 命令失败。md命令格式解析如下命令格式参数说明md(Memory Display)md[.b, .w, .l] address [# of objects].b (byte): 指定数据宽度1 字节.w (word): 指定数据宽度2 字节.l (long): 指定数据宽度4 字节 (默认)• address: 要读的起始内存地址• # of objects: 显示的数据个数 (十六进制)与宽度配合决定总显示字节数mw(Memory Write)mw[.b, .w, .l] address value [count].b / .w / .l : 含义同上• address: 要写入的起始地址• value: 要写入的数据值• [count]: 要写入的个数 (十六进制, 可选, 默认值为1)往期阅读答疑解惑|DE25-Nano的HPS端串口和USB Blaster III端口都是同一根物理线连接到PC两个端口可以同时使用吗答疑解惑|为DE25-Nano开发板配置Linux kernel时.config文件没有起作用是什么原因答疑解惑|DE25-Nano开发板Image制作过程中编译U-Boot时提示 internal compiler error: Illegal instruction答疑解惑|如何正确使用DE25-Nano开发板的J3口external JTAG header答疑解惑 | DE25-Nano开发板串口在访问FPGA端外设LED时卡死无任何反应答疑解惑 | DE25-Nano开发板Uboot阶段与FPGA外设交互失败DE25-Nano开发板在Programmer的 Auto Detect 下检测出来的器件和友晶官方提供的工程里器件不一样有没有关系【致敬经典探索未来】友晶DE家族双星闪耀当经典DE10遇上新锐DE25实验室该如何选最新版Quartus Prime Pro 25.1 的安装和使用演示含Questa仿真