打印
[CAN-bus/DeviceNet]

求助:有关通过MCP2510获取ID地址的问题

[复制链接]
2844|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zuanzhou|  楼主 | 2010-3-28 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近我在做CAN总线通信的实验,控制器采用MSP2510,实验采用两块板,其中一块发,另一块收,两块板能够正常通信,但有关ID地址的问题我搞的不明白,希望大家能够帮忙解释一下。我的问题是接收板怎样知道是从哪块板收的数据呢,即接收板接收的来自发送板的ID地址从接收板的MCP2510的哪个寄存器中能读出来?

相关帖子

沙发
ejack| | 2010-3-29 07:48 | 只看该作者
ID都没有读出来你就知道通信正常?

使用特权

评论回复
板凳
zuanzhou|  楼主 | 2010-3-29 12:17 | 只看该作者
我分别设置好了发送板和接收板的ID地址,采用标准帧由发送板向目标地址的接收板发送8个字节的数据,接收的8个字节的数据都是正确的,并且用一块板发送多块板接收,接收的数据也是正确的,但我不知道如何从MSP2510中获取发送板的ID地址,即不知道哪个寄存器中存储的是发送板的ID地址。

使用特权

评论回复
地板
ejack| | 2010-3-29 12:28 | 只看该作者
看你用的是哪个接收缓冲区。

#define RXBCTRL(i)        0x60 + (16 * i)
#define RXBSIDH(i)        0x61 + (16 * i)
#define RXBSIDL(i)        0x62 + (16 * i)
#define RXBEID8(i)        0x63 + (16 * i)
#define RXBEID0(i)        0x64 + (16 * i)
#define RXBDLC(i)                0x65 + (16 * i)
#define RXBD0(i)                0x66 + (16 * i)
#define RXBD1(i)                0x67 + (16 * i)
#define RXBD2(i)                0x68 + (16 * i)
#define RXBD3(i)                0x69 + (16 * i)
#define RXBD4(i)                0x6A + (16 * i)
#define RXBD5(i)                0x6B + (16 * i)
#define RXBD6(i)                0x6C + (16 * i)
#define RXBD7(i)                0x6D + (16 * i)

使用特权

评论回复
5
zuanzhou|  楼主 | 2010-3-29 21:52 | 只看该作者
我用的是RXB0,但从RXBSIDH和RXBSIDL读取的是发送板标准帧中写入的目标板的ID地址,但不是发送板自身的地址呀,我想获取的是发送板的地址。
   我实验时发送板发送数据时:
   sndBuf[0] = 0x03;
    sndBuf[1] = 0xff;
    sndBuf[2] = 0xe0;
    WriteMcp2510(TXB0CTRL,3,sndBuf);
    接收板接收数据后读取的ID地址程序为:
   ReadMcp2510(RXB0SIDH,2,revBuf);
    nRecID_Hi = revBuf[0];//读取的值0xff
    nRecID_Lo = revBuf[1] & 0xe0;//读取的值为0xe0
从以上结果可以看出二者是一致的,但我想知道的是从接收板中如何获知发送板自身的ID地址。

使用特权

评论回复
6
ejack| | 2010-3-30 08:00 | 只看该作者
应用层可以自己定义的。
比方说你定义ID域的前若干位作为目标节点地址(目标节点设置过滤),后若干位作为源节点地址(目标节点不过滤),这样目标节点在过滤并接收该条报文后,直接从ID域的后面读取发送方的地址。

使用特权

评论回复
7
zuanzhou|  楼主 | 2010-3-30 12:13 | 只看该作者
明白了,衷心感谢ejack的热心帮助!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝