【问题标题】:What is the `flags` field for in canfd_frame in SocketCAN?SocketCAN 的 canfd_frame 中的“flags”字段是什么?
【发布时间】:2017-06-30 16:26:57
【问题描述】:

非 FD(“传统”)CAN 帧在 SocketCAN 中具有以下格式:

struct can_frame {
        canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
        __u8    can_dlc; /* frame payload length in byte (0 .. 8) */
        __u8    __pad;   /* padding */
        __u8    __res0;  /* reserved / padding */
        __u8    __res1;  /* reserved / padding */
        __u8    data[8] __attribute__((aligned(8)));
};

帧 ID、长度和数据都有明确的位置,加上一些我们不用担心的填充。但是,对于 CAN-FD 帧,有一个额外的字段:

struct canfd_frame {
        canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
        __u8    len;     /* frame payload length in byte (0 .. 64) */
        __u8    flags;   /* additional flags for CAN FD */
        __u8    __res0;  /* reserved / padding */
        __u8    __res1;  /* reserved / padding */
        __u8    data[64] __attribute__((aligned(8)));
};

flags 字段看起来很有用,但我没有找到关于它实际包含什么的文档。它是内部的(即由内核设置)吗?可能的标志是什么,它们是什么意思?

谢谢!

【问题讨论】:

    标签: linux can-bus socketcan


    【解决方案1】:

    我在这里找到了一些资料:

    http://elixir.free-electrons.com/linux/latest/source/include/uapi/linux/can.h#L112

    /*
     * defined bits for canfd_frame.flags
     *
     * The use of struct canfd_frame implies the Extended Data Length (EDL) bit to
     * be set in the CAN frame bitstream on the wire. The EDL bit switch turns
     * the CAN controllers bitstream processor into the CAN FD mode which creates
     * two new options within the CAN FD frame specification:
     *
     * Bit Rate Switch - to indicate a second bitrate is/was used for the payload
     * Error State Indicator - represents the error state of the transmitting node
     *
     * As the CANFD_ESI bit is internally generated by the transmitting CAN
     * controller only the CANFD_BRS bit is relevant for real CAN controllers when
     * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make
     * sense for virtual CAN interfaces to test applications with echoed frames.
     */
    

    如果我理解正确的话,ESI 位仅对虚拟 CAN 接口的测试有用。不过,BRS 位相当低级,它并没有指定硬件是自动设置还是取消设置。

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2011-12-16
      • 2011-08-19
      • 2014-02-01
      • 2010-09-05
      • 2022-12-30
      • 1970-01-01
      • 2020-08-13
      • 2010-11-26
      相关资源
      最近更新 更多