现在市场上的两款主流独立 CAN 协议控制芯片对比
MCP2510
完全支持CAN总线V2.0A和V2.0B技术规范,通信
速率为1 Mb/s:
- 0 - 8 字节报文长度
- 标准和扩展数据帧
- 可编程位传输速率可达1 Mb/s
- 支持远程帧
- 两个接收缓冲器, 可优先储存报文
- 六个完全验收滤波器
- 两个完全验收屏蔽滤波器
- 三个发送缓冲器,具有优先级设定以及发送中
止功能
- 用于自检的环回模式
• 硬件特性:
- 高速SPI 接口
(4.5V 工业级温度范围时可达5 MHz )
- 支持 0,0 和1,1 SPI 模式
- 带有可编程预分频器的时钟输出引脚
- 带有可选择使能设定的中断输出引脚
- ‘缓冲器满’ 输出引脚可配置为各接收缓冲器的
中断引脚或通用数字输出引脚
- ‘请求发送‘ 输入引脚可配置为发送缓冲器的控
制引脚, 用以请求立即发送报文, 或配置为通
SJA1000
特性
-- 和PCA82C200 独立CAN 控制器引脚兼容
-- 和PCA82C200 独立CAN 控制器电气兼容
-- PCA82C200 模式即默认的BasicCAN 模式
-- 扩展的接收缓冲器64 字节先进先出FIFO
-- 和CAN2.0B 协议兼容PCA82C200 兼容模式中
的无源扩展帧
-- 同时支持11 位和29 位识别码
-- 位速率可达1Mbits/s
--PeliCAN 模式扩展功能
--可读/写访问的错误计数器
--可编程的错误报警限制
--最近一次错误代码寄存器
--对每一个CAN 总线错误的中断
--具体控制位控制的仲裁丢失中断
--单次发送无重发
--只听模式无确认无活动的出错标
志
--支持热插拔软件位速率检测
--验收滤波器扩展4 字节代码4 字节屏蔽
--自身信息接收自接收请求
--24MHz 时钟频率
-- 对不同微处理器的接口
-- 可编程的CAN 输出驱动器配置
-- 增强的温度适应-40-+125
--电压 4.5-5.5V
用数字输出引脚
- 低功耗休眠工作模式
• 低功耗的CMOS 技术:
- 工作电压范围3.0V 到 5.5V
- 5mA 典型工作电流
- 5.5V时典型待机电流为10 μA
• 18引脚 PDIP/SOIC 和20 引脚 TSSOP 封装
• 允许的工作温度范围:
- 工业级 (I): -40°C 到+85°C
- 扩展级 (E): -40°C 到+125°C
说明
Microchip Technology Inc.( 美国微芯科技有限公
司) 生产的MCP2510 是一款控制器局域网络
(CAN) 协议控制器, 完全支持CAN 总线V2.0A/B
技术规范。该器件支持CAN1.2、CAN2.0A、主动和
被动CAN2.0B 等版
本的协议,能够发送和接收标准和扩展报文。它还
同时具备验收过滤以及报文管理功能。该器件包含
三个发送缓冲器和两个接收缓冲器,减少了单片机
(MCU) 的管理负担。MCU 的通讯是通过行业标准
串行外设接口(SPI)来实现的,其数据传输速率高
达 5 Mb/s。
从以上两者的性能上看,MCP510 的各种性能都要优于 SJA1000,
如:MCP510 正常工作电压为 3.5-5.5,而 SJA1000 的工作电压为 4.5-5.5,MCP510 的抗干
扰性比 SJA1000 强
MCP510
- 两个接收缓冲器, 可优先储存报文
- 六个完全验收滤波器
- 两个完全验收屏蔽滤波器
- 三个发送缓冲器,具有优先级设定以及发送中
SJA1000
一个发送缓冲器,一个接收缓冲器和一个接收 4 位验收滤波
Mcp510 采用的是 SPI 接口,而 SJA1000 采用的是 8 位并行数据传输(数据线和地址线分时
复用)。
采用 SPI 串行传输比采用并行传输要节省 8-11 根线,也就是节省 8-11 个 IO 口
所以综上考虑选用 MCP510
PCA82C250
TJA1050
采用先进 SOI 技术
独特的防失效功能
与“ISO 11898”标准完全兼容
速度高(最高可达 1M 波特)
收发器可连接 110 个节点
低电磁辐射(EME)
在未上电时以无源型态表现
具带有宽输入范围的差动接收
产品线可满足各种应用与网
器,可抗电磁干扰(EMI)
络配置
没有上电的节点不会对总线造成
完备的防失效功能则有助于
干扰
安全运作
发送数据(TXD)控制超时功能
支持安全及高频数据传输,
发送禁能时的静音模式
速率达到 1Mbps
在暂态时自动对总线引脚进行保
卓越的电磁发射(EME)与电
护
磁干扰 (EMI) 效能
输入级与 3.3V 装置兼容
低反向电流以确保未加上电
热保护
源的节点不会干扰网络
对电源和地的防短路功能
工作频率 0-1M
可以连接至少 110 个节点
工作电压:VCC 4.5~5.5V;
工作频率 60K-1M
VCANH -8-18V
VCANL -8-18V
工作温度:-40~+150℃;
工作电压:VCC 4.75~5.25V;
VCANH -27-40V
VCANL -27-40V
工作温度:-40~+150℃;
MCP2551
• Supports 1 Mb/s operation
• Implements ISO-11898
standard physical layer
requirements
• Suitable for 12V and 24V
systems
• Externally-controlled slope for
reduced RFI
emissions
• Detection of ground fault
(permanent dominant)
on TXD input
• Power-on reset and voltage
brown-out protection
• An unpowered node or
brown-out event will not
disturb the CAN bus
• Low current standby operation
• Protection against damage due
to short-circuit
conditions (positive or negative
battery voltage)
• Protection against high-voltage
transients
• Automatic thermal shutdown
protection
• Up to 112 nodes can be
connected
• High noise immunity due to
differential bus
implementation
• Temperature ranges:
- Industrial (I): -40°C to +85°C
- Extended (E): -40°C to +125°C
TJA1040 比C250/251 有几个优胜的地方
如果不上电在总线上完全无源如果VCC 关闭总线上看不到
在待机模式时电流消耗非常低最大15μA
改良的电磁辐射EME 性能
改良的电磁抗干扰EMI 性能
SPLIT 引脚代替 Vref 引脚对总线的 DC 稳压很有效
PCA82C250 是一款比较早的产品,TJA1050 是前者的替代品,在性能上优于前者,尤其是在防电磁干扰方
面。
目前世界上使用最广泛的 CAN 收发器当属 NXP(原飞利浦半导体)的各种收发器了。过去的一些 PCA82C25
0/251 就不说了,在很多场合都已经有很广泛的应用。通过工艺改造和技术创新,前些年,飞利浦推出了 T
JA1050 和 TJA1040 两款升级的 CAN 收发器。也在各种场合得到了很广泛的使用。
MCP2551 是微星公司生产的一款 CAN 收发器,在市面上也有一定的使用,但广泛程度远远低于 TJA
1050。这两款芯片都是新的收发器,但为什么会发生一边倒的局面呢。下面从一些重要的方面进行比较(T
JA1040 性能远高于 MCP2551,故不做对比):
1.最低波特率:新的 CAN 收发器为了防止 MCU 的 TXD 管脚长时间处于低电平,从而影响总线。所以都做了
最大位限制,即最小波特率限制,稳定运行情况下,TJA1050 通常支持是 60K 以上波特率(最低支持 20K),
而 MCP2551 是 16K 以上波特率(最低支持 5K)。可以说 TJA1050 在总线错误时能更快地切断错误信号,保
证正常通讯,这在汽车电子通讯中十分重要。(汽车中波特率一般是 100K、125K、250K)
2.兼容性,TJA1050 可以兼容过去的 PCA82C250 收发器,而 MCP2551 在 PCA82C250 系统中是不能工作的(我
曾测试过,当 8 个左右节点时,混用 MCP2551 和 PCA82C250,是不能通讯的)。不过,TJA1050 却是可以兼
容 MCP2551 系统。故使用 TJA1050 的兼容性很好。
3.EMC 性能:TJA1050 采用自动斜率控制,即使输出的电平拥有极低的电磁辐射,而 MCP2551 却是和以前 P
CA82C251 一样,需要用户通过波特率,来调节斜率,以使 EMI 通过。从使用上 TJA1050 比较方便。
4.输出对称性:TJA1050 由于拥有极好的输出对称性,所以即使在不加共模线圈的情况下,抗共模干扰能
力也很强。我的一个客户曾经测试过,果然 TJA1050 在群脉冲测试中性能比 MCP2551 高出 5%。
综合以上比较
选择 TJA1050
can--saj1000 设计总结(转)
发布:2009-11-02 21:43 | 作者:liu513201 | 来源:本站 | 查看:191 次 | 字号: 小 中 大
can--saj1000 设计总结(转)
发表于:2008-11-07 06:04:57 点击: 251
我在学习 CAN 应用设计中的一点心得体会,也算是走了一些弯路,现在把它写出来和大家共
同交流。
不知道各位注意到没有,大多数情况下,SJA1000 是与 8250+51 系列单片机的方式来做
CAN 的控制应用。如果是 1M/s 的通讯速度的话,实际上的流量只有大概 500 多 K 的样子,此点
希望大家在以后的应用设计中需要考虑周到。
上诉问题产生的原因是 SJA1000 的发送缓冲区只有 1 个,应用程序在判断发送完一幀
数据后,需要计算下一幀需要装载的数据长度,然后根据长度再装载相应的数据到缓冲区
,这个过程要消耗掉了一定的时间(特别是标准 51 内核的单片机),因此 CAN 总线上的数据
流实际上是发送一幀就有一个比较长的空闲区(单片机装载数据的时间),这样一来就浪费
了总线资源。微芯的 MCP2510 有 3 个发送缓冲区,在 5V 的电源下以 5Mb/s 的 SPI 端口读写数据,可
以较好的解决这个问题,但是多数的 51 单片机都无 SPI,这样也给单片机的选择上带来了一
定的麻烦。具体选择怎样的方案,只能看各自的应用情况来定了!
sja1000 调试经验
去年年底的时候,一个公司给我打电话,问我最近有没有空,说要请我帮忙做一个基于
CAN 总线通讯的东西,我去看了看,是一个数据采集系统,下面是一系列数据采集的智能板
卡,上位机是基于 WINBOND 的一块 486 的工业嵌入式控制板,操作系统使用的是 WINCE。智能
板卡通过工业底板和数据线两种方式和上位机通讯,通信协议选择的是 CAN,其中底板上的
通信选用高速波特率(1Mbps),数据线选用低速(100kbps)。
去公司的时候,公司给了我一个参考的东西,采用 SST 单片机+SJA1000 的方案构成的智
能板卡,同时告诉我可以自己设计方案。考虑到 SST 的东西没有用过,P8X591 是 PLCC 封装
的,烧写起来不方便,于是我设计了如下的方案:
1、智能板卡上的通讯采用 AT89S51+两块 SJA1000 的方式进行;
2、上位机通过 PC104 总线和一块 CAN 控制板卡连接,CAN 控制板卡上同样采用 AT89S51+两
块 SJA1000 的方案。AT89S51 和上位机通过 PC104 总线共享内存(使用 IDT 的双口 RAM);
3、采用西门子的组态软件进行 WINCE 下的板卡驱动开发;
由于以前没有做过 CAN 的东西,于是决定了先调试 CAN 通信,然后设计板卡的方案。
方案确定之后,首先是上 www.zlgmcu.com 上下载了全部的 SJA1000 和 PCA82C250 的资料。然后
始设计电路板。采用了 SJA1000 应用指南中推荐的方案,采用 SJA1000 的时钟输出为 AT89S51
的时钟,没有采用光电隔离芯片,把 TX1 接地,TX0 和 RX0 分别连接到 PCA82C250 的 TXD 和 RXD
引
脚上,RX1 连接到 PCA82C250 的 VR 上;加上了 5 欧姆的限流电阻和 120 欧姆的匹配电阻(用 110 欧
姆替代),另外加上了一个调试用的串口。没有注意而且要命的是把 SJA1000 的复位引脚和单
片机的复位引脚连接到了一起。
第一次的板子用的加急,用了三天,结果那次的板子做的极差——连铜皮都翻起来了;
我马上让那个电路板厂重新做了三块。在做板的过程中我发现了复位引脚的错误,SJA1000 的
文档上提供的是一个复位电路,但是没有给出电路的详细组成,于是我就误以为和单片机的
复位电路是一样的了。在设计这块电路板的时候,最担心的事情就是 SJA1000 的输出时钟能
不能够驱动 AT89S51,如果不能够驱动,那么一切就 OVER 了,可惜的是我的担心成为了现
实,板子焊好之后系统不工作,在 SJA1000 的时钟输入引脚上有信号输入,而且输出时钟也
正常,但是单片机就是不工作。于是我先把 SJA1000 的复位引脚连线割断,连接到了 AT89S51
的 IO 引脚上,再把 S51 的 XTAL 的两个引脚连接到 SJA 晶体的上,可惜系统还是不工作,这次电
路板设计失败了。
在总结了第一次失败的经验后,参看了 21IC 上的一个设计,决定把 AT89S51 和 SJA 的晶体
分开。并且用单片机的一个 IO 引脚来控制对 SJA 的复位。
第二次的电路板比较成功,焊接好了之后首先测试单片机的串口和 LED 指示灯,一切
OK。然后就开始测试 SJA。ZLG 提供了一个 BASIC 模式下的参考例程,我看了一下,然后又找
了本《现场总线 CAN 的原理和测试》把 SJA 的寄存器详细看了看(由于开始的时候比较忙,所
以直到这个时候才算是仔细看了看 SJA 的内部,至于 CAN 的基础协议我是根本没有看,这给我
后面带来了极大的麻烦)。然后就参考 ZLG 的程序开始写 SJA 的测试程序,那个程序写的很
大,也很全,因为我想快点把东西给做出来,于是弄了一个 1000 多行的程序,以前我的调试
程序一般都很小的。写好程序之后就开始测试,首先测试的是测试寄存器,然后一步步测试
下去,在 BASIC 模式下所有的寄存器都正常,但是在发送的时候是总是不正常,启动发送之
后就一直在发送,状态寄存器的标志位一直处在发送的状态下,然后就是报总线错误,不知
道是怎么会事情,很郁闷,上 bbs 看了一下。bullfrog 告诉我单个 CAN 节点发送是成功不了
的,如果没有收到接受 CAN 节点的应答,发送节点就会一直发送,直到超出错误计数器的允
许值使得总线关闭。同时在精华区发现在 peli 模式下有 ECC(错误寄存器),可以跟踪错误,
于是开始看 peli 模式操作过程。这个东西比较麻烦,zlg 没有提供公开的 c 代码,我找了一个
汇编的作为参考。
我第一步的目标是自发送,在 peli 模式下有自发送这种模式,在有匹配电阻的情况下可
以进行单个节点的接收和发送。第一次调试的时候没有成功,给北京 zlg 打电话,北京分公
司说让我给广州打电话,给广州打电话,几个问题都得到了很好的解答(在此谢谢 zlg 的工
程师了):
1、自发送的时候必须加上匹配电阻;
2、5 欧的限流电阻可以不需要;
3、每次发送完成之后
4、建议使用中止发送来进行单步发送;
另外他告诉我可以在 zlg 的论坛上找到很多很有用的东西。
听了他的建议,我第一件事情就是检查我的电路板,检查的结果让我大吃一惊—
—我的 ch 和 cl 竟然是短路的,万用表的狂叫不止。一步步检查,发现那个 110 欧的匹配电阻
有问题,万用表碰上去就叫,于是把那个电阻剪下来,量量还是短路。于是我怀疑把 5 欧的
限流电阻当成了 110 欧的电阻,于是把匹配电阻都去掉了。没有想到的是当我把新的 110 欧电
阻拿来的时候,万用表还是叫,这时候才发现这块万用表在 300 欧姆以下都要叫,可怜我又
打理了 n 长时间的电路板......再仔细阅读了一次 peli 模式下的操作指南,又仔细阅读了 zlg
提供的初始化规范,发现在子发送的时候发送的命令应该是 0x10 或者是 0x12(即 CMR 寄存器里
面有一个专门的控制位是用来控制自发送的,和普通的发送命令位是不同的)。在发现了这
个问题之后,自发送一切顺利的通过了。
接下来就是两个节点的互调了,我首先用自发送程序把两个节点都调试了一下,保证单
个节点发送硬件没有任何问题。然后就用双绞线通过接线端子把两个系统连接到了一起。第
一次调试采用的是 1M 的波特率(由于 ZLG 只给出了 16M 晶体下的 BTR0 和 BTR1 的初始值,我在 ZLG
的论坛上找到了一个网友自己计算的数值,后来证明这个东西有些问题),没有成功。发送节
点通过串口利用串口调试助手来控制发送,接收节点通过仿真器观察数据。虽然没有发送成
功,但是通过串口的反馈数据和仿真器的观察窗,可以看到 ECC 寄存器都发生了变化,证明
数据线上有数据过去(由于我没有示波器,只有采用这种办法)。于是我改变了两次波特率,
最低到了 5k,都没有成功,最后我从 21IC 上的一篇应用文章上找到了两个参数,这次就成功
了,通讯速率 20k。现在一切稳定,在写这篇文章的时候哪几个 LED 正欢快的闪烁着。
最后,总结几个经验:
1、一定要详细的阅读 sja 的手册和 CAN 的相关知识;
2、SJA 的复位是低电平,而且不是用一个非们把单片机的 RST 反相就可以的,有两
种解决方式:第一种是使用单片机的 IO 引脚来控制 SJA 的复位引脚,好处是单片机完全控制
SJA 的复位过程;第二种是采用适当的复位芯片,ZLG 给我推荐的是 CAT1161,我没有用过,
其好处是同步复位。
3、在自发送的模式下,需要匹配电阻,而且自发送的启动命令和普通发送的启动
命令不相同;
4、BRT0 和 BRT1 的选择,和串口通信中只要两个的误差一样就可以了不同,一定要
精心选择,建议 SJA 的外部晶体选择 16M 的,这样有利于参考 ZLG 的标准数值
5、SJA 和其他外部器件连接的时候,数据线在 373 前后都可以;
6、最好有一个示波器;
7、不要太大意的相信万用表的蜂鸣器;
8、这是从 ZLG 网站上转载过来的 peli 模式下的初始化流程
a)检测硬件连接是否正确
b)进入复位状态
c)设置时钟分频寄存器
d)设置输出控制寄存器
e)设置通讯波特率
f)设置代码验收寄存器
g)设置代码屏蔽寄存器
h)退出复位状态
i)设置工作模式
j)设置中断使能寄存器
这是一个自发收程序,采用 at89s51+sja1000,分离晶体,at89s51 晶体 11.0592
sja1000 外部晶体为 12M,通过串口进行监控
******************************************************
以下为头文件定义