[硬件驱动] 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java实现深拷贝和浅拷贝_深复制与浅复制的区别

    java实现深拷贝和浅拷贝_深复制与浅复制的区别clone顾名思义就是复制,在Java语言中,clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1.使用new操作符创建一个对象2.使用clone方法复制一个对象那么这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序执行

    2022年10月1日
    0
  • OpenStack实践(二):Linux Bridge方式实现Local Network[通俗易懂]

    OpenStack实践(二):Linux Bridge方式实现Local Network[通俗易懂]OpenStack实践(二):Linux Bridge方式实现Local Network

    2022年4月21日
    81
  • 舆情分析系统技术解决方案及作用论文_网络舆情解决方案

    舆情分析系统技术解决方案及作用论文_网络舆情解决方案网络舆情分析工作的开展最先需要做好的就是网络舆情的搜集工作,由于互联网信息内容庞杂多样,舆情信息搜集起来困难,所以要进行舆情分析更是难上加难。但若舆情信息收集的不全,就极易导致舆情分析不正确。那么,到底舆情分析工作要怎么做呢?针对此问题,提供了以下舆情分析系统技术解决方案,供各位参考。在了解方案的前,先来说说为什么要采用舆情分析系统进行监测分析。一、使用舆情分析系统进行监测分析的意义网络信息化时代,信息数据量庞大,若一味采用人工进行舆情信息分析,容易出现收集的舆情不全、舆情分析不正确等问题。而通过利用

    2022年9月20日
    0
  • Python面试题之基础篇(二)[通俗易懂]

    PHP中文网给大家总结了Python面试题,本文只是一些基础问题,以供大家学习。例如:python递归的最大层数;ascii、unicode、utf-8、gbk区别;字节码和机器码的区别;三元运算写法和应用场景,等等。

    2022年1月18日
    62
  • spring官网下载[通俗易懂]

    spring官网下载[通俗易懂]1、第一步:打开官网:http://projects.spring.io/2、第二步:点击“SPRINGFRAMEWORK”图片3、第三步:点击“小猫”图标4、第四步:拉到页面中部的位置,找到

    2022年7月1日
    33
  • 深度学习常见的问题

    深度学习常见的问题

    2021年11月19日
    48

发表回复

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

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