智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3050|回复: 12
打印 上一主题 下一主题

有人懂CAN总线协议吗?它是怎么实现一对一通讯的?

[复制链接]

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
跳转到指定楼层
1#
发表于 2014-5-21 14:14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN总线是以广播的方式将数据发送到总线上的,不存在目标对象的地址,那CAN是怎么实现一对一的通讯的呢?印象中也有另一种通讯协议也是这样以广播的形式发送数据的,但是它把目标对象的地址融合在了发送出去的数据里,所有对象在接收到数据后,会对数据进行分析,从而知道这数据是不是发给它的,即如果接收到的数据中包含的地址信息与自身的一致,则表示是发给自己的,那他就会接收;否则则会丢弃,从而实现一对一的通讯。我想问的是CAN通讯协议是怎么实现一对一的通讯的?它的数据中没有包含类似这样的信息啊。

CAN通讯内容的数据结构,即数据帧的数据结构:

数据帧由7 个段构成。

(1)  帧起始 (标准格式 和 扩展格式一样:1bit 显性电平0)

表示数据帧开始的段。

(2)  仲裁段 (标准格式:11bit的基本ID;扩展格式:11bit的基本ID + 18bit的扩展ID)

表示数据的优先级。

(3)  控制段 (标准格式:1bitIDE + 1bit保留位 + 4bit数据字节数;扩展格式:2bit保留位 + 4bit数据字节数)

表示保留位 及 数据的字节数 的段。

(4)  数据段 (标准格式 和 扩展格式一样:0 - 8字节)

数据的内容,可发送0 ~8 个字节的数据。

(5) CRC 段 (标准格式 和 扩展格式一样:15bitCRC顺序 + 1bitCRC界定符)

检查帧的传输错误的段。
[注]CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
    接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

(6) ACK 段 (标准格式 和 扩展格式一样:由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成)

表示确认正常接收的段。

【注】
发送单元的 ACK段:发送单元在 ACK段发送 2 个位的隐性位。
接收单元的 ACK段:
接收到正确消息的单元在 ACK槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。
这称作“发送 ACK”或者“返回 ACK”。 发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元发送单元不发送 ACK。所谓正常消息是指不含填充错误、格式错误、CRC错误的消息。

(7)  帧结束

表示数据帧结束的段
回复

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
2#
 楼主| 发表于 2014-5-21 14:23:56 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

302

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
21886

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
11271
贡献
7521
兑换币
7086
注册时间
2011-1-26
在线时间
1547 小时
3#
发表于 2014-5-21 17:33:58 | 只看该作者
依据仲裁机制。
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
4#
 楼主| 发表于 2014-5-22 14:15:12 | 只看该作者
lf1286 发表于 2014-5-21 17:33
依据仲裁机制。

谢谢...这个我搞明白了。
通过配置滤波寄存器和滤波屏蔽寄存器能实现。
那个,用K60能直接实现CAN总线通讯吗?好像还得加CAN收发器(如:pca82c250C)才行是不是?

回复 支持 反对

使用道具 举报

1

主题

302

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
21886

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
11271
贡献
7521
兑换币
7086
注册时间
2011-1-26
在线时间
1547 小时
5#
发表于 2014-5-22 18:09:12 | 只看该作者
是的
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
6#
 楼主| 发表于 2014-5-23 10:43:17 | 只看该作者
lf1286 发表于 2014-5-22 18:09
是的


两个板子实现CAN通讯,这样连接可以吧?(CANH接CANH,CANl接CANL,只是简单的两条导线,10cm左右,不是双绞线)一直调不通,看到手册上说传输介质要是双绞线、光纤什么的,我这样接可以吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

1

主题

302

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
21886

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
11271
贡献
7521
兑换币
7086
注册时间
2011-1-26
在线时间
1547 小时
7#
发表于 2014-5-23 11:21:10 | 只看该作者
那么短没问题的。因为没见到你的具体的东西,建议:硬件方面,检查有没有出现信号反射振荡,加稳定器件。如果硬件没问题,那软件设置对了没。
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
8#
 楼主| 发表于 2014-5-23 18:33:35 | 只看该作者
lf1286 发表于 2014-5-23 11:21
那么短没问题的。因为没见到你的具体的东西,建议:硬件方面,检查有没有出现信号反射振荡,加稳定器件。如 ...

硬件方面,检查有没有出现信号反射振荡。这个怎么检查啊?
我现在发现问题的所在了,发送一直不成功,所以应该是发送方出现了问题。我触发发送请求后,读取了发送控制寄存器TXBNCTRL的值发现:TXERR位被置位了,即发生了总线错误。现在正在仔细的阅读CAN协议的内容和了解mcp2510的发送流程,目标就是:了解什么叫:“总线错误”,什么原因会导致“总线错误”,怎么解决“总线错误”,我想我弄懂这些应该就没问题了。针对这方面,你有什么好建议吗?
发送控制寄存器TXBNCTRL的描述如下图:

触发发送请求后,即将bit3:TXREQ位置1后,
再读取这个寄存器的值,bit6=0; bit5=0;bit4=1(发生了总线错误)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
9#
 楼主| 发表于 2014-5-24 10:37:45 | 只看该作者
搞定了。是我的板子有问题,换了板子后就能通讯了。
回复 支持 反对

使用道具 举报

1

主题

302

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
21886

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
11271
贡献
7521
兑换币
7086
注册时间
2011-1-26
在线时间
1547 小时
10#
发表于 2014-5-24 19:05:01 | 只看该作者
搞定了就好。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-1 13:02 , Processed in 0.054324 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表