CAN双机通讯调试小结(SJA1000与MCP2515通讯)

时间:2024-04-11 23:36:29

2011-12-07 21:36:02、

效果图:

CAN双机通讯调试小结(SJA1000与MCP2515通讯)

1,51的SJA1000自收自发测试完成,见上一篇小结。

2,SJA1000自测完成后,再自测MCP2515就非常容易。主要是设置工作模式为回环模式即可。测试ok。

3,开始SJA1000和MCP2515的双机通讯

先做最简单的实验。SJA1000发送,MCP2515接收,并通过串口显示接收ID及接收数据。我把调试成功的结果写出来。

步骤1:(主要改波特率)

1)      设置波特率使2者一致。

2)      SJA1000及MCP2515由自测模式改成正常模式。

3)      MCP2515设置关闭屏蔽接收所有帧,RXB0CTRL.RXM。

CAN通讯成功。证明我的双机硬件连线都正确。

步骤2:(主要改滤波)

在步骤1的基础上

1)修改MCP2515的RXB0CTRL.RXM,使其只接收符合滤波器条件的带有扩展标识符的有效报文。

2)修改屏蔽寄存都为0,对应的标识符位将被自动接收而不进行滤波。

CAN通讯成功。

步骤3:(主要改滤波)

在步骤2的基础上

1)      修改SJA1000的ID,改成ID1=1.即

unsigned char Send_CAN_Info_ID[5]={0x88,0x00,0x00,0x0,0x11};地址20是0x11,就是设置ID1=1.

2)      修改MCP2515的ID,把滤波屏蔽全0改成全1,一定要接收ID与验收滤波一致才可通讯。SPIByteWrite(RXF0EID0,0x02);就是设置ID1=1.

CAN通讯成功。

步骤4:(主要修改ID

在步骤3的基础上

1)修改SJA1000的ID,改成ID1=1.即

unsigned char Send_CAN_Info_ID[5]={0x88,0x00,0x40,0x0,0x11};地址20是0x11,就是设置ID19=1.

2)修改MCP2515的ID SPIByteWrite(RXF0SIDL,0x48);就是设置ID19=1. EXIDE要设置为1.

CAN双机通讯调试小结(SJA1000与MCP2515通讯)

说明:ID一致才能接收。

步骤5:(配合滤波修改ID

在步骤4的基础上

1)修改MCP2515的ID SPIByteWrite(RXF0SIDL,0x68);就是设置ID19=1. EXIDE要设置为1.

由于ID通过滤波后是不同的,所以通讯应该失败。验证ok。

2)修改滤波,使其对ID19,ID20,ID21忽略,设置SPIByteWrite(RXM0SIDL,0x0F);

CAN双机通讯成功。打印时候显示接收的ID及数据,见最终效果图。