0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

两款CAN总线控制器的对比和应用场景分析

电子设计 来源:单片机与嵌入式系统应用 作者:唐苗 2021-05-19 10:55 次阅读

引言

TMS320F2812是TI公司新推出的DSP芯片,内嵌CAN总线控制器eCAN模块(以下简称为eCAN),性能较已有的DSP(如TMS320C24x)内嵌的控制器有很大的提高;数据传输更加灵活方便,数据量较大,可靠性更高,功能更加完备。而SJA1000是Philips半导体公司推出的新型独立CAN控制器,是PCA82C200的替代产品,支持CAN2.0B协议,完全兼容CAN2.0A,是目前应用比较多的CAN独立控制器之一。

CAN总线系统通信的软件一般可以分为三个主要模块:系统初始化模块、信息发送模块和信息接收模块。下面以TMS320F2812内嵌的eCAN模块与广州周立功公司的DP51+仿真实验仪之间的CAN通信为例,主要就eCAN和SJA1000在这三个部分的操作进行比较。

1 eCAN简介

eCAN同时支持11位和29位的标识码,是一个32位的控制器。eCAN的有些寄存器(如控制寄存器)必须以32位方式访问;一些寄存器(如时间标识寄存器)和邮箱所在的RAM范围可以以8位、16位或32位方式访问。eCAN对信息的接收和发送是基于邮箱的,共有32个邮箱,占用512字节RAM。每一个邮箱都可以有自己独立的ID,独立配置成接收邮箱或者发送邮箱,也可以禁止不用。这样大大增加了数据的容量和信息的处理能力。

o4YBAGCkfoiAIfkKAABa7AXgDz4981.png

TMS320F2812内嵌的eCAN还有一种SCC模式。它是eCAN的缺省工作模式,功能有所简化,同样支持11位和29位的标识码;但只有16个(0~15)邮箱可用,有些寄存器(如CANTSC)也保留不用,可以通过主控制寄存器(CANMC)中SCB位的置“1”来进入eCAN模式。本文若没有特别说明指的就是全功能eCAN工作模式。

2 系统初始化

CAN控制器有两种状态模式,即工作模式和复位模式(eCAN是初始化配置模式)。不同的状态模式,对寄存器的访问操作功能是不同的。无论是eCAN还是SJA1000,在使用之前,也就是进入工作模式之前,必须对它们进行初始化。

仅当eCAN处于初始化模式下,初始化才能进行。DSP复位后就激活了初始化模式,此时对eCAN进行初始化。首先必须将主控制寄存器的改变配置请求位(CCR)置“1”,且CANES的改变配置使能位(CCE)也必须为“1”时才能正式进入配置模式,就可以对位定时器配置寄存器进行操作了。要返回工作模式,必须将CCE和CCR依次成功清“0”。图1(a)为eCAN初始化的流程。

将模式寄存器的复位位置“1”,就可以使SJA1000进入复位模式。在复位模式,需要设定时钟分频寄存器、总线定时寄存器、报文验收寄存器、验收屏蔽寄存器和输出控制寄存器等。设置好各个寄存器后,就可以将复位位清“0”,进入正常的工作模式。进入复位模式后,需要立即设置时钟分频寄存器,将CAN模式位置“1”才能进入PeliCAN模式,否则进入SJA1000的缺省工作模式,即BasicCAN;而其他寄存器的设置则没有严格的次序限制。在这两种工作模式中,SJA1000寄存器从数量、地址分配到功能等方面是有较大区别的。这里主要讨论的是SJA1000的PeliCAN模式。图1(b)给出了SJA1000初始化的流程。

由图1可以看出,eCAN的初始化在操作上比SJA1000要复杂一点,需要成功地将CCR和CCE先后置“1”,才能进行配置操作;而SJA1000只需要将复位位置“1”就可以进行初始化操作了。

3 信息发送

eCAN要发送信息,首先须将某个邮箱配置成发送邮箱,写邮箱标识符寄存器和报文控制寄存器以及数据。使能该邮箱后,将发送寄存器(CANTRS)相应的位置“1”,eCAN就将该邮箱中的数据发送到总线上。报文控制寄存器中的TPL用来设定消息发送的优先级,数字越大,优先级越高。当多个邮箱需要向总线发送消息时,虽然同时将CANTRS相应的位置“1”,优先级高的邮箱先将消息发送;如果邮箱的优先级相同,则邮箱号数大的,先发送。以0号邮箱为例,其发送消息的流程如图2 (a)所示。

SJA1000一般可以采用查询方式来发送信息。不过每一次操作只能向总线上发送1帧信息,而不像eCAN那样,可以一下子向总线发送多帧消息。当SJA1000的发送缓冲区为空时,CPU就可以将要发送的信息写入该缓冲区,然后置命令寄存器的发送请求位,即可将消息发送到总线上。发送完毕后,清空发送缓冲区,等待CPU写入新的信息。SJA1000发送信息时的流程如图2(b)所示。

pIYBAGCkfoKAOc-uAABkBqezRQc124.png

对于eCAN,如果邮箱需要发送另一条信息,就需要将邮箱的RAM更新。一般只需要更新数据场,即重新写MDL和MDH中的内容。更新数据时,须将CANMC中的CDR位置“1”,并在MBNR处写入需要更新数据的邮箱号,就可以写入新的数据了。之后,将CDR清“0”,使能该邮箱就可以按正常步骤发送信息了。由此可见,对eCAN发送的信息进行数据更新比SJA1000复杂得多。

4 信息接收

eCAN和SJA1000在接收总线上的信息时,都可以采用查询方式或者中断方式。这里仅讨论各自的中断方式。

eCAN要接收信息时,相应的邮箱需要配置成接收邮箱并使能,还需要设定信息标识符寄存器(MID)。局部接收屏蔽寄存器(LAM),用来存储局部接收屏蔽位。覆盖保护寄存器(CANOPC)相应位,当其为1时,保护相应邮箱里的数据不被新的数据覆盖,此时还需要另一个邮箱来接收新的后续信息,否则会引起数据丢失;有数据丢失时CANRML相应的位会置1。当eCAN邮箱接收到信息时,就会产生相应的中断,继而CPU判断是哪个邮箱接收到信息,再读取邮箱里的数据。以31号邮箱为例,eCAN的信息接收的流程如图3 (a)所示。

SJA1000接收信息时,在接收中断使能的情况下,当总线上的信息满足报文验收的接收条件,无论该信息是数据帧还是远程帧,都会将信息存放在接收缓冲区,并产生接收中断。CPU就可以读取接收缓冲区中的信息并保存,然后可以清空接收缓冲区,等待接收下一条信息。SJA1000的信息接收流程如图3(b)所示。

o4YBAGCkfnyAcNJgAABTF-7ojdA967.png

SJA1000在PeliCAN模式下有两种滤波方式:单滤波方式和双滤波方式。当验收屏蔽寄存器的某位为1时,验收代码寄存器的相应位“不起作用”,即信息标识符相应位无论是“0”还是“1”都会被接收;当验收屏蔽寄存器的某位是0时,信息标识符相应位与验收代码寄存器的相应位必须一致,该信息才被接收。有关这两种滤波方式的具体内容请参见相关手册或论文。eCAN的验收条件比SJA1000相对复杂。当邮箱标识符寄存器中的AME位为0时,LAM将不起到作用,此时只有标识符与邮箱的标识符完全一样的信息才被邮箱接收或者存储;当AME为1时,eCAN将使用LAM,此时对信息的接收情况与SJA1000的单滤波方式相似,只接收符合条件的信息。

此外,eCAN与SJA1000在对远程帧的处理上也有较大的差别。eCAN处理远程帧时分为两种情况:向其他节点请求数据和自动应答远程帧。这两种情况必须将报文控制寄存器中RTR位置“1”。要向其他节点请求数据,必须将某邮箱配置成接收邮箱,写入标识符,使能该邮箱,将CANTRS相应的位置“1”,就向总线上发送了一个远程帧。eCAN会将对方的应答信息存在这个邮箱(这得保证没有相同ID的其他接收邮箱)。自动应答远程帧时,邮箱配置成发送邮箱,且邮箱标识符寄存器中的AAM位必须置“1”,写入需要发送的数据。当该邮箱接收到其他节点发送来的远程帧时,CANTRS中的相应位自动置位,将报文发送到总线上。而SJA1000接收到1帧信息后,根据RTR位来判断是否是远程帧,如果是远程帧,则根据制定的通信协议对该远程帧作出相应的回答,不能自动应答远程帧。

结语

eCAN和SJA1000都是功能十分强大的CAN总线控制器,都有各自的优点,可以应用在不同的场合。虽然它们在CAN总线通信中具体操作上有较大的差别,但其基本思路是一致的。在软件编程上大致可分为初始化、信息发送和信息接收三个基本模块,再加上总线睡眠与唤醒处理、总线出错处理和总线超载处理等功能模块,就可以构成一个比较完整的CAN总线通信软件。随着CAN总线技术的推广,eCAN和SJA1000都将有不错的表现。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    445

    文章

    47476

    浏览量

    407879
  • 控制器
    +关注

    关注

    112

    文章

    15020

    浏览量

    170336
  • 总线
    +关注

    关注

    10

    文章

    2680

    浏览量

    87049
收藏 人收藏

    评论

    相关推荐

    一个典型的CAN用场景 CAN总线是如何解决多点竞争的问题?

    近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。现在每一辆汽车上都装有CAN总线
    发表于 01-13 14:47 541次阅读

    独立CAN总线控制器的说明

    BSJA1000 电路是一独立CAN 总线控制器,主要应用于汽车和一般工业环境领域。该产品与CAN 2.0B 通信协议完全兼容,具有很多先
    发表于 12-21 15:57

    Exar两款多路输出同步降压型的可编程电源模块

    模块与可编程双控制器结合起来,对于要求更多电压轨和更高电流的FPGAs 和SOCs的系统中都能实现高达30Amps输出。  值得一提的是,Exar的XRP9710和XRP9711两款可编程电源模块无需牺牲产品性能便可以实现遥测,重新配置和快速上市的小封装全系统电源解决方案
    发表于 09-28 16:16

    CAN总线控制器与DSP的接口

    摘要:讨论了CAN总线控制器与DSP之间的接口,介绍了流行的CAN控制器芯片SJA1000和TMS320系列DSP芯片的接口时序,并给出了它
    发表于 12-03 15:22

    DP1040C是一应用于 CAN 协议控制器和物理总线之间的接口芯片

    DP1040C是一应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,速率可达到 1Mbps,
    发表于 10-28 17:02

    CAN控制器通过根线上的电位差来判断总线电平

    CAN控制器通过根线上的电位差来判断总线电平can.h#can.h#include"stm32f2xx.h" #ifndef __
    发表于 08-19 09:14

    如何选择合适的转换模块解决CAN路数不够的问题

    在嵌入式产品开发过程中,可能会面临CAN路数不够的问题。如何选择合适的转换模块解决这个问题呢?本文为您讲解几模块的选型方法。应用场景CAN总线
    发表于 11-04 06:02

    几种LED调光协议分析及具体应用场景介绍

    市面上主流几种LED调光协议分析及具体应用场景介绍目前国内外的LED驱动已经不仅仅满足照明需求,更多是去追求各种不同场景的应用,搭配各种数字协议,实现某种特定的功能,比如在汽车大灯的应用中,未为兼容
    发表于 12-31 08:04

    CAN总线错误分析与解决

    0.CAN总线错误分析与解决–讲的最精辟的放在最前面我们知道CAN总线上的每个节点往总线上发送数
    发表于 01-14 06:55

    CAN总线控制器Verilog代码

    CAN总线控制器Verilog代码
    发表于 05-20 10:32 167次下载

    对C8051F040的CAN控制器分析及应用

    介绍了C8051F040 内部集成的CAN 控制器的结构,重点分析CAN 控制器可能有的冲突及相应硬件软件的解决方案,在此基础上给出了以此
    发表于 08-18 10:44 26次下载

    基于CAN总线的家庭控制器的设计与实现

    基于CAN总线的家庭控制器的设计与实现  引言   CAN(Controller Area Network)总线是德国Bosch公司为
    发表于 11-07 09:30 668次阅读
    基于<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的家庭<b class='flag-5'>控制器</b>的设计与实现

    基于CAN总线的悬浮控制器监控终端的设计

    基于CAN总线的悬浮控制器监控终端的设计 CAN总线是德国Bosch公司为解决现代汽车中多传感器和控制
    发表于 01-25 16:25 611次阅读
    基于<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的悬浮<b class='flag-5'>控制器</b>监控终端的设计

    CAN总线控制器IP核代码分析

    本内容写出了CAN总线控制器IP核的代码,并做出了详细分析
    发表于 06-28 11:39 6119次阅读

    基于FPGA的CAN总线控制器的设计

    今天给大侠带来基于FPGA的CAN总线控制器的设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,CAN 总线协议解析以及
    的头像 发表于 05-18 09:21 874次阅读
    基于FPGA的<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>控制器</b>的设计