#can-bus #can #networking #sae-j1939

no-std j1939

SAE J1939 是一组标准,定义了重型车辆中的 ECU 通过 CAN 总线进行通信的方式

21 个版本

0.1.33 2024年6月10日
0.1.32 2024年6月3日
0.1.31 2024年5月18日
0.1.30 2024年3月25日
0.1.20 2024年2月29日

#182嵌入式开发

Download history 40/week @ 2024-04-15 23/week @ 2024-04-22 167/week @ 2024-04-29 289/week @ 2024-05-13 182/week @ 2024-05-20 90/week @ 2024-05-27 266/week @ 2024-06-03 202/week @ 2024-06-10 50/week @ 2024-06-17 8/week @ 2024-06-24 32/week @ 2024-07-01 33/week @ 2024-07-08 20/week @ 2024-07-15

每月 55 次下载

GPL-3.0 许可证

195KB
4K SLoC

J1939

Rust

SAE J1939 车辆协议的 Rust crate。

入门指南

使用 PGN 'address claimed' 构建 J1939 帧。

let id = j1939::IdBuilder::from_pgn(j1939::PGN::AddressClaimed)
    .priority(3)
    .sa(0x11)
    .da(0xff)
    .build();

let frame = j1939::FrameBuilder::new(id)
    .copy_from_slice(&name.to_bytes()[..])
    .build();

注意 这只是一个示例,并不是按照 SAE J1939 标准指定的实际 'address claimed' 帧。

一些常见的 PGN 已定义了数据结构。例如,时间/日期 PGN 已完全实现。

let timedate = j1939::spn::TimeDate {
    year: 2024,
    month: 4,
    day: 20,
    hour: 10,
    minute: 1,
    second: 58,
};

let id = j1939::IdBuilder::from_pgn(j1939::PGN::TimeDate)
    .sa(0x28)
    .build();

let frame = j1939::FrameBuilder::new(id)
    .copy_from_slice(&timedate.to_pdu())
    .build();

示例

$ cargo run --example j1939decode 0x0CB34A29

这在一个 ID 为 '0x0CB34A29' 的 ID 上运行 J1939 ID 解码器。可以使用此 crate 访问 J1939 aid 的每个属性。

no_std

此 crate 支持 no_std。默认情况下,crate 创建 no_std 目标,这意味着您可以在不支持动态分配的嵌入式系统上使用 J1939 crate。

贡献

欢迎所有反馈。请随时提交错误报告、对文档的需求或其他任何反馈到 [问题跟踪器][issues]。

许可证

J1939 根据 GPL-3.0 条款分发。

有关详细信息,请参阅 LICENSE

依赖关系

~1MB
~18K SLoC