2011-12-07 21:36:02、
效果图:
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.
说明: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及数据,见最终效果图。