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/PROCESSOR-SDK-AM335X:PRU 访问 SDRAM

Guru**** 2616675 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/660472/rtos-processor-sdk-am335x-pru-access-to-sdram

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我经常 使用 PRU 将数据写入 EMIF0 SDRAM 存储器、但它的剂量不起作用。 我在 L3 OCMC0上尝试过、一切都正常。 这就是我尝试执行它的方式:

在 ARM 处理器上,我使用此代码生成指向 EMIF0 SDRAM 的指针:

 X =(uint32_t *) 0x800230d0;

在 PRU 侧、我尝试将199写入该存储器部分:

int * addx =(int *) 0x800230d0;
*addx=199;

在 ARM 上执行完所有操作后、我通过以下方式读取地址:

  UART_printf ("%x\n"、*x);

我只得到0和端子。 PRU 处理器是否连接 到 EMIF0 SDRAM? 由于我尝试 了 L3 OCMC0内存、一切都正常、我可以使用该内存代替 EMIF0 SDRAM 吗?

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

    您是否清除了 SYSCFG 寄存器的位4 (STANDBY_INIT)以启用 OCP 主端口? PRU 通过接口/OCP 主端口访问外部主机存储器映射。

    另请查看主题 e2e.ti.com/.../233891

    如果与应用程序中的其他驱动程序没有冲突、您当然可以使用 OCMC0。

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

    是的、我已清除 STANDBY_INIT、并且 PRU 能够在 EMIF0 SDRAM 下写入、但问题在 ARM 内核写入同一存储器地址后出现、写入后会阻止 PRU 中的存储器地址、并且无法再写入。 什么是 cosing 主处理器以阻止 PRU? 感谢您的回复

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我通过将 cfg 文件 MMU 设置为可执行来解决它。 您需要对其进行标记、以便 ARM 不会阻止 PRU 访问。 我还将此代码添加到 cfg 中:

    //表示 Cortex-A8
    VAR Cache = xdc.useModule('ti.sysbios.family.arm.a8.Cache');

    VAR MMU = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');

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

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

    //用于标记存储器区域的描述符属性结构
    //作为正常的可高速缓存存储器(回写和写分配)
    VAR attrs ={
    键入:MMU。FirstLevelDesc_section、//段描述符
    TEX:0x1、
    可缓冲:真、 //可缓冲
    可高速缓存:true、 //可缓存
    可共享:真,<------------------------------------------------------- 您需要添加这个东西
    };

    //为地址范围中的每个条目设置描述符
    对于(var i=0x80000000;i < 0x90000000;i = i + 0x00100000){
    //每个“描述符”条目跨越1MB 地址范围
    Mmu.setFirstLevelDescMeta(i、i、attrs);


    var memmap = Program.cpu.memyMap;
    VAR DDR =空;

    //在内存映射中查找 DDR
    对于(var i=0;i < memmap.length;i++){
    if (memmap[i].name ="DDR"){
    DDR = memmap[i];



    //将 MMU 表放在 DDR 内存段中(如果存在)
    if (DDR!= null){
    VAR sectionName ="ti.sysbios.family.arm.a8.mutableSection";
    Program.sectMap[sectionName]= new Program.SectionSpec ();
    Program.sectMap[sectionName].type ="NoLoad";//适用于 TI 工具的 NOINIT
    Program.sectMap[sectionName].loadSegment ="DDR";

    否则{
    print ("未找到 DDR 内存段");



    请记住有关"可共享:真"的重要信息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rafal、

    感谢您分享您的发现! 这可以与线程关联- e2e.ti.com/.../2420346

    以供参考。



    此致、
    Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您、我将深入探讨该主题