#socket-can #iso-tp #linux-kernel #isotp #api-access #can #iso-15762-2

socketcan-isotp

ISO-TP或ISO 15762-2的常见应用之一是统一诊断服务(UDS),该服务用于汽车ECU的故障诊断

5个版本 (3个稳定版)

1.0.2 2023年6月28日
1.0.1 2022年5月20日
1.0.0 2021年8月28日
0.1.1 2020年2月18日
0.1.0 2019年12月10日

#231 in Unix APIs

Download history 366/week @ 2024-04-20 590/week @ 2024-04-27 604/week @ 2024-05-04 733/week @ 2024-05-11 616/week @ 2024-05-18 400/week @ 2024-05-25 770/week @ 2024-06-01 656/week @ 2024-06-08 494/week @ 2024-06-15 481/week @ 2024-06-22 522/week @ 2024-06-29 530/week @ 2024-07-06 626/week @ 2024-07-13 575/week @ 2024-07-20 568/week @ 2024-07-27 527/week @ 2024-08-03

每月 2,389 次下载
用于 ecu_diagnostics

BSD-3-Clause

24KB
423 行代码

📦✨ socketcan-isotp

SocketCAN IsoTP Rust库

Build Status crates.io crates.io

文档

使用 🦀 构建

SocketCAN ISO-TP库。基于socketcan-rs和isotp.h。

Linux内核支持通过类似网络API的方式使用CAN设备。此库允许轻松访问此功能,而无需与libc调用纠缠。

ISO-TPISO 15762-2允许发送超过默认CAN帧八字节的扩展数据包。ISO-TP的一个常见应用是统一诊断服务(UDS),该服务用于汽车ECU的故障诊断。

can-isotp是一个处理ISO-TP协议的内核模块。有关如何构建和加载can-isotp内核模块的说明,请参阅https://github.com/hartkopp/can-isotp

use socketcan_isotp::{self, IsoTpSocket, StandardId};

fn main() -> Result<(), socketcan_isotp::Error> {
    let mut tp_socket = IsoTpSocket::open(
        "vcan0",
        StandardId::new(0x123).expect("Invalid src id"),
        StandardId::new(0x321).expect("Invalid dst id"),
    )?;

    let buffer = tp_socket.read()?;
    println!("read {} bytes", buffer.len());

    for x in buffer {
        print!("{:X?} ", x);
    }

    println!("");

    Ok(())
}

开发环境设置

设置Isotp内核模块:https://github.com/hartkopp/can-isotp

设置虚拟CAN接口。

sudo modprobe vcan && \
sudo ip link add dev vcan0 type vcan && \
sudo ip link set up vcan0

依赖项

~2.5MB
~53K SLoC