主题中讨论的其他器件:SK-AM62B
工具与软件:
我们的定制电路板设计使用2 (MT40A2G8AG-062E AUT:F)来获得4GB SDRAM。 我可以使用 u-boot 实用程序(MM 和 MD)访问完整地址范围吗? 如果是、您能否为每个2GB 芯片提供示例?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我简单地介绍一下、64位内存命令支持应该是自动的。
README-Configuration Settings: README------------------------ README- README:- MEM_SUPPORT_64BIT_DATA: Defined automatically if compiled as 64-bit. README- Optionally it can be defined to support 64-bit memory commands.
...一些相关的代码片段这里...
include/compiler.h-#ifdef __LP64__ include/compiler.h:#define MEM_SUPPORT_64BIT_DATA 1 include/compiler.h-#else include/compiler.h:#define MEM_SUPPORT_64BIT_DATA 0 include/compiler.h-#endif
我还没有机会尝试一下。
此致、Andreas
Jim、
我刚刚使用去年的 SDK v9.x U-Boot 映像在具有4GB DDR 的 SK-AM62A 上进行了此尝试。 访问前2GB 以上的内存时没有问题。
首先、您可以使用 U-Boots `bdinfo`命令确认存储器映射。 您可以看到、所有 AM6x 器件的前2GB 映射到地址0x8000_0000、后2GB 映射到地址0x8_8000_0000 (请参阅 TRM)。
=> bdinfo boot_params = 0x0000000000000000 DRAM bank = 0x0000000000000000 -> start = 0x0000000080000000 -> size = 0x0000000080000000 DRAM bank = 0x0000000000000001 -> start = 0x0000000880000000 -> size = 0x0000000080000000 flashstart = 0x0000000000000000 flashsize = 0x0000000000000000 flashoffset = 0x0000000000000000 baudrate = 115200 bps relocaddr = 0x00000000ffedd000 reloc off = 0x000000007f6dd000 Build = 64-bit current eth = ethernet@8000000port@1 ethaddr = 1c:63:49:17:21:cc IP addr = <NULL> fdt_blob = 0x00000000fde90dd0 new_fdt = 0x00000000fde90dd0 fdt_size = 0x000000000000bfe0 multi_dtb_fit= 0x0000000000000000 lmb_dump_all: memory.cnt = 0x2 memory[0] [0x80000000-0xffffffff], 0x80000000 bytes flags: 0 memory[1] [0x880000000-0x8ffffffff], 0x80000000 bytes flags: 0 reserved.cnt = 0x6 reserved[0] [0x99800000-0x9b7ffffe], 0x01ffffff bytes flags: 4 reserved[1] [0x9b800000-0x9e6fffff], 0x02f00000 bytes flags: 4 reserved[2] [0x9e780000-0xa2ffffff], 0x04880000 bytes flags: 4 reserved[3] [0xae000000-0xbfffffff], 0x12000000 bytes flags: 4 reserved[4] [0xfce8c000-0xffffffff], 0x03174000 bytes flags: 0 reserved[5] [0x880000000-0x8ffffffff], 0x80000000 bytes flags: 0 devicetree = separate arch_number = 0x0000000000000000 TLB addr = 0x00000000ffff0000 irq_sp = 0x00000000fde90dc0 sp start = 0x00000000fde90dc0 Early malloc usage: 2dc8 / 8000
现在、让我们将一个字序列(1、2、3、4)写入地址0x8000_0000、并将第二个字序列(5、6、7、8)写入地址 0x8_8000_0000 (在两个存储器区域之间)、从而确保一个不会影响另一个区域并且它们真的是独立的。
=> md 0x80000000 10 80000000: 01000000 02000000 40000000 00000100 ...........@.... 80000010: 80000400 20000000 00000200 00000000 ....... ........ 80000020: 00000000 40002000 00008100 a0000000 ..... .@........ 80000030: 00008000 00000400 02000000 00000000 ................ => md 0x880000000 10 880000000: 42400000 10100000 00000200 00000200 ..@B............ 880000010: 08000000 01000000 00000000 0a000000 ................ 880000020: 00080200 00020200 01000000 22000000 ..............." 880000030: 00000001 10000000 06000000 02000010 ................ => mm 0x80000000 80000000: 01000000 ? 1 80000004: 02000000 ? 2 80000008: 40000000 ? 3 8000000c: 00000100 ? 4 80000010: 80000400 ? q => md 0x80000000 10 80000000: 00000001 00000002 00000003 00000004 ................ 80000010: 80000400 20000000 00000200 00000000 ....... ........ 80000020: 00000000 40002000 00008100 a0000000 ..... .@........ 80000030: 00008000 00000400 02000000 00000000 ................ => md 0x880000000 10 880000000: 42400000 10100000 00000200 00000200 ..@B............ 880000010: 08000000 01000000 00000000 0a000000 ................ 880000020: 00080200 00020200 01000000 22000000 ..............." 880000030: 00000001 10000000 06000000 02000010 ................ => mm 0x880000000 880000000: 42400000 ? 5 880000004: 10100000 ? 6 880000008: 00000200 ? 7 88000000c: 00000200 ? 8 880000010: 08000000 ? q => md 0x80000000 10 80000000: 00000001 00000002 00000003 00000004 ................ 80000010: 80000400 20000000 00000200 00000000 ....... ........ 80000020: 00000000 40002000 00008100 a0000000 ..... .@........ 80000030: 00008000 00000400 02000000 00000000 ................ => md 0x880000000 10 880000000: 00000005 00000006 00000007 00000008 ................ 880000010: 08000000 01000000 00000000 0a000000 ................ 880000020: 00080200 00020200 01000000 22000000 ..............." 880000030: 00000001 10000000 06000000 02000010 ................
一切都按预期运行。
这不仅适用于 MEMORY 命令、还适用于其他命令。 我过去已成功通过 TFTP 将一个大映像传输到地址0x8_8000_0000、而没有遇到任何问题。
此致、Andreas
安德烈亚斯
我没有看到第二个2GB 的 DDR ...
是否缺少配置设置?
下面是我在 k3-am625-sk.dts 中的内容-
我发现另一个主题包含一些相关信息、但似乎不是解决方案-
AM625:如何在 SDK 9.2上设置 AM625 4GB RAM? -处理器论坛-处理器- TI E2E 支持论坛
我使用的是09.02.01.10。
SK-AM62B (上面有 AM62x 器件)、这是使用 您查看的 k3-am625-sk.dts 文件、但仅提供2GB DDR、因此这是预期结果、
我测试的是一个 SK-AM62A (上面有 AM62Ax 器件)、它具有4GB 的 DDR。 不同的器件树文件、请见。。
$ git grep -A 5 'memory@8' arch/arm/dts/k3-am62a7-sk.dts arch/arm/dts/k3-am62a7-sk.dts: memory@80000000 { arch/arm/dts/k3-am62a7-sk.dts- device_type = "memory"; arch/arm/dts/k3-am62a7-sk.dts- /* 4G RAM */ arch/arm/dts/k3-am62a7-sk.dts- reg = <0x00000000 0x80000000 0x00000000 0x80000000>, arch/arm/dts/k3-am62a7-sk.dts- <0x00000008 0x80000000 0x00000000 0x80000000>; arch/arm/dts/k3-am62a7-sk.dts- };
此致、 Andreas
在大多数情况下、我接到这篇文章是为了让 USB、SPI、EMMC 和以太网在其中一个 TI Linux 环境中运行。 这已经取得了成功。 [报价]很高兴听到!
我告诉他们有关前2 GB 内存问题的信息。是的、尝试使用 SDK v10.0应该是起点;同时也应该用于进一步开发(而不是 SDK v9.x)。 如果必须使用 v9.x、您可以始终尝试识别和反向特定的修复程序、以使 DDR 在 AM62x 上使用4GB。 但您仍然需要了解 SDK v10.0与 SDK v9.x 中 U-Boot 的其他修复/改进措施
此致、Andreas
[/quote]
安德烈亚斯
我更新到了 SDK 的版本10、以便尝试可修改并显示内存的 u-boot 工具。 完成上述配置更改后、我仍然只能访问0x80000000 - 0x100000000、
日志如下:
e2e.ti.com/.../6523.U_2D00_Boot-SPL-2024.04_2D00_dirty-_2800_Oct-25-20.txt
我还没有完成 V10的配置(以太网不工作)。 但大多数其他的一切似乎都在工作。
Jim、您好!
刚刚提到您的一位同事也在单独的主题(https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1430847/am620-q1-4gb-ddr---unable-to-access-upper-2gb)上讨论过这个问题、并且问题已经解决。
解决方案似乎是使用我先前在该线程中指出的全部 DTS 配置。 不知道为什么混淆/断开是 这没有在 SDK v10的上下文中尝试过、但我很高兴它现在已确认可以正常工作。
此致、Andreas