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.

[参考译文] TMS570LS3137:ESM 组1 DMA 奇偶校验和 DMA/DMM 不精确读取错误

Guru**** 2534650 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1004158/tms570ls3137-esm-group1-dma-parity-and-dma-dmm-imprecise-read-error

器件型号:TMS570LS3137

大家好、

在我的应用中、DMA 模块 RAM 在系统启动期间由硬件自动初始化(MSIENA_BIT.MSIENA1 = 1)、并且 DMA 奇偶校验已经通过 DMAPCR_BIT.parit_ENA=0xA 被启用。

在 MibADC1和 MibSPI3的每个 DMA 传输之后、 声明 ESM 组1 DMA 奇偶校验错误(ESMSR1=0x00000008)。

CRC 引擎压缩传输后  、声明 ESM 组1 DMA 奇偶校验错误和 DMA/DMM 不精确读取错误(ESMSR1=0x00000028)

我没有尝试激活 DMA RAM 奇偶校验、与 ESMSR1寄存器指示的行为相同。

当然、这种情况发生在多个器件上。

请问我应该去哪里?

谢谢。

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

    我只想补充一点、外设 RAM 自动初始化和奇偶校验也针对以下外设启用、并且在 DMA 的情况下没有遇到 ESM 问题:

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

    您好!

    在 DMA RAM 被初始化之前、DMA 奇偶校验是否被启用? 否则、在执行 DMA RAM 自动初始化时不会更新奇偶校验 RAM。

    请通过在 DMA 奇偶校验 RAM 中插入故障来进行奇偶校验测试。  通过将奇偶校验控制寄存器中的 TEST 位置为有效来进入测试模式。

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

    您好 QJ、

    是的、我确认在反转启用的奇偶校验和初始化序列后 ESM 组1 DMA 奇偶校验错误消失了、谢谢!

    我还颠倒了其他器件的上述订购顺序、即  

    • VIM
    • N2HET1
    • DCAN1
    • MIBADC1

    但是、在64位 CRC 模块压缩1 MB 闪存 ROM 后、ESM 组1 DMA/DMM 不精密读取错误仍然存在。 从闪存到 CRC 模块的 DMA 块传输由 DMA CH15执行、每个通道4096帧、32个元件、64位读取/写入、自动启动被禁用(所以只有一个触发)。

    有线索吗?

    此致。

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

    模式计数器是一个20位计数器。 要计算大于2MB 存储器区域的 CRC、请增加 CRC 扇区编号

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

    请参阅我计算大于1MB 闪存段的 CRC 的示例:

    Pcount=1025 , Scount=128,因此总大小为1025*128*8  

    int main (空)

    /*用户代码开始(3)*/
    uint32_t i、abc;

    ABC =(uint32_t) flash_sector[3].start;

    /*手动清除 ESM 错误*/
    esmREG->SR1[2]= 0x00000008U;
    esmREG->SSR2 = 0x00000008U;
    esmREG->EKR = 0x0000000A;
    esmREG->EKR = 0x00000005;

    //使用 CRC 自动模式
    crcInit();
    _enable_IRQ ();

    //更改为 CRC 半 CPU 模式
    // crcREG->CTRL2 =(uint32)(crc_semi CPU);
    crcREG->CTRL2 =(UINT32)(CRC_FULL_CPU);
    crcREG->SCOUNT_REG1= 1025;
    crcREG->PCOUNT_REG1= 128;/*32双字*/

    crcEnableNotification (crcREG、CRC_CH1_CC);

    dma_config.Sadd =(uint32_t)((uint32 *) 0x00000000);
    dma_config.dADD =(UINT32_t)&(crcREG->PSA_SIGREGL1);
    DMA_CONFIG.CHCTRL = 0;
    DMA_CONFIG.FRCNT = 128;
    DMA_CONFIG.ELCNT = 1025;

    DMA_CONFIG.ELDOFFSET = 0;
    DMA_CONFIG.ELSOFFSET = 0;
    DMA_CONFIG.FRDOFFSET = 0;
    DMA_CONFIG.FRSOFFSET = 0;
    DMA_CONFIG.PORTASGN = 4;
    DMA_CONFIG.RDSIZE = ACCESS_64_BIT;
    DMA_CONFIG.WRSIZE = ACCESS_64_BIT;
    dma_config.tType = block_transfer;
    dma_config.ADDMODERD = ADDR_INC1;
    DMA_CONFIG.ADDMODEWR = ADDR_FIXED;
    DMA_CONFIG.AUTOINIT = AUTOINIT_OFF;

    //为接收设置 DMA 控制数据包
    dmaSetCtrlPacket (DMA_CH0、DMA_CONFIG);
    dmaReqAssign (DMA_CH0、26);//DMA 请求线路26、CRC1通道0
    dmaSetChEnable (DMA_CH0、DMA_SW);

    dmaEnable();

    //延迟
    对于(i=0;i<0x100000;i++);

    if (((CRC0_Test[0]= CRC0_Ref[0])&&(CRC0_Test[1]= CRC0_Ref[1]))

    CRC0_ERROR = 0;
    }否则{
    CRC0_ERROR = 1;

    while (1);
    /*用户代码结束*/

    返回0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="45190" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004158/tms570ls3137-esm-group1-dma-parity-and-dma-dmm-imprecise-read-error/3714302 #3714302]pattern 计数器是一个20位的计数器。 要计算大于2MB 存储器区域的 CRC、请增加 CRC 扇区编号[/QUERP]

    这里没有问题,我只是尝试计算1 MB 闪存 ROM 的 CRC,因此模式计数=4096,扇区计数=32,以构成4096*32*8=1 MB。

    DMA 不精确读取必须与其他内容相关、但我似乎无法找到 ESM 组1错误的完整解释。 也许您可以在 TRM 或器件数据表中将我指向它吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="45190" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004158/tms570ls3137-esm-group1-dma-parity-and-dma-dmm-imprecise-read-error/3714313 #3714313"]dma_config.FRCNT = 128;
    DMA_CONFIG.ELCNT = 1025;[/QUERP]

    根据您的注释,FRCNT 应为1025,ELCNT 应为128,总共为1MB+128*8字节扇区。

    在我的情况下、我已经将 CRC 寄存器修改为 FRCNT=1024和 ELCNT=128 (而不是分别为4096和32)以再次获得1MB、但是仍然存在相同的"DMA 不精确读取"ESM 组1错误。

    错误的来源可能是其它的...

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="45190" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1004158/tms570ls3137-esm-group1-dma-parity-and-dma-dmm-imprecise-read-error/3714313 #3714313]crcREG->SCOUNT_REG1= 1025;
    crcREG->PCOUNT_REG1= 128;/*32个双字*/[/QUERP]

    当然,关于我的上一个帖子,这些数字也需要交换。

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

    我进行了扇区大小= 1025的测试。 DMA 传输由 RTI 定时器触发。 我记得我发布了这个测试代码、但是找不到它。 我将再次发布。

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

    e2e.ti.com/.../sys_5F00_link.cmd

    e2e.ti.com/.../sys_5F00_main.c

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

    在链接器 cmd 文件中、const 被分配到跨越1MB 的闪存区域。

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

    您好 QJ、

    我的情况仅为1MB、因此我不需要使用1025帧、8字节128个元素的1024帧构成了1 MB、因此问题不存在。 除此之外、我还使用 RTI 触发传输、每次传输成功时、我可以确认 CRC 计算正确、因为即使我只更改了二进制代码中的一个位、CRC 也会更改。

    我的问题是、在每个 CRC 压缩完成时、ESM 组1错误"DMA/DMM 不精确错误"被标记。

    谢谢。

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

    您好、Wong、

    此错误(ESM 1.5或 ESM 1.13)可能是由非法内存地址引起的。

    我使用几天前发布的代码看不到这种错误:

    《儿童权利公约》:1025个部门。  

    ESM:STAT1=0x0

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

    这是奇怪的...  

    我已经尝试了各种操作、包括手动触发 DMA、设置 DMA AIM 位(用于自动启动)而不是一次性尝试、但没有结果。

    当我设置 AIM 位并仅通过 DMASWCHENAS 寄存器手动触发 DMA 时、一旦发生第一次传输、"DMA/DMM 不精确读取错误"就会永久存在、并且我无法通过直接使用 ESMSR1=0x00000020进行写入来手动复位 DMA (即即使 DMA 未被触发、ERROR 位也始终置位、但在之前当 AIM 位为0时、我能够使用 ESMSR1=命令清除 ERROR 位)。

    有线索吗?