为什么CAN40E3000进总线方法扩展帧ID前面都有E,如ID:0xEF87372.

在CAN协议里报文的标识符不代表節点的地址,而是跟报文的内容相关的因此,发送者以广播的形式把报文发送给所有的接收者节点在接收报文时根据标识符的值决定軟件是否需要该报文;如果需要,就拷贝到RAM里;如果不需要报文就被丢弃且无需软件的干预。为满足这一需求BeCAN为应用程序提供了个可配置的、位宽可变的6个(0-5)过滤器组,用于只接收那些软件需要的报文硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤从而占用一定的CPU资源。


为了能够更有效的操作实践这一功能我使用了如上图的CAN40E3000进总线方法的分析仪器USB-CAN200 以及它的上位机.
在这里需要说明一点,將R0+与R0-相短接则内部的120欧姆的电阻会被接入40E3000进总线方法,不需要画蛇添足在R0+与R0-之间自己再找一个120欧姆的电阻外部接上!!


在接收中断里面已經有现成的标准桢结构,所以设置好Idfliter或者Idmask就可以

也就是上面的 这一段函数;
如果我的扩展id是0x ;想只接收0x12xxxxxx的标识符号,那么是否填入
就可以叻呢 本以为是这样,结果通过上位机发出去之后led板上的符号并没有变化;说明并没有接收到。这是为什么呢

所以对于扩展的ID号码它囿29位,但是程序中设计的过滤器位32位所以:

所以扩展id的顺序填入如上图所示意,这儿假设:
RTR位我们设置为0表示数据帧IDE位设置为1表示扩展ID,因为我们的ID是29位的所以RTR = 0; IDE = 1;
再来看我们参考手册中,定义的 :


将上面数据中的标示符号位再填入到过滤器中:


在CAN规范中并未定义代表逻輯电平的物理状态(例如电压)iCAN网络使用符合ISO11898-2标准的电平信号,一般来讲CAN40E3000进总线方法为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V);CAN40E3000进总线方法为“显性”(逻辑0)时CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2.5V)。

识别符—标准格式 识别符的长度为11 位相当于扩展格式的基本ID(Base ID)。这些位按ID-28 到ID-18 的顺序发送最低位是ID-18。7 个最高位(ID-28- ID-22)必须不能全是“隐性”

识别符—扩展格式 和标准格式形成对比,扩展格式由29 位組成其格式包含两个部分:11 位基本ID、18 位扩展ID。

基本ID:基本ID 包括11 位它按ID-28 到ID-18 的顺序发送。它相当于标准识别符的格式基本ID定义扩展帧的基本优先权。

扩展ID:扩展ID 18 位它按ID-17 到ID-0 顺序发送。 标准帧里识别符其后是RTR 位。 RTR 位(标准格式以及扩展格式) RTR 的全称为“远程发送请求位(RemoteTransmission Request BIT)” RTR 位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”

扩展格式里,基本ID 首先发送其次是IDE 位和SRR 位。扩展ID 的发送位与SRR 位之後


SRR 位(扩展格式)
SRR 是一隐性位。它在扩展格式的标准帧RTR 位位置因此代替标准帧的RTR 位。
标准帧与扩展帧的冲突是通过标准帧优先于扩展幀这一途径得以解决扩展帧的基本ID(参见以下的“扩展识别符”)如同标准帧的识别符。
标准格式里的IDE位为“显性(逻辑0)”而扩展格式里的IDE位为“隐性”。

在标识符列表模式下屏蔽寄存器当作标识符寄存器用。因此使用2个标识符来代替上面的标识符加屏蔽位的方式。接收报文标识的每一位都必须跟过滤器标识符相同

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

CAN接口兼容规范2.0A和2.0B(主动),位速率高达1兆位/秒它可以接收和发送11位标识符的标准帧,吔可以接收和发送29位标识符的扩展帧
扩展帧的仲裁域有29位,可以出现2^29中报文且在数据链路上是有间隙的(对操作者透明)。
标准帧的仲裁域是连续的11位可以出现2^11种报文;
控制帧中的DLC(数据长度)完全相同,但保留位不同标准帧IDE、R0,扩展帧R1、R0必须以显性电平发送(由数据链路層操作),对程序员透明;
其它的都一模一样所以,其实CAN标准帧和扩展帧只是在ID的长度上不一样以能扩展更多的CAN节点,更好地支持上层協议而已
注意:这里的帧ID 并不是表示发送的目的地址,而是表示访问40E3000进总线方法的消息的优先级(帧ID值越小优先级越高,最小是0x)

我要回帖

更多关于 E总线 的文章

 

随机推荐