[硬件驱动] CAN接口

[硬件驱动] CAN接口CAN接口的介绍:CAN总线可分为:高速CAN,低速CAN,单线CAN。1.在速度方面高速CAN的传输速率在125K~~1Mbps。低速CAN的速率在125Kbps以下,低速CAN具更好的容错性。2.这三种总线之间的最主要区别是物理层。以传输介质和线的数量说,单线CAN只需1条导线,低速容错CAN和高速CAN通过双绞线传输。还有电平的逻辑的区别,定义逻辑为1称作隐性,逻辑为0称作…

大家好,又见面了,我是你们的朋友全栈君。

CAN接口的介绍:

CAN总线可分为: 高速CAN,低速CAN ,单线CAN。

1.在速度方面高速CAN的传输速率(波特率)在125K~~1Mbps 。低速CAN的速率在125Kbps以下,低速CAN具更好的容错性。单线CAN波特率在33K~~83Kbps.

2.这三种总线之间的最主要区别是物理层。以传输介质和线的数量说,单线CAN只需1条导线,低速容错CAN和高速CAN通过双绞线传输。双绞线能有效减少外部电磁场对信息内部电平的干扰。 还有电平的逻辑的区别,定义逻辑为1称作隐性,逻辑为0称作显性。这个区别可从以下几种情况来说明:空闲时、有效时、睡眠时、唤醒时。这里假设收发器的电源为标准的5V和12V。 

当双线CAN的两个导线处于静止状态,两个电平是一样的,大约2.5伏,这个静电平状态就是隐形状态,也称隐性电平,也就是没有任何干扰的时候的状态称为隐性状态。当有信号修改时,CAN_High 线上的电压值变高了,一般来说会升高至少1v;而CAN_Low 线上的电压值会降低一个同样值,也是1v。那么此时,CAN_High 就是 2.5v+1v=3.5v,它就处于激活状态了。而CAN_Low 降为2.5v-1v=1.5v。

 

  2.1 空闲时 (隐性位)

[硬件驱动] CAN接口

2.2 有效时 (显性位)

[硬件驱动] CAN接口

2.3 睡眠时 

[硬件驱动] CAN接口

2.4 唤醒时 

[硬件驱动] CAN接口

3.CAN工作原理 

当 CAN 总线上的某一个节点或站发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。

每组报文开头的11 位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,当几个站同时竞争总线读取时,这种配置十分重要。

CAN 的报文格式有两种,不同之处其实就是识别符长度不同,具有11 位识别符的帧称为标准帧,而还有29 位识别符的帧为扩展帧,CAN 报文有以下4 个不同的帧类型。分别是:

(1) 数据帧:发送帧的节点设备,发送这个帧的目的是为了将某些消息传递给其他节点设备(最常用的帧类型)(帧中的仲裁域中的节点序号,是发送帧的节点设备本身的ID号。)

(2) 远程帧:发送帧的节点设备,发送这个帧的目的是呼叫其他节点设备发送数据(较为常用的帧类型)(帧中的仲裁域的节点序号,是呼叫节点设备的ID号。数据域无内容。)

(3) 错误帧:因为通信中,因为各种因素干扰太多了,总会有可能产生错误,那么出现错误怎么办?
发送帧的节点设备,发送这个帧的目的是发现总线上的帧有错误,提醒总线上的其他设备。(比较少用)

(4) 过载帧:因为通信时,总是两方或者多方通信,所以,发送数据的那一方不知道接收的那一方准备好了没有,所以,过载帧的作用就是接收方(接收节点设备)告诉发送方,接收方还没有准备好接收下一帧的工作,请缓一会。

(5)间隔帧:帧间隔就是上述四种帧的中间,都要有这个帧间隔,去隔离。以达到容易每个帧的类型。如果每个帧都直接连接在一起,变成一坨一坨的数据堆,接收方会非常难解读的。所以帧间隔好比我们文字中的标点符号中的句号一样,起到让通信密文更加易懂。

/**
 * struct can_frame – basic CAN frame structure
 * @can_id:  CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
 * @can_dlc: frame payload length in byte (0 .. 8) aka data length code
 *           N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
 *           mapping of the ‘data length code’ to the real payload length
 * @data:    CAN frame payload (up to 8 byte)
 */
struct can_frame {

 canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
 __u8    can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
 __u8    data[CAN_MAX_DLEN] __attribute__((aligned(8)));
};

can_id定义如下所示,是一个无符号的32位整形数

typedef __u32 canid_t;

can_id数据组织形式如下

/*
 * Controller Area Network Identifier structure
 *
 * bit 0-28 : CAN identifier (11/29 bit)
 * bit 29 : error message frame flag (0 = data frame, 1 = error message)
 * bit 30 : remote transmission request flag (1 = rtr frame)
 * bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
 */

0-28位为标识符,如果是扩展帧,则高11位为标准ID

29位标识是数据帧还是错误消息

30位说明是否是远程帧

31位说明是标准帧还是扩展帧。

以下是在处理can_frame时用到的掩码和标识符:

/* special address description flags for the CAN_ID */
#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
#define CAN_ERR_FLAG 0x20000000U /* error message frame */

/* valid bits in CAN ID for frame formats */
#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150464.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从智能家居的发展看对讲企业的定位

    从智能家居的发展看对讲企业的定位当你在浏览最近的热词榜单时,智能家居会位居其中。自智慧城市建设的大潮来袭之后,智能家居是“首当其冲”,自然是占了个大便宜!同时,楼宇对讲企业也迎来了春天。相信好多人都知道楼宇对讲,它最早是出现在高层住宅、公寓大厦内外,用来传递户内与单元门之间的信息,并控制防盗门,甚至可在紧急情况下住户通过它向安保值班室报警。它是智能家居体系下最重要的一部分。如今面对智…

    2022年6月22日
    26
  • 神经网络学习小记录-番外篇——常见问题汇总

    神经网络学习小记录-番外篇——常见问题汇总神经网络学习小记录-番外篇——常见问题汇总前言问题汇总1、下载问题2、环境配置问题3、shape不匹配问题a、训练时shape不匹配问题b、预测时shape不匹配问题4、nomodule问题5、显存问题6、训练问题7、乱七八糟的问题前言搞个问题汇总吧,不然一个一个解释也挺难的。问题汇总1、下载问题问:up主,可以给我发一份代码吗,代码在哪里下载啊?答:Github上的地址就在视频简介里。复制一下就能进去下载了。问:up主,为什么我下载的代码里面,model_data下面没有.pth或者.h

    2022年5月4日
    87
  • 2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」

    2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」没有安装青龙面板的先看我另外一篇教程https://blog.csdn.net/qq_39997540/article/details/122363463?spm=1001.2014.3001.55011.青龙面板拉库打开浏览器进入按照我的主页里的另一篇教程安装好的青龙面板,点击右上角的添加任务编辑任务10-23/1***点击你添加好的拉库任务右边的运行按钮,过几分钟你要拉的库就下载到你的青龙面板了2.分享收集的青龙面板脚本仓库,建议选择拉一个就可以了1.JB库.

    2022年7月20日
    25
  • java 中级面试题_java中级面试题[通俗易懂]

    java 中级面试题_java中级面试题[通俗易懂]本帖最后由唯我独赞mo于2015-11-1222:47编辑1、java中wait和sleep有什么区别?多线程条件下如何保证数据安全?答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交互,sleep通常被用于暂停执行。2、java中volatile和synchronized有什么区别?1.volatile本质是在告诉jvm当前变量在寄存器(工作内存…

    2022年10月12日
    3
  • linux过滤端口抓包_linux抓包命令tcpdump[通俗易懂]

    linux过滤端口抓包_linux抓包命令tcpdump[通俗易懂]tcpdump是一个功能强大的命令行数据包分析器,它是通过监听服务器的网卡来获取数据包,所有通过网络访问的数据包都能获取到。它也提供了过滤器的功能,可以获取指定的网络、端口或协议的数据包程序员日常排查问题,最常用的是使用过滤器功能获取指定端口的数据包,用来分析服务器是否收到请求、请求数据是否完整。参数介绍tcpdump命令的参数很多,详见如下这里只介绍一些常用的参数​-ccountcount表示…

    2022年8月20日
    9
  • IOC 的理解与解释

    IOC 的理解与解释IOC是什么?Ioc—InversionofControl,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内

    2022年8月2日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号