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.

[参考译文] 66AK2H14:DDR3A 配置

Guru**** 2538950 points
Other Parts Discussed in Thread: 66AK2H14

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/804376/66ak2h14-ddr3a-configuration

器件型号:66AK2H14

您好!

我有一个带66AK2H14的定制板。

我使用 CCSV9 + GEL 文件设置 DDR3配置寄存器。

板载 DDR3B 未连接到 DDR3芯片。 DDR3A。

DDR3_REMAP_EN=0

我无法确定从 GEL 文件运行 DDR 测试时对0x8000000的访问是否正确定向到 DDR3A。

在我的情况下,正确的配置顺序(XMC 和 MSMC)是什么,以确保对0x8000000的读取/写入被定向到 DDR3A 芯片?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以从 C66x 内核查看以下寄存器:

    黄色突出显示表示36位物理地址0x8_0000_0000 (这是 DDR3A)映射到32位逻辑地址0x8000_0000。 映射大小为2GB。 详细解码可在 以下位置找到:http://www.ti.com/lit/ug/sprugw0c/sprugw0c.pdf 7.3 XMC 存储器保护和地址扩展(MPAX)。

    这是 DSP 复位后的默认值(来自同一文档):

    XMC 配置 MPAX 段0和1、以便 C66x CorePac 能够访问系统存储器。 上电配置是指段1将 C66x CorePac 地址空间中的8000_0000–FFF_FFFF 重新映射到系统地址映射中的8:0000_0000–8:7FFF_FFFF。 这对应于 MSMC 控制器专用于 EMIF 的前2GB 地址空间

    此致、Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    当我连接到 C66xx_0时、我正确地看到了上述值。
    抱歉、但我在初始问题中忘记提到我的 GEL 文件在 ARM 0上运行。
    我的问题是如何将 ARM 0地址0x8000000重新映射到 DDR3A。
    此致。
    Didier。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    迪迪埃、

    来自 K2H 数据表 www.ti.com/.../66ak2h14.pdf。8.1 66AK2Hxx 的存储器映射概要

    ARM 视图
    (3)该区域映射到 DDR3B。 如果状态为、则其别名为00 8000 0000至00 9FFF FFFF (DDR3B 的前512MB)
    引导时的 DDR3A_REMAP_EN 引脚为‘0’。
    (5)该区域映射到 DDR3A 或 DDR3B、具体取决于引导时 DDR3A_REMAP_EN 引脚的状态。 如果针脚为‘1’,则为该区域
    映射到 DDR3A 的前2GB、后者的别名为08 0000 0000至08 7FFF FFFF。 如果该引脚为‘0’,则该区域映射为2GB
    DDR3B 的说明。

    因此、从00 8000 0000到00 FFFF FFFF、大小为2G 的 FFFF 仅用于 DDR3B、如从 ARM (当您从 ARM 运行 GEL 时)所示(如果 DDR3A_REMAP_EN = 0)。

    如果要使用 ARM 从0x8000_0000访问 DDR3A、则需要更改 DDR3A_REMAP_EN = 1。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:

    那么、您的答案是否意味着如果 DDR3A_REMAP_EN=0、则无法在 GEL 文件中将0x80000000重新映射到 DDR3A?

    并且根本不可能写入/读取 DDR3A?

    以上2个问题涉及 GEL 文件。

    它们还适用于 u-boot 和 Linux。

    此致。

    Didier。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Didier、您好!

    从 ARM 的角度来看、DDR3A_REMAP_EN 选择哪个 DDR 接口显示在0x8000 0000。 如果您有 DDR3_REMAP_EN=0、您将在 该地址找到 DDR3B。 如果您希望 DDR3A 显示在0x8000 0000、请更改为 DDR3_REMAP_EN=1。

    有另一个存储器范围从0x08 0000 0000开始。 在这里、您将始终找到 DDR3A。 从 ARM 以及 DSP 视图。 有关更多详细信息、请参阅数据表中的表8-1:

    此致、
     Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Robert、

    我完全理解了 DDR3A_REMAP_EN 问题。 我n´t 希望在0x8000_0000处看到 DDR3A。
    我还读取了存储器映射表数次、我知道 DDR3A 在0x8_0000_0000处可用。

    n´t 我发布这个线程、这是因为我不清楚如何从 GEL 文件访问 DDR3A。

    DDR3A_REMAP_EN=0是连接硬件的、因此我必须这样做。

    问题1:在 GEL 文件中,无法将0x8_0000_0000重新映射到32位地址。 正确?

    问题2:如果我从0x8_0000_0000读取4个32位字,并且从0x0000_0000读取时也会读取相同的值,就好像地址中的高"8"被忽略一样。 我们可以在 GEL 文件中使用36位地址吗?

    以下是我的 MPAX 配置:

    /*----------------- *
    /* XMC_setup() *
    /* XMC MPAX 寄存器设置以访问 DDR3配置空间 *
    /*----------------- *

    /-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //-请参阅《C66x DSP CorePac 用户指南》
    //-图7-10内存映射重置状态
    /-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //--
    //--这是段2 (全部16个段)
    //-(复位时已启用段0和1)
    #define XMC_BASE_ADDR (0x08000000)
    #define XMPAX2_L (*(int*)(XMC_BASE_ADDR + 0x00000010))
    #define XMPAX2_H (*(int*)(XMC_BASE_ADDR + 0x00000014))
    #define XMPA3_L (*(int*)(XMC_BASE_ADDR + 0x00000018))
    #define XMPA3_H (*(int*)(XMC_BASE_ADDR + 0x0000001C))

    XMC_setup()

    /* DDR EMIF 寄存器 XMPAX*2 */的映射
    //大小= 512字节

    //-- RADDR (替换地址)= 0x121010
    //-- Perm (权限) = 0x3F ->监控器和用户模式可读取/写入/执行
    //将 Perm 从0xFF 更改为0x3F,因为位6-7是保留的并且应该被写为0
    XMPAX2_L = 0x1210103F;//替换 addr + perm */

    //-- BADDR (基址)= 0x21010
    //--SEGSZ (段大小、5位)=01011 = 0xB -> 4KB (这是最小值)
    XMPAX2_H = 0x2101000B;/*基本地址+段大小*

    GEL_TextOut ("XMC 设置完成。\n");


    问题3:正确吗?

    问题4:我是否需要在 MSMC 中配置某些内容? 我曾尝试与该 MSMC 一起做一些事情、但没有成功。

    这是我的测试代码的摘录。

    #define DDR3A_BASE_ADDRESS 0x8000000
    #define DDR3_TEST_START_ADDRESS (*(int*)(DDR3A_BASE_ADDRESS)

    热菜单 my_DDR3_memory_test ()

    unsigned int read_value_1;
    unsigned int read_value_2;
    unsigned int read_value_3;

    GEL_TextOut ("DDR3内存测试... 写入0x800000000\n");

    DDR3_TEST_START_ADDRESS = 0xAAAAAAAA;
    Read_Value_1 = DDR3_TEST_START_ADDRESS;
    GEL_TextOut ("读取一次、值=%x\n"、、、、 Read_Value_1);

    Read_Value_2 = DDR3_TEST_START_ADDRESS;
    GEL_TextOut ("读取一次、值=%x\n"、、、、 Read_Value_2);

    Read_Value_3 = DDR3_TEST_START_ADDRESS;
    GEL_TextOut ("读取一次、值=%x\n"、、、、 Read_Value_3);



    问题5:正确吗?

    此致。

    Didier。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    迪迪埃、

    A1。 GEL 仅使用32位地址、当 DDR3A 从0x8_0000_0000开始时、无法访问它。 要在 A15上执行此操作、您需要设置 LPAE (大型物理地址扩展)和 MMU。 这在 Linux U-boot 中完成、但在 GEL 中不可用。

    A2/A3。 您更改的 XMC 仅适用于 DSP 内核、当您想从 ARM 运行时、这并不有用。

    A4/A5:您需要 LPAE 和 MMU 设置才能从 ARM 访问它。 我认为这是一个大代码块、您需要检查 U-boot 是如何实现它的。

    此致、Eric