#checksum #sm-bus #crc #pec

无std smbus-pec

最小化可移植的SMBus数据包错误码计算算法实现

3个版本 (稳定)

1.0.1 2021年5月23日
1.0.0 2021年5月13日
0.1.0 2020年8月9日

#1095算法

Download history 901/week @ 2024-03-14 1522/week @ 2024-03-21 2316/week @ 2024-03-28 1893/week @ 2024-04-04 1309/week @ 2024-04-11 708/week @ 2024-04-18 664/week @ 2024-04-25 1025/week @ 2024-05-02 625/week @ 2024-05-09 1131/week @ 2024-05-16 730/week @ 2024-05-23 591/week @ 2024-05-30 815/week @ 2024-06-06 1618/week @ 2024-06-13 679/week @ 2024-06-20 740/week @ 2024-06-27

每月下载量 3,906
2 crates 中使用

MIT/Apache

16KB
57 代码行

Rust可移植SMBus数据包错误码算法

crates.io Docs Build Status Coverage Status

这是一个针对 no_std 环境使用的、最小化的可移植 系统管理总线 (SMBus) 数据包错误码 计算算法的实现。

SMBus 1.1及以后版本定义了一个可选的数据包错误检查模式。当使用时,所有包含数据包错误码 (PEC) 的传输都会附加一个额外的字节。

PEC是在包括地址和读/写位在内的整个传输上计算的。

使用的多项式是 x^8 + x^2 + x + 1,这对应于初始化为零的 CRC-8-ATM HEC

与其他库的比较

有多个库实现了CRC算法,但它们的目的是可配置、通用、通过SIMD指令加速等。

这个库提供了一个可移植且不可配置的算法实现,仅用于SMBus PEC(可选使用预计算的查找表)。

这应允许编译器进行良好的优化,并允许在具有最小代码膨胀的任何目标架构中使用该算法。

这使得这个库特别适合在 no_std 环境中使用。

预计算的查找表

通过使用预计算的查找表,提供了算法的一个更快版本。可以通过 lookup-table 功能启用。

启用此功能后,将包括一个包含256个预计算的 u8 值的表,这避免了逐位计算,但需要存储它的空间。

使用方法

use smbus_pec::pec;

const ADDRESS: u8 = 0x5A;
const REGISTER: u8 = 0x06;

fn main() {
    let pec_write = pec(&[ADDRESS << 1, REGISTER, 0xAB, 0xCD]);
    println!("PEC: {}", pec_write); // prints 95

    let data = [ADDRESS << 1, REGISTER, (ADDRESS << 1) + 1, 38, 58];
    let pec_write_read = pec(&data);
    println!("PEC: {}", pec_write_read); // prints 102
}

支持

有关问题、问题、功能请求、其他更改或仅提供反馈,请在 GitHub项目 中提交问题。

许可证

根据以下许可证之一授权:

由你选择。

贡献

除非你明确声明,否则根据Apache-2.0许可证定义,你有意提交以包含在作品中的任何贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。

依赖项

~18KB