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.

[参考译文] AM5706:GPMC 问题

Guru**** 1788580 points
Other Parts Discussed in Thread: AM5706, SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/855085/am5706-gpmc-issue

器件型号:AM5706
Thread 中讨论的其他器件: SYSBIOS

您好!  

我尝试通过 GPMC 非多路复用和异步模式在 AM5706和 FPGA 之间进行通信。

我通过在 PDK 中引用示例代码(CSL\examples\GPMC\FPGA_READ_WRITE)在模板工程上生成了 GPMC 访问代码。

但是、当访问 GPMC 地址(*)时、我的代码会挂起。

(*) base_address:128Mib (将0x04设置为 GPMC_CONFIG7_I 寄存器的 BASEADDRESS 位)
   访问地址:0x0800_0000

我对基址设置和访问地址的理解是否正确?

此外、我需要在项目 main.cfg 中使用以下脚本来访问 GPMC 控制寄存器(0x5000_0000~)。
如果没有以下脚本、在访问 GPMC 控制寄存器时挂起。

var peripheralAttrs =新 MMU。DescriptionAttrs ();
Mmu.initDescAttrsMeta(peripheralAttrs);
peripheralAttrs.type = MMU。DescriptionorType_block;//块描述符
peripheralAttrs.noExecute = true;//不可执行
peripheralAttrs.accPerm = 0;//读取/写入 PL1
peripheralAttrs.attrIndx = 1;
var gpmcBaseAddr = 0x50000000;
Mmu.setSecondLevelDescMeta(gpmcBaseAddr,gpmcBaseAddr,peripheralAttrs);

它是正确的步骤吗?

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

     

    我有几个问题要问您:

    • 您使用的是哪个版本的 PRSDK?
    • 您要从 CSL ("裸机")示例 CSL\examples\GPMC\FPGA_READ_WRITE 添加代码到您自己的基于 SYS/BIOS 的应用中吗?
    • 当您说应用程序挂起时、您意味着什么? 故障是如何发生的? 执行特定代码时是否会发生这种情况?

    我想、对于 GPMC 配置寄存器和 8/16 Ex (2)/R/W 存储器区域、您需要在.cfg 文件中进行 MMU 设置。 您共享的.cfg 文件代码会处理 GPMC 配置寄存器。

    此处介绍了 SYS/BIOS MMU 配置语法: BIOS_6_76_02_02/docs/CDOC/index.html。 导航至 ti->SysBIOS->family->ARM->a15->MMU。

    AM572x 的 MMU 设置如 以下所述:https://e2e.ti.com/support/processors/f/791/p/852636/3159687#3159687

    >> 我对基址设置和访问地址的理解是否正确?

    从检查 TRM 表15-59中、您的解释似乎是正确的。 如果需要、我邀请我们的 GPMC 硬件专家进一步发表评论。

    此致、
    弗兰克

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

    感谢你的答复。

    >您使用的是哪个版本的 PRSDK?
    我使用 pdk_am57xx_1_0_15。

    >您要从 CSL ("裸机")示例 CSL\examples\GPMC\FPGA_READ_WRITE 添加代码到您自己的基于 SYS/BIOS 的应用程序中吗?
    我在 RTOS 模板项目中添加了 CSL 示例(processor_sdk_rtos_am57xx_6_00_00_07/demos/rtos_template_app/am572x/evmAM572x/A15)。
    "CSL ("裸机") "是什么意思? CSL/示例文件夹是否为"裸机"示例?
    我应该在 processor_sdk_rtos_am57xx_6_00_00_07中使用裸机模板项目吗?

    >当您说应用程序挂起时,意味着什么?故障是如何发生的? 执行特定代码时是否会发生这种情况?
    访问0x08000000地址时、会发生以下事件。
    访问0x08000000之前(GPMC0 = 0x08000000)。


    2.访问后

    3.一按 F5

    在*。cfg 中添加以下 MMU 设置时、我无法访问 GPMC 地址(0x08000000)。

    /*为 GPMC 设置添加*/
    var peripheralAttrs =新 MMU。DescriptionAttrs ();
    Mmu.initDescAttrsMeta(peripheralAttrs);
    peripheralAttrs.type = MMU。描述符 Type_block;
    peripheralAttrs.sharedable = 2;
    peripheralAttrs.noExecute = true;
    peripheralAttrs.accPerm = 0;
    peripheralAttrs.indattrx = 1;// level1为1GB 区域

    /*定义中外设电阻的1Meg 页的基址。 *
    var gpmcConfigBaseAddr = 0x50000000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setSecondLevelDescMeta(gpmcConfigBaseAddr、
    gpmcConfigBaseAddr、
    peripheralAttrs);

    var gpmcAttrs = new MM4.DescriptionAttrs ();
    Mmu.initDescAttrsMeta(gpmcAttrs);
    gpmcAttrs.type = MMU。描述符 Type_block;
    gpmcAttrs.sharedable = 2;
    gpmcAttrs.noExecute = true;
    gpmcAttrs.accPerm = 0;
    gpmcAttrs.indattrx = 1;// level2:2MB 区域(level1为1GB 区域)

    var gpmcBaseAddr = 0x08000000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setSecondLevelDescMeta(gpmcBaseAddr、
    gpmcBaseAddr、
    gpmcAttrs);

    是否存在错误点?

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

     

    >>"CSL ("裸机") "是什么意思?

    CSL 表示"芯片支持库"、而按"裸机"表示没有操作系统(TI-RTOS / SYSBIOS)服务。

    >> CSL/example 文件夹是否为"裸机"示例?

    是的、CSL 示例是"裸机"、不依赖于操作系统服务。

    >> 我是否应该在 processor_sdk_rtos_am57xx_6_00_00_07中使用裸机模板项目?

    您将 CSL 代码添加到 TI-RTOS 应用程序的方法是可以的。 但是、必须注意不要将 SYS/BIOS 硬件配置与配置相同硬件的 CSL 代码误"混乱"。

    >> 当访问0x08000000地址时、会发生以下事件。

    感谢您的介绍。 当写入 GPMC 存储器空间时、这看起来像是一个 A15异常。 这强烈表明 A15 MMU 配置存在问题。

    PRSDK 6.1.0.8中有一些 CSL 示例代码、用于为 GPMC 配置 MMU。 您能否从该代码中获取设置并在 BIOS .cfg 文件中使用它们? 请参阅 pdk_am57xx_1_0_16\packages/ti\cSL\arch\a15\src\cSL_a15_startup.c、第329-340行:

    #IF 定义(SOC_AM572x)

    muAttr0.accPerm = 0U;
    mmuAttr0.noExecute = 1U;
    muAttr0.attIndx = 0U
    muAttr0.sharedable = 0U

    /*对于 AM572x GPMC *
    对于(phyAddr = 0x08000000U;phyAddr < 0x28000000;phyAddr += 0x00200000U)

      CSL_a15SetMMUSecondLevelLongDesc (&mmuObj、(void *) phyAddr、(void *) phyAddr、&muAttr0);

    #endif

    我已突出显示了与您当前使用的设置不同的 CSL 设置。  可以在.cfg 文件中的循环中调用 Mmu.setSecondLevelDescMeta ()来配置 GPMC 存储器区域中的多个2 MB 存储器块、例如:

    对于(var i= 0x08000000;i < 0x28000000;i += 0x00200000)

      Mmu.setSecondLevelDescMeta(i、i、attrs1);

    请告诉我这是否解决了问题。

    此致、
    弗兰克

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

    您好!  

    我在两周内没有听到过您的声音、因此我将假定这种情况有效并结束了这一主题。

    谢谢、
    弗兰克