[CAN-bus/DeviceNet] 用过SJA1000的高手看过来

[复制链接]
7189|26
 楼主| 小研究 发表于 2007-6-6 08:15 | 显示全部楼层

期望答复

小弟之所以问上面第二个问题,是因为小弟在做一个小产品,这个小产品需要与一些已经成型的产品进行CAN通信。而根据这家单位提供的通讯规约来看,他们并不是严格的遵循CAN的通讯格式,有好几处出现了DLC与后面的数据数目并不相同的情况。由于CAN并没有类似于一般UART的结束位,所以小弟担心,CAN是不是根据前头得到的DLC的数目来决定后面数据的个数,等接受(或发送)完等同于DLC的数据个数就认为此帧结束呢?<br />谢谢
桂电飞天鼠 发表于 2007-6-6 09:33 | 显示全部楼层

敬佩楼主的研究精神!!

要向你学习!自觉自己把太多东西认为是理所当然了!
wxj1952 发表于 2007-6-6 09:45 | 显示全部楼层

谁说CAN没有类似于UART的结束位?

CAN是按帧/包封装传输的。当接收器检测到帧结尾“结束标志”时,即认为此帧结束,同时记录了此帧长度。与帧中的任何内容无关。<br />注意上面这句话有错误。<br /><br />这家单位是严格的遵循CAN的通讯格式,执行的是真正的CAN协议。<br /><br /><br />其他所有问题,书上都有。
wxj1952 发表于 2007-6-6 10:39 | 显示全部楼层

你寻找什么,你就发现什么。

书上都有,你没注意而已。<br /><br />我现在对CSMA/CD的理解是:节点在发送的同时也在不断的接受信号,包括自己刚发出去的信号,当发现接受的信号ID与自己发出的ID相同时就自动丢弃,不同则接受进接受缓冲区.对吗?<br /><br />NO!节点在发送的同时,检测到的必然是自己正在发送的信号。因此“包括”一词容易混淆概念。&nbsp;&nbsp;节点在发送期间,所有滤波电路是关闭的!(自测试开放除外)怎么可能校验ID?<br />这些问题自己做个实验证实一下就行了,谁说的都不算。自己质疑,自己解惑。---可别说“必然”二字不严密,“另一个节点同时也在发送怎么办?.......”<br /><br /><br />我现在想继续问的是:如果发现接受的信号与自己刚发送出去的信号不同时,是认为总线在竞争呢还是认为出错呢?会引起中断吗?<br /><br />实验中打开“仲裁丢失中断”和“错误中断”,看看那个中断发生?区别可根据TXERR是否计数。<br />&nbsp;<br />
 楼主| 小研究 发表于 2007-6-6 19:58 | 显示全部楼层

鼠兄见笑了

让各位见笑了,我这个人喜欢刨根问底。<br />wxj1952前辈让我受益非浅,谢谢了。不过我好象并没有向您透漏过我所说的那家单位的CAN规约,您怎么知道“这家单位是严格的遵循CAN的通讯格式,执行的是真正的CAN协议”?
 楼主| 小研究 发表于 2007-6-6 22:04 | 显示全部楼层

wxj1952前辈方便的话能留下EMAIL吗?

wxj1952前辈方便的话能留下EMAIL吗?<br />因为涉及该厂家的技术信息,此处不方便公开,我想邮件向你请教一下。
wxj1952 发表于 2007-6-7 10:31 | 显示全部楼层

大家都是这么做的

有一本讲国际标准DEVICENET协议的书,它就是这么做的。所有帧都是11字节,即使只有3个字节有用。后面都是00&nbsp;00&nbsp;00冗余填充。知难行易,这么做编程简便。带宽和软件开销两者比较,在这里舍谁取谁?我相信所有开发CAN协议的单位,至少会参考这本书或者这个国际标准协议文本。他做出来的东西是要准备将来与其他标准设备接口的。没有人仅凭自己的想象去开发协议。<br />&nbsp;&nbsp;&nbsp;&nbsp;没有人按照DLC来决定发送帧长度的。(芯片内部自动按照DLC发送)给自己找麻烦,“没人那么干!”所以我说“这家单位是严格的遵循CAN的通讯格式,执行的是真正的CAN协议。”因为它符合标准,“孤儿”产品是不可能拿到市场上来卖的,只能自己本企业用,要么叫企业标准,要么叫“封闭协议”,——与开放协议对应。<br /><br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部