ram初始化后出现u-boot硬故障错误



我在Waveshare coreH7 stm32h743板上移植了U-boot。我使用了stm32h743迪斯科文件和设备树作为移植模板。我的板载SDRAM是IS42S16400J,它是8MBytes。我已经计算了我的sdram的参数,并将它们放在我的板设备树文件中,如下所示:

/*
* Memory configuration from sdram datasheet IS42S32800G-6BLI
* firsct bank is bank@0
* second bank is bank@1
*/
bank2: bank@1 {
st,sdram-control = /bits/ 8 <NO_COL_8
NO_ROW_12
MWIDTH_16
BANKS_4
CAS_3
SDCLK_2
RD_BURST_EN
RD_PIPE_DL_0>;
st,sdram-timing = /bits/ 8 <TMRD_1
TXSR_1
TRAS_1
TRC_6
TRP_2
TWR_1
TRCD_1>;
st,sdram-refcount = <300>;
};

此外,我已经配置了rcc值,以提供100MHz的dram。

但是当uboot开始初始化时,它会进入硬故障中断。

这是日志:

lib/fdtdec.c:fdtdec_setup_mem_size_base_fdt() fdtdec_setup_mem_size_base_fdt: Initial DRAM size 2000000
include/initcall.h:initcall_run_list() initcall: 08008a89
common/board_f.c:setup_dest_addr() Monitor len: 00039F80
common/board_f.c:setup_dest_addr() Ram size: 02000000
common/board_f.c:setup_dest_addr() Ram top: D2000000
include/initcall.h:initcall_run_list() initcall: 08008665
include/initcall.h:initcall_run_list() initcall: 0800117d
arch/arm/lib/cache.c:arm_reserve_mmu() TLB table from d1ff0000 to d1ff4000
include/initcall.h:initcall_run_list() initcall: 080088c3
include/initcall.h:initcall_run_list() initcall: 080088c7
include/initcall.h:initcall_run_list() initcall: 080086b1
common/board_f.c:reserve_uboot() Reserving 231k for U-Boot at: d1fb6000
include/initcall.h:initcall_run_list() initcall: 080088ed
common/board_f.c:reserve_malloc() Reserving 1032k for malloc() at: d1eb4000
include/initcall.h:initcall_run_list() initcall: 08008821
Hard fault
pc : 0800087e    lr : 00000000    xPSR : 21000000
r12 : d1eb3ff0   r3 : 00000000    r2 : 00000010
r1 : 00000000    r0 : d1eb3fb0
Resetting CPU ...

问题出在哪里?ram初始化失败了吗?为什么?也许参数错误?如何才能知道ram已成功初始化?这是u-boot:的正常信息日志

U-Boot 2020.07-00610-g610e1487c8-dirty (Aug 04 2020 - 00:34:13 +0430)
Model: Waveshare STM32H743i-Coreh7 board
DRAM:  Hard fault
pc : 0800087e    lr : 00000000    xPSR : 21000000
r12 : d1eb3ff0   r3 : 00000000    r2 : 00000010
r1 : 00000000    r0 : d1eb3fb0
Resetting CPU ...

您的ram大小错误。正如您所提到的,实际的ram大小是8MB,即十六进制数字中的0x7A1200。但在U-boot log中;初始DRAM大小2000000";。您应该在板的设备树中更改它。

memory {
device_type = "memory";
reg = <0xd0000000 0x7A1200>;
};

最新更新