ZHCACL4A april 2020 – may 2023 TMS320F280021 , TMS320F280021-Q1 , TMS320F280023 , TMS320F280023-Q1 , TMS320F280023C , TMS320F280025 , TMS320F280025-Q1 , TMS320F280025C , TMS320F280025C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1 , TMS320F28075 , TMS320F28075-Q1 , TMS320F28076 , TMS320F28374D , TMS320F28374S , TMS320F28375D , TMS320F28375S , TMS320F28375S-Q1 , TMS320F28376D , TMS320F28376S , TMS320F28377D , TMS320F28377D-EP , TMS320F28377D-Q1 , TMS320F28377S , TMS320F28377S-Q1 , TMS320F28378D , TMS320F28378S , TMS320F28379D , TMS320F28379D-Q1 , TMS320F28379S , TMS320F28384D , TMS320F28384D-Q1 , TMS320F28384S , TMS320F28384S-Q1 , TMS320F28386D , TMS320F28386D-Q1 , TMS320F28386S , TMS320F28386S-Q1 , TMS320F28388D , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
本应用报告将介绍 C2000 器件系列中提供的各种 CRC 模块。文中提供了软件示例参考,并重点说明了 CRC 模块之间的差异。此外,节 9还讨论了为特定用例选择 CRC 模块的相关指导。
C2000is a TM ofTI corporate name.
Other TMs
首字母缩写词 | 全称 |
---|---|
BGCRC | 后台循环冗余校验 |
CAN | 控制器局域网 |
CLA | 控制律加速器(F28x 系列器件的协处理器) |
CLB | 可配置逻辑块 |
CM | 连接管理器 |
CRC | 循环冗余校验 |
ECC | 错误校正码 |
EMAC | 以太网介质访问控制器 |
ERAD | 嵌入式实时分析和诊断单元 |
FSI | 快速串行接口 |
PAB | 程序地址总线 |
GCRC | 通用循环冗余校验 |
PROMCRC | 程序 ROM CRC |
PSA | 并行签名分析 |
VCU | Viterbi、复杂数学和 CRC 单元 |
后台循环冗余校验 (BGCRC) 引擎可用于计算存储器区域的 CRC,而无需使用 CPU 或 CLA。然后可以使用 CRC 计算结果来检测存储器损坏。BGCRC 只需配置一次即可使用。BGCRC 在计算 CRC 后与配置的黄金值进行比较,然后可以在发现有任何错误时触发 NMI 或 CLA 任务。
BGCRC 模块能够作为后台进程从存储器中连续读取数据,并在应用程序运行时直接在后台工作。读取发生在空闲时间(此时 CPU、CLA、DMA 等其他主器件均未访问存储块),因此功能访问不受影响。该模块还在读取存储器时执行 ECC/奇偶校验。读取期间发生的任何 ECC 或奇偶校验错误都将通过设置相应的 NMI 标志并生成一个中断(如果已配置)来指示。
该模块还提供了一个用于在配置后锁定和提交寄存器值的选项。CRC 计算时间也可以使用内部看门狗进行监控。引擎需要一个周期来计算每个 32 位字的 CRC。但是,由于 BGCRC 只在空闲时间内工作,因此一个存储块所用的总时间可能因 CPU/DMA/CLA 存储器对配置的存储块的访问情况而异。
该器件在 CPU1 和 CPU2 子系统中都有用于 CPU 和 CLA 的独立 BGCRC 实例。
更多有关计算时间和该模块中其他特性的详细信息,请参阅 TMS320F2838x 微控制器技术参考手册。
如需获取软件支持,请参阅 C2000ware:
通用循环冗余校验 (GCRC) 仅适用于 F2838x 的连接管理器 (Cortex-M) 内核。此 CRC 引擎提供了用于计算 CRC 的自定义多项式选项。它能够计算字节、半字或字数据的 CRC。配置该模块后,CPU/DMA 应向引擎提供数据。
其他特性包括:
该模块还支持固定多项式路径,其中 CRC 配置按照以下值固定。此固定数据路径将在单个周期内计算给定数据集的 CRC。
对于 n 个数据字节,GCRC 需要 2n+2 个周期(针对 0x04c11db7 以外的多项式)。
更多有关该模块的详细信息,请参阅 TMS320F2838x 微控制器技术参考手册。
如需获取软件支持,请参阅 C2000ware:
除了 Viterbi 和复杂数学运算之外,C2000 器件上的 VCU 模块还执行 CRC 计算。该模块提供特殊指令来加速 CRC 计算,如果不使用该模块,在 C28x CPU 上可能需要几个周期进行此计算。C2000 器件上存在 3 种不同类型的 VCU 模块。要确定特定器件上可用的特定 VCU 模块(如果有),请参阅 C2000 实时控制外设参考指南。
该模块支持 8 位、16 位、24 位(VCU0 除外)或 32 位 CRC 的计算。VCRC 模块支持用户可配置的多项式,该多项式的值和大小(1 至 32 位)都很灵活。该模块还支持用户可配置的数据大小(1 至 8 位)。
8 位 CRC 多项式 |
16 位 CRC 多项式 | 24 位 CRC 多项式 | 32 位 CRC 多项式 | 可配置数据和多项式 | |
---|---|---|---|---|---|
VCU0 | 0x07 | 0x8005 0x1021 |
不可用 | 0x4C11DB7 | 不可用 |
VCU2 | 0x07 | 0x8005 0x1021 |
0x5D6DCB | 0x4C11DB7 0x1EDC6F41 |
不可用 |
VCRC | 0x07 | 0x8005 0x1021 |
0x5D6DCB | 0x4C11DB7 0x1EDC6F41 |
1-8 位数据 1-32 位多项式 |
VCU0/VCU2 支持固定多项式(如表 4-1 所示),这些多项式的错误检测功能如下:
更多信息,请参阅 TMS320C28x 扩展指令集技术参考手册。
上述功能为用户提供了多种选择来满足各种应用要求。可以对来自 ROM、RAM 或闪存的数据执行 CRC 计算。VCU 还支持位顺序,可以对“按原样”从存储器获取的数据或翻转的数据计算 CRC,后者称为“反射 CRC”。
C2000Ware 包含用于 VCU 并经过汇编优化的软件库,以及一些通过 C 语言调用的汇编函数演示软件库用法的示例。此外,为了进行比较,可以使用查找表方法(用 C 语言编写)计算 CRC,并获取链接器生成的 CRC(在链接时;这是 C2000 代码生成工具提供的功能)。
这些库支持偶校验或奇校验(字节序)。对于偶校验,CRC 输入计算从存储器中的低字节开始,而对于奇校验,则是从存储器中的高字节开始。
如需获取软件支持,请参阅 C2000ware:
ERAD 模块中的 CRC 单元会监控 CPU 总线,并在执行自检代码时计算 CRC。CRC 单元的主要目的是确保 CPU 在多次迭代中执行相同的软件测试库时保持功能不变。这些 CRC 单元会监控不同的 CPU 接口,不能用于程序或数据存储器的 CRC 计算。
更多详细信息,请参阅 TMS320F28004x 微控制器技术参考手册 和 TMS320F2838x 微控制器技术参考手册。
并行签名分析 (PSA) 可确保控制律加速器 (CLA) 上代码执行的完整性。CLA-PSA 逻辑可用于计算 CLA 的程序地址总线 (PAB) 和数据写入数据总线 (DWDB) 的签名。黄金签名可以离线计算得出,也可以在应用程序的初始化阶段计算得出。随后可以将该计算结果与执行期间计算的签名进行比较,以确保执行代码的正确性。
交叉检查适用于 PAB 的 PSA 将确保代码执行的正确顺序。使用适用于 PAB 的 PSA 可以检测由故障导致的意外代码分支。这是使用多项式 1 + x + x2 + x22 + x32 计算得出的。
适用于 DWDB 的 PSA 可用于确保写入数据的完整性。如果需要计算一组存储器位置的 PSA(用于定期检查配置寄存器、静态存储器内容等的完整性),则需要首先将其读取到 CLA,然后写入到虚拟位置。适用于 DWDB 的 PSA 允许使用 MPSACTL.MPSA2CFG 配置来配置多项式。
CLAPROMCRC 模块计算 CLA 程序 ROM 中的可配置数据块的 CRC-32 值。当 CLA 未访问 CLA 程序总线上的 ROM 时,CLAPROMCRC 以非侵入方式计算 CRC-32。CPU 和 CLA 都没有能力计算 CLA 程序 ROM 的 CRC,这个限制由 CLAPROMCRC 单元处理。但是,CLAPROMCRC 不能用于任何其他存储块。BGCRC 引擎能够对 CLA 程序 ROM 执行 CRC。因此,在具有 BRCRC 的器件中可以使用该引擎。CLAPROMCRC 模块可用于不支持 BGCRC 的器件。
如需获取软件支持,请参阅 C2000ware:<C2000Ware>\driverlib\<器件>\examples\clapromcrc。
更多详细信息,请参阅 TMS320F28004x 微控制器技术参考手册。
<C2000ware>\libraries\dsp\VCU\c28\source\common\c\crc 中提供了一些示例 C 函数(用于 C28x),这些函数使用查找表计算 CRC8、CRC16 和 CRC32。在这些示例中,计算 CRC 之前会生成大小为 512 字节的查找表。此方法显著缩短了 CRC 计算时间,但需要额外的存储器。在编译器优化级别 -o2,这些函数每个 32 位字需要大约 50 个周期。
如需获取软件支持,请参阅 C2000ware:<C2000ware>\device_support\<器件>\examples\cpu1\cla_crc8。
表 9-1 中提供了不同的用例以及哪种 CRC 类型有助于满足要求。功能安全标准 ISO 26262 和 IEC 61508 要求对各种硬件单元进行完整性检查。器件中实现的不同 CRC 块有助于满足其中的一些要求。
否 | 用例 | 推荐(1) 使用的 CRC 类型 |
---|---|---|
1 | 为了确保代码执行的完整性(例如,检测代码中的意外分支,由于故障而导致的错误程序数据),请对程序总线使用 CRC。根据获取的程序数据计算出的 CRC 将适用于获取单元、地址生成单元和存储器互连。 | 1.对于 C28x,使用 ERAD CRC 2.对于 CLA,使用 CLA-PSA |
2 | 配置寄存器包含决定器件行为的重要内容。需要定期检查配置寄存器的完整性。CRC 模块可用于更快地完成此测试。 | 1.对于 C28x,使用 ERAD CRC 2.对于 C28x(针对不支持 ERAD CRC 的器件),使用 VCUCRC 3.对于 CLA,使用 CLA PSA 4.对于具有固定多项式 (0x04C11DB7) 的 CM 子系统,使用 GCRC |
3 | 与配置寄存器类似,需要检查静态 SRAM/ROM 内容的完整性,以确保它们没有错误。 | 1.对于 C28x 和 CLA,使用 BGCRC 2.对于 C28x(针对不支持 ERAD CRC 的器件),使用 VCUCRC 3.对于 CM 子系统(多项式 - 0x04C11DB7),使用 GCRC 4.CLA PROMCRC 可用于不可使用 BGCRC 的器件。 |
4 | 与配置寄存器和 SRAM/ROM 存储器类似,需要检查静态闪存内容的完整性。 | 1.对于 C28x,使用 ERAD CRC 2.对于 CM 子系统(多项式:0x04C11DB7),使用 GCRC 3.对于 C28x(针对不支持 ERAD CRC 的器件),使用 VCUCRC |
5 | 很多时候,用户可能需要使用硬件不支持的多项式来计算 CRC。VCUCRC 和 GCRC 模块提供的可配置 CRC 支持有助于以高效的方式实现这一点。 | 1.对于 C28x,使用 VCUCRC(配置相应的多项式) 2.如果多项式在 CLA-PSA 中可用,则可以使用多项式。否则,需要使用软件 3.配置了适当多项式的 GCRC |
6 | 通信接口以反向通道安全方法来实现端到端安全,以确保传输数据的完整性。器件中的硬件加速器可用于实现此目的并降低对 CPU MIPS 的影响。 | 1.对于 C28x,使用 VCUCRC 2. 对于 CLA,使用基于软件的计算方法 3.对于 CM 子系统,使用 GCRC |
CRC 引擎的属性 | BGCRC | GCRC | VCU CRC | ERAD CRC | CLA PSA |
---|---|---|---|---|---|
可访问的内核 | C28x、CLA | CM | C28x | C28x | CLA |
使用的 CRC 多项式 | 固定值 = 0x04C11DB7 | 用户可编程(高达 32 位的多项式) | • 8 位 - 0x07 • 16 位 - CRC16 802.15.4、0x8005、CRC-CCITT、0x1021 • 24 位 - 0x5d6dcb • 32 位 - CCITT-32、0x04C11DB7、0x1EDC6F41 VCRC 支持用户可配置的数据大小和可配置的多项式(值和大小(高达 32 位)) | 固定多项式 | PAB:1 + x + x2 + x22 + x32 (0x00400007) DWDB:可配置多项式 PSA 模式:1 + x + x2 + x22 + x32 (0x00400007) CRC32 模式:1 + x + x2 + x4 + x5 + x7 + x8 + x10 + x11 + x12 + x16 + x22 + x23 + x26 + x32 (0x04C11DB7) CRC-16-IBM:1 + x2 + x15 + x16 (0x8005) CRC16-CCITT:1 + x5 + x12 + x16 (0x1021) |
种子值 | 用户可编程 | 用户可编程 | 用户可编程 | 用户可编程 | 用户可编程 |
输入大小 | 256 字节的倍数 最小:256 字节 最大:256KB | 任意大小 | 任意大小 | - | 任意大小 |
反转位顺序(反射输入) | 否 | 是 | 是 | 否 | 否 |
用于 CRC 计算的周期数 | 每个 32 位字 1 个周期 | 固定多项式:每个 32 位字 1 个周期 其他:n 字节数据为 2n+2 个周期 | 固定多项式:每字节 1 个周期 可配置的多项式:1-8 位为 3 个周期 | 1 | 1 |
数据访问模式 | 直接访问存储器 | CPU/DMA 需要在 GCRC 中将数据逐一写入特定寄存器 | 直接访问存储器 | 监控总线访问 | 监控总线访问 |
器件/ CRC 引擎 |
BGCRC | GCRC | VCU CRC | CLA PSA | CLAPROMCRC | ERAD CRC |
---|---|---|---|---|---|---|
F2837xD/F2837xS/ F2807x |
不适用 | 不适用 | C28x (VCU2) | 不适用 | 不适用 | 不适用 |
F28004x | 不适用 | 不适用 | C28x (VCU0) | CLA | CLA | 不适用 |
F2838x | C28x、CLA | CM | C28x (VCRC) | CLA | 不适用 | C28x |
F28002x | C28x | 不适用 | C28x (VCRC) | 不适用 | 不适用 | C28x |