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.

[参考译文] MSPM0G3519:尝试根据标准 IEEE 802.3多项式运行 CRCP

Guru**** 2463330 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474669/mspm0g3519-trying-to-run-crcp-against-a-standard-ieee-802-3-polynomial

器件型号:MSPM0G3519
主题中讨论的其他器件:SysConfig

工具与软件:

团队、

 我们的客户尝试 根据标准 IEEE 802.3 "0x04C11DB7"多项式和测试字符串{"1"、"2"、"3"、"4"、"5"、"6"、"6"、"7"、"8"}运行 CRCP。 这将生成0xE3C97CBC CRC。 但无法真正让它开始工作。

 理想情况下、用户应能够读取此数据并将其作为32b 数据进行加载、同时将 LE 设置为8位、而无论如何都不会获得正确的结果。

 

  1. CRCP 是通过 CRC 引擎逐字节流式传输32b 数据、还是使用整个32b 值?
  2. 对于如何配置 CRCP 以获得正确的答案、是否有任何提示或建议、或者是否有一些解释 CRCP CRC 引擎如何工作的伪代码?

 器件 TRM 中目前没有任何关于 CRC 内部的信息。 最终他们会希望 DMA 执行负载。

欢迎您输入任何信息!
 

此致、

CY

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

    尊敬的 CY:

    它是一个硬件加速器。

    [报价用户 id="100134" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474669/mspm0g3519-trying-to-run-crcp-against-a-standard-ieee-802-3-polynomial "]
    • CRCP 是通过 CRC 引擎逐字节流式传输32b 数据、还是使用整个32b 值?
    • 对于如何配置 CRCP 以获得正确的答案、是否有任何提示或建议、或者是否有一些解释 CRCP CRC 引擎如何工作的伪代码?
    [报价]

    无论它在低电平下如何工作、我们都可以将其视为输入-输出模型。

    有关如何在软件代码中实现的信息、请参阅 SDK 演示工程、其中还包括用于实现此目的的 DMA 方法。

    https://dev.ti.com/tirex/explore/node?node=A__ALAN0bj6VmKQrgGhjKb.Eg__MSPM0-SDK__a3PaaoK__LATEST 

    它是 CRC16演示、虽然可以轻松迁移到 CRC32。

    需要注意以下几种配置:

    1.CRC-32设置:

    2.搜索值(初始化值)

    我不确定  IEEE 802.3是什么、而我使用 JAMCCRC 对其进行了测试、输入为 字符串{"1"、"2"、"3"、"5"、"6"、"6"、"7"、"8"}

    输出为"0x651F2550"、这是 CRC 输入字符串的正确结果。

    B.R.

    SAL

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

    CY、感谢您问这个好问题。

    @ó n Sal。 我不确定应用输入/输出模型时不包含全面的示例是否可以 阐明行为。  

    让我们通过 https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_SWS_CRCLibrary.pdf 看看其中的一些示例

    下表中的"检查 CRC"适用于 ASCII 值"1""2""3""4""5""6""7""8"与值31h 32h 33h 34h 相对应的"8""9"
    35h 36h 37h 38h 39h 逐字节通过指定的算法馈送。

    据我所知、CRCP 不会对 CRC 应用 XOR、因此应在之后执行。 BTW、在您的示例 "0x651F2550 ^ 0xFFFFFFFF =  0x9AE0DAAF、这与上述示例中不是的(  另请参阅 www.sunshine2k.de/.../crc_js.html)。

    1. 是否可以在此提供使用 DL_CRCP 驱动程序 API (而不是 SysConfig)设置 CRCP 的示例以从上表中获取结果?
    2. 当使用32位数(LE) 0x31323334和0x3536373839将数据馈入 CRCP 后、结果是否会改变?
    3. 如果32位量位于0x34333231和0x3938373635中、将发生什么变化?

    此致、

    尤金

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

    尊敬的 Eugene:

    [报价 USERID="636987" URL="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474669/mspm0g3519-trying-to-run-crcp-against-a-standard-ieee-802-3-polynomial/5662350 #5662350"]下表中的"检查 CRC"表示 ASCII 值"1""2""3""3""4""5""6""7""8"对应于值31h 32h 33h 34h
    35h 36h 37h 38h 39h 逐字节通过指定的算法馈送。

    我‘了"1-8"的输入、由于 CL 在主题中询问了这一点:

    [报价 userid="100134" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474669/mspm0g3519-trying-to-run-crcp-against-a-standard-ieee-802-3-polynomial "] 我们的客户正在尝试 针对标准 IEEE 802.3 "0x04C11DB7"多项式和测试字符串{'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'}运行 CRCP。 这将生成0xE3C97CBC CRC。 但无法真正使其正常工作。

    我认为这是正确的价值:

    因此、您可以从这边得出一个结论是正确的、最终 XOR 运算不在硬件这边执行。

    我使用了示例工程、并将其修改为 CRC-32 (SysConfig 文件):

    /*
     * Copyright (c) 2020, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    #include "ti_msp_dl_config.h"
    
    #define CRCP_NUM_OF_WORDS (8)
    #define CRCP_EXPECTED_RESULT (0x651F2550)
    uint8_t gData8[CRCP_NUM_OF_WORDS] = {'1', '2', '3', '4', '5', '6', '7', '8'};
    
    const uint32_t gCrcpSeed            = CRCP_SEED;
    volatile bool gCheckCRCP;
    
    int main(void)
    {
        volatile uint32_t crcpChecksum;
        __attribute__((unused)) volatile bool crcpChecksumMatch;
    
        SYSCFG_DL_init();
    
        /* Configure DMA source, destination and size */
        DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &gData8[0]);
        DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, DL_CRCP_getCRCINAddr(CRCP0));
        DL_DMA_setTransferSize(
            DMA, DMA_CH0_CHAN_ID, sizeof(gData8) / sizeof(uint8_t));
        DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
    
        /*
         * Confirm DMA channel is enabled before issuing a SW trigger of the DMA
         * channel
         */
        while (false == DL_DMA_isChannelEnabled(DMA, DMA_CH0_CHAN_ID)) {
            __BKPT(0);
        }
    
        /* Configure device exception handling */
        DL_SYSCTL_disableSleepOnExit();
        NVIC_EnableIRQ(DMA_INT_IRQn);
        gCheckCRCP = false;
    
        /* Trigger DMA via SW request */
        DL_DMA_startTransfer(DMA, DMA_CH0_CHAN_ID);
    
        /* Wait in SLEEP mode until DMA interrupt is triggered */
        while (false == gCheckCRCP) {
            __WFE();
        }
    
        /* Check CRCP checksum */
        crcpChecksum = DL_CRCP_getResult32(CRCP0);
    
        if (CRCP_EXPECTED_RESULT == crcpChecksum) {
            crcpChecksumMatch = true;
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        } else {
            crcpChecksumMatch = false;
        }
    
        __BKPT(0);
    
        while (1) {
            __WFI();
        }
    }
    
    void DMA_IRQHandler(void)
    {
        switch (DL_DMA_getPendingInterrupt(DMA)) {
            case DL_DMA_EVENT_IIDX_DMACH0:
                gCheckCRCP = true;
                break;
            default:
                break;
        }
    }
    

    然后、您可以在不使用 SysConfig 的情况下对其进行修改、其中随附了示例项目的所有代码。

    [报价 userid="636987" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474669/mspm0g3519-trying-to-run-crcp-against-a-standard-ieee-802-3-polynomial/5662350 #5662350"]
    • 当使用32位数(LE) 0x31323334和0x3536373839将数据馈入 CRCP 后、结果是否会改变?
    • 如果32位量位于0x34333231和0x3938373635中、将发生什么变化?
    [报价]

    您可以根据项目进行尝试。 我认为#2将输出相同的结果、而#3将不会输出相同的结果。

    B.R.

    SAL

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

    全部、

    这个可以关闭。 客户已离线解决。

    Ty、

    CY

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

    尊敬的 CY:

    感谢您的更新。

    我将关闭该主题帖。

    B.R.

    SAL