使用 lpddr2 引导 sama5d2
Booting sama5d2 with lpddr2
我有一个 SAMA5D26C 和一个 LPDDR2 EDB1332BDBH-1。 CPU 成功启动 ROMBOOT 并且能够从 QSPI 内存加载 at91bootstrap。我从 at91bootstrap 获得调试输出,但我无法加载 linux.
进一步调查显示 RAM 初始化工作正常,但 CPU 在尝试将设备树从闪存加载到 RAM 时挂起。
所以我添加了这个循环:
volatile char * ptr = (char *)0x20000000;
while(1) {
dbg_info("ptr: %x value: %c\n", ptr, *ptr);
ptr += 1;
}
这给了我预期的输出:
ptr: 0x20000000 value: U
ptr: 0x20000001 value: U
...
直到:
...
ptr: 0x203ffffe value: U
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
似乎我无法访问超过 4MB 的内存,即使我的 RAM 大小是 128 MB。我已经验证我可以从 RAM 写入和读取低于 4MB 的值。
为什么不是所有的物理内存都可以访问,为什么在 0x203ffffff 之后 ptr 没有增加?
原来是 TrustZone 被禁用了。
我有一个 SAMA5D26C 和一个 LPDDR2 EDB1332BDBH-1。 CPU 成功启动 ROMBOOT 并且能够从 QSPI 内存加载 at91bootstrap。我从 at91bootstrap 获得调试输出,但我无法加载 linux.
进一步调查显示 RAM 初始化工作正常,但 CPU 在尝试将设备树从闪存加载到 RAM 时挂起。
所以我添加了这个循环:
volatile char * ptr = (char *)0x20000000;
while(1) {
dbg_info("ptr: %x value: %c\n", ptr, *ptr);
ptr += 1;
}
这给了我预期的输出:
ptr: 0x20000000 value: U
ptr: 0x20000001 value: U
...
直到:
...
ptr: 0x203ffffe value: U
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
ptr: 0x203fffff value:
似乎我无法访问超过 4MB 的内存,即使我的 RAM 大小是 128 MB。我已经验证我可以从 RAM 写入和读取低于 4MB 的值。
为什么不是所有的物理内存都可以访问,为什么在 0x203ffffff 之后 ptr 没有增加?
原来是 TrustZone 被禁用了。