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.

[参考译文] RTOS/TMDSEVM572X:PRU 和 ARM 在 DDR 中共享数据

Guru**** 2924050 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/661351/rtos-tmdsevm572x-pru-and-arm-sharing-data-in-ddr

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

工具/软件:TI-RTOS

您好!

我正在使用 TI RTOS SDK PROCESSOR_SDK_RTOS_am57xx_3_02_00_05。

下面提供的论坛链接说明了 SDRAM 可以共享。

使用此概念(共享 SDRAM)需要执行哪些步骤? PRU 和 ARM 之间可使用多少存储器来共享数据?

我是否要单独对 ARM (TI RTOS)和 PRU (裸机)进行编程? 它使用 CCS 调试配置加载和执行程序。

谢谢、

Anjana Pathak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anjana、

    您需要开发 ARM 应用和 PRU 固件来访问 SDRAM。 整个2GB SDRAM 可在 PRU 和 ARM 之间共享。
    PRU 固件将从 ARM 应用程序加载,有关 步骤,请参阅主题(e2e.ti.com/.../628123)。

    您引用的线程中的'shareable'属性在.cfg 文件中定义。 您可以从 PDK 创建示例工程以熟悉。

    processors.wiki.ti.com/.../Rebuilding_The_PDK

    此致、
    Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Garrett 分享信息。
    我使用 NIMU PDK 示例开发了 ARM 应用、并访问以太网协议、GPIO、2 UART 和计时器。 但由于 GPIO 延迟为736微秒、这对于我的应用来说非常高。 由于 PRU 具有更低的 GPI 延迟、我决定使用 PRU 内核的 GPI、该 GPI 将读取高频数据并将其传递给在 Arm 15上运行的应用。 因此、我在寻找共享存储器来共享数据。 从哪里可以找到 SDRAM 的地址? 我认为 AM572x 的技术文档将为我提供详细信息。

    感谢您的操作过程,我将遵循该过程并让您获得结果,或者在需要时询问任何问题.........。 )

    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anjana、
    >>从何处可以找到 SDRAM 的地址? 我认为 AM572x 的技术文档将为我提供详细信息。
    是的、TRM 始终是要查找的源。

    好的、希望大家顺利前进。

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

    我遵循了所附链接中提到的步骤   

    创建了文本.bin 文件、然后使用工具 bin2h 转换为 text.c 数组文件。   请找到 c (button_led_0)文件的附件、该文件被转换为 text.bin 文件、而 text.c 文件被添加到 PRUSS_BasicExample_idkAM572x_wSoCFile_armTestproject.e2e.ti.com/.../7356.button_5F00_led_5F00_0.ce2e.ti.com/.../PRUtext.c 中

    下面随附 ARM 文件。

    e2e.ti.com/.../7610.main.c

     PRUSS_BasicExample_idkAM572x_wSoCFile_armTestproject 的 main .c 中。 我添加了以下代码。

    extern char PRUarray[12810];

    静态 uint32_t *内存_xdata;

    //在任务循环中

    MEM_xdata =(uint32_t *) 0x800230d0;

    打印("%d\n"、(int)*Mem_xdata);

    在 button_led_0.c 中、我添加了  

    int * addx =(int *) 0x800230d0;

    *addx=199;

       PRUSS_BasicExample_idkAM572x_wSoCFile_armTestproject 的配置文件中。

    /*========================= 高速缓存和 MMU 配置=================== *

    VAR Cache1 = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
    VAR MMU = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');

    /*启用高速缓存*/
    Cache1.enableCache = true;

    /*启用 MMU (L1数据缓存所需)*/
    MM4.enableMMU = true;

    VAR atttrs = new MMU。DescriptionAttrs ();
    Mmu.initDescAttrsMeta(attrs);
    attrs.type = MMU。描述符 Type_block;
    attrs.noExecute = true;
    attrs.accPerm = 0;//在 PL1上为 R/W
    attattrs.Indattrx = 4;//使用 MAIR0 Byte2
    Mmu.setMAIRMeta(4、0x04);
    Mmu.setSecondLevelDescMeta(0x43200000、0x43200000、attrs);

    /*将 IO 延迟配置区域设置为非高速缓存*/
    attrs.Indattrx=1;
    Mmu.setSecondLevelDescMeta(0x4844a000、0x4844a000、attrs);
    Mmu.setSecondLevelDescMeta(0x4ae07d00、0x4ae07d00、attrs);

    var attats1 = new MMU。DescriptionAttrs();
    Mmu.initDescAttrsMeta(attrs1);
    attrs1.type = MMU。描述符 Type_block;
    attrs1.noExecute = true;
    attrs1.accPerm = 0;//在 PL1上为 R/W
    attattr1.Indattrx = 4;//使用 MAIR0 Byte2
    Mmu.setMAIRMeta(4、0x04);
    Mmu.setSecondLevelDescMeta(0x4b200000、0x4b200000、attrs1);

    //描述符属性结构
    var attats2 = new MMU。DescriptionAttrs();

    Mmu.initDescAttrsMeta(attrs1);
    attrs2.type = MMU。DescriptorType_block;//块描述符
    attats2.sharedable = 2;//可共享
    attrs2.Indattrx = 2;//缓存、正常存储器

    //为地址范围中的每个条目设置描述符
    对于(var i=0x80000000;i < 0xA0000000;i = i + 0x00200000){
    //每个“块”描述符条目跨越2MB 地址范围
    Mmu.setSecondLevelDescMeta(i、i、attrs2);

    1.我无法通过 PRU 更新位置值...

    2.这是否是配置问题。 我需要在配置文件中执行更多操作、以便通过 PRU 和 ARM 读取/写入 SDRAM。

    谢谢、

    Anjana Pathak

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

    您是否能够使用 JTAG 连接到 PRU 内核、并验证映像是否已成功加载和引导?

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

    否在加载并运行 PRU 基本示例代码后、PRU0_ICSS 内核未运行。

    因此、我在 ARM 中编写单独的应用程序来读取0x80001000和0x80001004中的数据、并使用 TIRTOS 和 PRU 应用程序将以增量方式将数据写入0x80001000和0x80001004。

    当 PRU 应用程序先运行、然后 ARM 应用程序运行时、ARM 将从位置读取最后更改的值、位置值停止由 PRU 更新(应用程序仍在运行)。

    为什么在 ARM 应用程序执行后不更新该位置?

    谢谢

    Anjana Pathak

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

    Anjana、

    您是否使用"Physical Memory View"(物理内存视图)在内存浏览器中检查了位置值? IC 图标下有一个下拉菜单、请参阅下面的。

    此致、

    Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它是 CPU 内存视图、ARM 正在打印 CPU 内存数据。 ARM 将如何打印由 PRU 固件更新的物理存储器数据。?

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

    从 CPU 存储器视图中、您将从 ARM 的高速缓存中读取数据。 通过"Physical Memory"视图、您将在 DDR 中看到与 PRU 共享的实际数据。 如果您确实通过物理内存视图看到更新的数据、则需要使 ARM 的高速缓存无效。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Garrett:
    如何使 ARM 的缓存无效?
    如何将数据从物理存储器读取到 ARM 是否需要通过在配置或 GEL 文件中设置某些标志来启用 EMIF/DMM?
    请告诉我...

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

    Anjana、

    您可以使用 SYS/BIOS 中的 cache_inv ()函数使缓存无效、然后读取并获取物理内存数据。

    请参阅文件:///C:/ti/bios_6_52_00_12/docs/cdoc/ti/sysbios/family/arm/a15/Cache.html #inv

    cache_inv () //模块范围内

    使指定起始地址和字节计数内的存储器范围无效。 操作的地址范围会被量化到每个高速缓存中的整个高速缓存行。 范围内的所有行对于所有"类型"缓存均无效

    C 概要目标域

    void cache_inv (ptr blockPtr、SizeT byteCnt、Bits16类型、bool wait);

    参数

    blockPtr—要失效的范围的起始地址

    byteCnt—要失效的字节数

    类型—缓存类型的位掩码

    等待—等待操作完成

    此致、

    Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Garrett 提供的这些信息
    我在配置文件中进行了一次更改
    attrs1.Indattrx = 1;//非高速缓存,设备内存而不是2;//缓存,正常内存,并且能够读取 PRU 更新的数据...

    Anjana Pathak。