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.

[参考译文] AM263P4-Q1:关于存储器循环冗余校验 (MCRC)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1635142/am263p4-q1-about-memory-cyclic-redundancy-check-mcrc

器件型号: AM263P4-Q1

此问题是我们在以下 E2E 主题上收到的回复的后续问题。

(6) AM263P4-Q1:关于存储器循环冗余校验 (MCRC)-基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

我已查看示例代码。 您能否提供更具体的实施细节?
我正在尝试使用以下规格来计算 CRC:

CRC 类型:CRC32(支持标准 CRC-32 (IEEE 802.3))
种子值:0xEDB88320
数据大小单元:8 位(逐字节处理)
初始值:0xFFFFFFFF
最终处理:将最终值与 0xFFFFFFFF 进行异或运算(即输出反转)

我相信种子值可以使用 SDL_MCRC_setPSASeedSig () 设置。
使用 Semi-CPU 模式或自动模式时、是否有方法可以设置数据大小单位、初始值和使用 SDK (MCRC) 反转最终值?

此致、

Imaoka.

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

    Imaoka、

    在深入了解实现细节之前、我想标记一个有关您的参数的重要说明。 该值 0xEDB88320 CRC-32 (IEEE 802.3) 的反射多项式、而不是种子/初始值。 标准 CRC-32 初始值为 0xFFFFFFFF (您也会单独列出)。 MCRC 硬件使用由 CRC 类型设置选择的固定多项式、您不会通过种子寄存器配置多项式。 假设您需要标准 IEEE 802.3 CRC-32 行为、我将解决您的问题。


    以及 SDK 通过 API 支持哪些功能

    SDL_MCRC_Config_t通过结构和相关的 API、您可以控制半自动 CPU 和自动模式下的多个参数[1][2]:

    typedef struct SDL_MCRC_Config_s
    {
        SDL_MCRC_Type_t      type;        // CRC type selection
        SDL_MCRC_DataLength_t dataLen;    // Data width
        SDL_MCRC_DataBitSize  dataBitSize;// Input data size (8, 16, 32, 64-bit)
        SDL_MCRC_BitSwap_t    bitSwap;   // Bit ordering (MSB/LSB)
        SDL_MCRC_ByteSwap_t   byteSwap;  // Byte swap enable/disable
    } SDL_MCRC_Config_t;

    1。数据大小单元(8 位/逐字节)— White check mark 受支持

    dataBitSizeSDL_MCRC_DATA_8_BIT在配置结构[3]中设置为:

    SDL_MCRC_Config_t mcrcConfig = {
        .type        = SDL_MCRC_TYPE_32BIT,
        .dataLen     = SDL_MCRC_DATALENGTH_32BIT,
        .dataBitSize = SDL_MCRC_DATA_8_BIT,    // byte-by-byte processing
        .bitSwap     = SDL_MCRC_BITSWAP_MSB,
        .byteSwap    = SDL_MCRC_BYTESWAP_ENABLE
    };
    SDL_MCRC_addConfig(instance, channel, &mcrcConfig);

    重要注意事项: 尽管您可以指定 8 位数据模式、但始终写入 PSA 寄存器的数据 内部为 64 位宽 —小于 64 位的图形为零填充[4]。 这意味着生成的签名将与纯软件 CRC-32 逐字节计算不同。 您将需要验证输出是否与预期的 IEEE 802.3 结果与您的特定数据相匹配。

    2.初始值 (0xFFFFFFFF)— White check mark 通过种子支持

    用于SDL_MCRC_setPSASeedSig()设置初始值[5]:

    SDL_MCRC_Signature_t seedValue;
    seedValue.regL = 0xFFFFFFFFU;  // Lower 32 bits
    seedValue.regH = 0xFFFFFFFFU;  // Upper 32 bits (64-bit PSA register)
    
    SDL_MCRC_setPSASeedSig(instance, channel, &seedValue);

    这会设置 CRC 计算开始之前 PSA 寄存器的起始状态。

    最终异或反转(与 0xFFFFFFFF 进行异或运算)- X 在硬件中不受支持

    MCRC 硬件 本身不支持最终异或反转 签名[6]的后半部分。 检索计算的签名后、必须在软件中执行此步骤:

    SDL_MCRC_Signature_t resultSig;
    SDL_MCRC_getPSASectorSig(instance, channel, &resultSig);
    
    // Apply final XOR inversion in software
    uint32_t finalCRC = resultSig.regL ^ 0xFFFFFFFFU;

    指定 SEM-CPU 模式 、您可以从 PSA 扇区签名寄存器中读取签名并自行应用异或[7]。 In 自动模式 ,硬件会将签名与预存储的引用值进行比较—因此,您需要将预取反的预期 CRC 存储在 CRC 值寄存器中,以解决缺少的最终异或步骤[7]。


    建议编程序列

    对于 Semi-CPU 模式[8]:

    1. SDL_MCRC_channelReset(instance, channel)
    2. SDL_MCRC_init(instance, channel, watchdogPreload, blockPreload)
    3. SDL_MCRC_config(instance, channel, patternCount, sectorCount, SDL_MCRC_OPERATION_MODE_SEMICPU)
    4. SDL_MCRC_addConfig(instance, channel, &mcrcConfig)
    5. SDL_MCRC_setPSASeedSig(instance, channel, &seedValue)
    6. 通过 DMA 将数据传输到 PSA 签名寄存器
    7. SDL_MCRC_getPSASectorSig(instance, channel, &resultSig)
    8. resultSig.regL ^= 0xFFFFFFFF在软件中应用

    打开要验证的项目

    • 位/字节交换设置: 实现符合 IEEE 802.3 标准的输出可能需要bitSwapbyteSwap的特定组合。 标准 CRC-32 涉及输入字节的位反转(该设置可以解决)、SDL_MCRC_BITSWAP_LSB但这需要根据已知的测试向量进行经验验证。
    • 64 位补零影响: 由于 8 位数据在内部填充为 64 位、因此在投入生产之前、请确认计算的签名与您的参考实现匹配、并使用已知的数据集。

    我建议使用已知输入运行一个简单的测试(例如 ASCII 字符串“123456789"应“应产生 CRC-32 =)0xCBF43926来验证您的配置。


    1. SDL MCRC 标题源代码
    2. SDL MCRC API 指南
    3. SDL MCRC 标题 — DataBitSize Enum
    4. SDL MCRC API - PSA 寄存器填充
    5. SDL MCRC API - setPSASeedSig
    6. AM263PX TRM - MCRC 模块
    7. AM263PX TRM — 半自动 CPU 和自动模式
    8. SDL MCRC 示例页面

    此致、

    Zackary Fleenor

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

    您好、Zackary、

    此问题已解决。 非常感谢您的帮助。
    此致、Imaoka