3个版本 (稳定)
1.0.1 | 2021年5月23日 |
---|---|
1.0.0 | 2021年5月13日 |
0.1.0 | 2020年8月9日 |
#1095 在 算法 中
每月下载量 3,906
在 2 crates 中使用
16KB
57 代码行
Rust可移植SMBus数据包错误码算法
这是一个针对 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(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
由你选择。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义,你有意提交以包含在作品中的任何贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~18KB