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.

[参考译文] TMS570LC4357:TMS570 NMPU 外部诊断测试

Guru**** 2454490 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177155/tms570lc4357-tms570-nmpu-external-diagnostics-test

器件型号:TMS570LC4357

您好!

我正在进行 NMPU 外部诊断测试、TRM 第11.3.2.2节中提到了该测试。 我正在尝试测试 DMA 接口。

在第7步中、它提到了在  MPUDIAGADDR 寄存器中对诊断地址进行编程。

请您解释一下、该寄存器的地址可能是什么。 是我们用作事务 DMA 的目标地址的地址。

此外、您能否提供任何可用于使用 dma-nmpu 进行 NMPU 外部诊断测试的示例代码。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="478355" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177155/tms570lc4357-tms570-nmpu-external-diagnostics-test ]MPUDIAGADDR 寄存器

    这是您要测试的区域中的地址。

    下面是我刚刚为您开发的一个示例:

    nmpu_dmaREG->MPULOCK = 0x0A;//允许写入其他 MPU 寄存器
    nmpu_dmaREG->MPUCTRL1 = 0x5;//存储器保护被禁用

    nmpuRegionAttributes_t nmpuConfig0;
    nmpuConfig0.accesspermission = NMPU_PRIV_RW_USER_RO;
    nmpuConfig0.regionsize = NMPU_SIZE _4_KB;
    nmpuConfig0.baseaddr = 0x08030000;

    nmpuEnableRegion (nmpu_dmaREG、nMPU_REGION0、nmpuConfig0);

    nmpuRegionAttributes_t nmpuConfig1;
    nmpuConfig1.accesspermission = NMPU_PRIV_RO_USER_RO;
    nmpuConfig1.regionsize = nMPU_SIZE _4_KB;
    nmpuConfig1.baseaddr = 0x08031000;

    nmpuEnableRegion (nmpu_dmaREG、nMPU_REGION1、nmpuConfig1);

    nmpu_dmaREG->MPULOCK = 0x0A;

    nmpu_dmaREG->MPUDIAGCTRL = 0 << 18 //将事务处理视为用户模式
    | 1 < 17 //将事务视为写入
    | 0 << 16 //内部诊断模式
    | 0xA << 4;//启用诊断

    nmpu_dmaREG->MPUDIAGADDR = 0x08031008;

    在此示例中、我为 DMA 启用了2个 UMPU 区域。 结束区域(#1)为0x08031000至0x08032000、大小=4KB、权限为 pri 和用户只读。

    在用户模式中、诊断被配置为对0x08031008处的第2个区域进行写入访问、这违反了许可。

    位27、25、16和位0被置位。  

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

    您好、Wang、

    非常感谢您提供示例代码和所有详细信息。 此代码示例配置为内部诊断模式。 我已经尝试过此模式、工作正常。 当尝试配置为外部诊断模式( 将 MPUDIAGCTRL 中的位16更新为1 )并且启动 DMA 事务(我看到数据正在从源传输到目的)时、 MPUERRSTAT 中没有按预期记录故障。 该寄存器的值为0。  

    我已配置如下。 执行  第 11.3.2.2节中提到的所有步骤。 如果可用  、请帮助提供外部诊断模式的参考代码。  

    nmpuRegionAttributes_t region1Attributes;
    region1Attributes.baseaddr = 0x08067000;
    region1Attributes.regionsize = NMPU_SIZE _4_KB;
    region1Attributes.accesspermission = NMPU_PRIV_NA_USER_NA;

    nmpu_dmaREG->MPUDIAGCTRL = 0 << 18 //将事务处理视为用户模式
    | 1 < 17 //将事务视为写入
    | 1 << 16 //外部诊断模式
    | 0xA << 4;//启用诊断

    感谢你的所有帮助

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

    我可以解决该问题。 感谢所有支持。