一、概述
1.1 特征
- can协议2.0 ,高达1Mbps
- 32个邮箱 1)—可配置接收或发送—可配置标准或扩展标识符—接收标识符屏蔽功能—支持数据和远程帧—支持0到8字节的数据帧—在接收和发送的消息上使用32位时间戳(发送接收计时器)—接收新消息保护—允许动态可编程的发送消息优先级—采用具有两个中断级别的可编程中断方案—在发送或接收时采用可编程中断超时
- 低功耗模式•可编程唤醒总线活动(总线唤醒)•自动回复远程请求消息•在仲裁或错误丢失的情况下自动重传帧•由特定消息同步的32位时间戳计数器(与邮箱16一起通信)(邮件时间戳同步)•自测模式-以环回模式接收自己的消息。提供了自生成的确认,从而消除了另一个节点提供确认位的需要。
- CPK:打包CAN协议 3.3V-CAN Transiever电平转换 差分信号传输数据
1.2 CAN模块和网络
控制器局域网(CAN)采用串行多主通信协议,有效支持分布式实时控制,具有高可靠性,通信速率高达1mbps。CAN总线非常适合在电气噪声环境中运行的应用,例如需要可靠通信的汽车和其他工业领域。
可以使用仲裁协议和错误检测机制在多主机串行总线上发送数据长度最多为8字节的优先级消息,以实现高水平的数据完整性。
1.2.1 CAN协议概述
CAN协议支持四种不同的帧类型用于通信:
CAN总线上的帧CAN总线传输数据的最小单位是帧
CAN总线用消息标识符代替了设备地址,总线上所有设备都接收到相同的数据,并对比数据中所包含的消息标识符,选择是否采用当前数据。
•将数据从发送节点传输到接收节点的数据帧。
•由节点传输的远程帧,用于请求传输具有相同标识符的数据帧。
•任何节点在检测到错误条件时传输的错误帧。
•在前一帧和后一帧或远程帧之间提供额外延迟的过载帧。
此外,CAN规范版本2.0B定义了标识符字段长度不同的两种不同格式:
- 具有11位标识符的标准帧 CAN标准数据帧长度为44 ~ 108位 在一个标准数据帧中最多可以插入23个数据位(数据流编码) 标准帧的总最大数据帧长度为131位
- 具有29位标识符的扩展帧。CAN扩展数据帧长度为64 ~ 128位 在一个扩展数据帧中最多可以插入28个数据位(数据流编码) 扩展帧为156位。
组成标准或扩展数据帧的位字段及其位置如图13-2所示,包括:
•帧开始(起始段)
•包含标识符和发送消息类型的仲裁字段
•表示传输字节数的控制字段
•最多8字节的数据
•循环冗余校验(CRC)(CPT单元自动打包,不需要人为干预)
•应答
•帧结束位(停止)
1.3 CAN模块总览
eCAN具有内部32位架构。
eCAN模块包括:
•CAN协议内核(CPK)
•消息控制器包括:
—内存管理单元(MMU),包括CPU接口、接收控制单元(接收过滤)和定时器管理单元
—邮箱RAM(可存储32条消息)
—控制和状态寄存器
在CPK接收到有效消息后,消息控制器的接收控制单元确定是否必须将收到的消息存储到邮箱RAM的32个消息对象之一中。接收控制单元检查所有消息对象的状态、标识符和掩码,以确定适当的邮箱位置。接收到的邮件存储到通过接受筛选的第一个邮箱中。如果接收控制单元找不到任何邮箱来存储接收到的邮件,则丢弃该邮件。
消息由11位或29位标识符、控制字段和最多8字节的数据组成。
当必须传输消息时,消息控制器将消息传输到CPK的传输缓冲区中,以便在下一个总线空闲状态开始消息传输。当必须传输多个消息时,准备传输的具有最高优先级的消息将由消息控制器传输到CPK中。如果两个邮箱具有相同的优先级,则优先传输编号较高的邮箱。
计时器管理单元包括时间戳计数器,并对接收或发送的所有消息设置时间戳。当消息在一段允许的时间(超时)内没有被接收或发送时,它会产生中断。时间戳特性仅在eCAN模式下可用。
要发起数据传输,必须设置传输请求位(TRS.n)。然后在没有CPU参与的情况下执行整个传输过程和可能的错误处理。如果邮箱已配置为接收消息,则CPU可以使用CPU读取指令轻松读取其数据寄存器。邮箱可以配置为在每次成功发送或接收消息后中断CPU。
1.3.1 标准CAN控制器(SCC)模式
SCC模式是eCAN的简化功能模式。在这种模式下,只有16个邮箱(0到15)可用。时间戳功能不可用,可用的接受掩码数量减少。默认选择该模式。使用SCB位(CANMC.13)选择SCC模式或全功能eCAN模式。
1.3.2 内存映射
eCAN模块在内存中映射了两个不同的地址段。第一个段用于访问控制寄存器、状态寄存器、接受掩码、时间戳和消息对象的超时。对控制寄存器和状态寄存器的访问被限制为32位宽访问。本地接受掩码、时间戳寄存器和超时寄存器可以被8位、16位和32位宽访问。第二个地址段用于访问邮箱。
这个内存范围可以访问8位,16位和32位宽。如图13-4所示,这两个内存块中的每一个都使用512字节的地址空间。
消息存储由可由can控制器或CPU寻址的RAM实现。
CPU通过修改RAM或附加寄存器中的各种邮箱来控制CAN控制器。各种存储元素的内容用于执行接收过滤、消息传输和中断处理等功能。
eCAN中的邮箱模块提供32个8字节数据长度的消息邮箱、一个29位标识符和几个控制位。每个邮箱都可以配置为发送或接收。在eCAN模式下,每个邮箱都有其单独的接受掩码。
Note:在应用程序中未使用的LAMn、MOTSn和MOTOn寄存器和邮箱(在CANME寄存器中禁用)可能被CPU用作通用数据内存。
1.3.2.1 32位访问控制和状态寄存器
如第13.4.2节所述,只允许对控制寄存器和状态寄存器进行32位访问。对这些寄存器的16位访问可能会损坏寄存器内容或返回错误数据。TI发布的C2000Ware文件采用影子寄存器结构,有助于32位访问。以下是影子寄存器结构如何用于执行32位读写的几个示例:
步骤1:执行32位读操作,将整个寄存器复制到它的影子中;
步骤2:修改影子中所需的位;
步骤3:执行32位写操作,将修改后的影子复制到原始寄存器中。
像TAn和RMPn这样的位通过向其写入1来清除。应注意不要无意中清除碎片。在步骤1之前将阴影寄存器初始化为零是一个很好的做法
在上面的示例中,需要检查TA25位的值。这是通过首先将整个CANTA寄存器复制到其影子(使用32位读取),然后检查相关位,重复此操作直到满足该条件来完成的。不应使用以下声明检查TA25位:
DSP28335一个地址16位,两个地址就是一个字(32位)一个邮箱四个字 4*32(bit)
邮箱ID寄存器只能在该邮箱被禁止时,才能修改
1.4 消息对象
eCAN模块有32个消息对象(邮箱)。
可以将每个消息对象配置为发送或接收。每个消息对象都有自己的接受掩码(在eCAN模式下;不在SCC模式)。
一个消息对象由一个消息邮箱组成,包含:
•29位消息标识符
•消息控制寄存器
•8字节消息数据
•29位接受掩码
•32位时间戳
•32位超时值
此外,寄存器中相应的控制位和状态位允许对消息对象进行控制
1.5 消息邮箱
消息邮箱是在接收到CAN消息之后或发送之前实际存储CAN消息的RAM区域。
CPU可以使用消息邮箱的RAM区域,该区域不用于作为普通内存存储消息。
每个邮箱包含:
•消息标识符- 29位扩展标识符- 11位标准标识符
•标识符扩展位,IDE (MSGID.31)•
接受掩码启用位,AME (MSGID.30)
•自动应答模式位,AAM (MSGID.29)
•传输优先级级别,TPL (MSGCTRL.12-8)
•远程传输请求位,RTR (MSGCTRL.4)
•数据长度码,DLC (MSGCTRL.3-0)
•最多8个字节的数据字段
每个邮箱都可以配置为四种消息对象类型之一(参见表13-1)。发送和接收消息对象用于一个发送方和多个接收方之间的数据交换(1对n通信链路),而请求和应答消息对象用于建立一对一的通信链路。邮箱内存布局如表13-2所示。
1.5.1 发送邮箱
CAN的消息优先级如果一直比较低,可能发不出去:缺点
CPU将需要传输的数据存储在配置为发送邮箱的邮箱中。将数据和标识符写入RAM后,如果设置了相应的TRS[n]位,则通过设置相应的CANME使邮箱启用,则发送消息。n。
如果配置了多个邮箱作为发送邮箱,并且设置了多个对应的TRS[n],则从优先级最高的邮箱开始,按降序依次发送消息。
在scc兼容模式下,邮箱的传输优先级取决于邮箱号。
最高的邮箱号(=15)代表最高的发送优先级。
在eCAN模式下,邮箱传输的优先级取决于消息控制域(MSGCTRL)寄存器中TPL字段的设置。TPL中值最高的邮箱首先被发送。只有当两个邮箱在TPL中具有相同的值时,编号较高的邮箱才会首先传输。
如果由于仲裁丢失或错误导致传输失败,则将重新尝试发送消息。在重新尝试传输之前,CAN模块检查是否有其他传输请求。如果在发送缓冲区中的消息丢失仲裁之前,已经设置了高优先级邮箱(由MBX号或相关的TPL值决定)的TRS位,则发送缓冲区的内容将被替换为高优先级邮箱的内容,并且在仲裁丢失后发送高优先级邮箱。但是,如果该TRS位是在发送缓冲区中的消息失去仲裁之后设置的,则只有在发送缓冲区中的当前消息被发送之后,才会发送更高优先级的MBX。
1.5.2 接受邮箱
使用适当的掩码将每个传入消息的标识符与接收邮箱中持有的标识符进行比较。当检测到相等时,接收到的标识符、控制位和数据字节被写入匹配的RAM位置。同时,设置相应的receive- messagending位RMP[n] (RMP.31-0),如果使能则产生接收中断。如果没有检测到匹配,则不存储消息。
当收到消息时,消息控制器开始在邮箱号最高的邮箱处查找匹配标识符。在SCC兼容模式下,eCAN的邮箱15的接收优先级最高;在eCAN模式下,邮箱31的接收优先级最高。
RMP[n] (RMP.31-0)在读取数据后需要被CPU复位。如果该邮箱已经收到第二条消息,并且已经设置了receive-message-pending位,则设置相应的messagelost位(RML[n] (RML.31-0))。在这种情况下,如果覆盖保护位OPC[n] (OPC.31-0)被清除,则存储的消息将被新数据覆盖;否则,将检查下一个邮箱。
如果将邮箱配置为接收邮箱,并设置了RTR位,则该邮箱可以发送远程帧。发送远程帧后,CAN模块将清除邮箱的TRS位。
1.5.3 CAN模块在正常配置下运行
如果CAN模块处于正常配置(即不处于自检模式),则网络上应该至少还有一个CAN模块,配置为相同的比特率。另一个CAN模块不需要配置为实际从发送节点接收到邮箱RAM中的消息。
但是,它应该配置为相同的比特率。这是因为发送CAN模块期望CAN网络中至少有一个节点确认正确接收了发送的消息。根据CAN协议规范,接收到消息的任何CAN节点都将进行确认(除非确认机制已显式关闭),而不管它是否已被配置为存储接收到的消息。在eCAN模块中不可能关闭确认机制。
不存在其他节点对自检模式的要求。在这种模式下,发送节点产生自己的确认信号。唯一的要求是将节点配置为任何有效的比特率。也就是说,位计时寄存器不应该包含CAN协议不允许的值。
通过将CANTX和CANRX引脚连接在一起(如SCI/SPI/McBSP模块),不可能在外部实现直接数字环回。在自检模式(self-test mode, STM)下可以进行内部环回。
1.6 ECAN 配置
1.6.1 CAN模块初始化
CAN模块在被使用前必须初始化。只有当模块处于初始化模式时才可以进行初始化。流程如图13-6所示。
Programming CCR (CANMC.12) = 1设置初始化模式。只有当CCE (CANES.4) = 1时,才能进行初始化。然后,可以写入配置寄存器。
仅限SCC模式:
•为了修改全局接受掩码寄存器(canam)和两个本地接受掩码寄存器[LAM(0)和LAM(3)], CAN模块也必须设置为初始化模式。
•通过编程CCR(CANMC.12) = 0再次激活模块。
•硬件复位后,初始化模式处于激活状态。
Note:如果CANBTC寄存器被编程为零值,或者留下初始值,CAN模块永远不会离开初始化模式,即CCE (CANES.4)位在清除CCR位时保持为1
Note:初始化模式和正常模式之间的转换与CAN网络同步进行。也就是说,CAN控制器等待,直到它检测到总线空闲序列(= 11隐性位)之前,它改变模式。在卡到主导总线错误的情况下,CAN控制器无法检测总线空闲状态,因此无法执行模式转换。
1.6.2 CAN位定时配置
CAN协议规范将标称位时间划分为四个不同的时间段:
SYNC_SEG:这部分位时间用于同步总线上的各个节点。在这个区段内预计会有一个边缘。此段始终为1 TIME QUANTUM (TQ)。
PROP_SEG:这部分比特时间用于补偿网络中的物理延迟时间。它是信号在总线上的传播时间、输入比较器延迟和输出驱动器延迟之和的两倍。此段可从1到8时间量子(TQ)进行编程。
PHASE_SEG1:这个相位用来补偿正边相位误差。此段可编程从1到8时间量子(TQ),并可以通过重新同步延长。
PHASE_SEG2:此相位用于补偿负边缘相位误差。该段可编程从2到8时间量子(TQ),并可以通过重新同步缩短。
在eCAN模块中,CAN总线上的位长度由参数TSEG1 (BTC.63)、TSEG2 (BTC.2-0)和BRP (BTC.23.16)决定。
TSEG1结合了CAN协议定义的PROP_SEG和PHASE_SEG1两个时间段。seg2定义了时间段PHASE_SEG2的长度。
IPT(信息处理时间)对应于处理所读比特所需要的时间。IPT对应两个TQ单位
在确定位段值时,必须满足以下位定时规则:
•TSEG1(min)≥TSEG2
•IPT≤TSEG1≤16 TQ
•IPT≤TSEG2≤8 TQ
•IPT = 3/BRP(得到的IPT必须四舍五入到下一个整数值)
•1 TQ≤SJW min[4 TQ, TSEG2] (SJW =同步跳变宽度)
•为了利用三次采样方式,必须选择BRP≥5
1.6.3 CAN比特率计算
其中bit-time为每比特的时间量子数(TQ)。SYSCLKOUT为设备时钟频率,与CPU时钟频率一致。BRP为BRPreg + 1的值(CANBTC.23-16)。
在上面的等式中,TESG1reg和TSEG2reg表示在CA