can总线资料分析文档.docx
《can总线资料分析文档.docx》由会员分享,可在线阅读,更多相关《can总线资料分析文档.docx(11页珍藏版)》请在冰点文库上搜索。
can总线资料分析文档
41ControllerAreaNetwork(CAN)
41.1描述
CAN控制器可以处理多种类型的帧:
数据帧(Data)、远程帧(Remote)、错误帧(Error)、过载帧(Overload);处理速率可以达到1Mbit每秒。
CAN控制器的访问可以通过配置多个寄存器来访问。
有8个邮箱(mailbox)可以被使用。
任何邮箱可以被编程为接收邮箱、发送邮箱。
如果接收邮箱已经接收到一个报文,那么CAN控制器会加锁直到应用取出这个报文;否则已经接收的这个报文会被新接收的那个报文覆盖。
发送邮箱必须同时激活。
每个发送邮箱都被分配一个优先级。
CAN控制器有一个16位的定时器,可以用于接收和发送报文的计数。
此定时器在CAN控制器有效后开始计数。
在时间触发模式下,此计数器可以在接收完最后一帧后自动复位或由应用程序复位。
CAN控制器提供了优化的功能来支持TimeTriggeredCommunication(TTC)协议。
41.2嵌入式功能
1)充分兼容CAN2.0PartA和2.0PartB;
2)速率可以达到1Mbit/s;
3)8个具有以下功能的面向对象的邮箱:
(1)每个消息的CAN规格2.0PartA和CAN规格2.0PartB的可编程性;
(2)在接收和发送模式下的可配置性;
(3)每个消息有独立的29位识别码和定义的掩码;
(4)每一个邮箱数据对象有对应两个32位的可访问的数据寄存器;
(5)在发送和接收消息时有一个16位的定时器来计数;
(6)通过ID屏蔽的位域的硬件关联来加速家族ID处理。
4)16位的内部定时器可用于计数和网络同步;
5)可编程的接收缓存,长度可以达到8个邮箱对象;
6)自动波特率和监听模式;
7)(LowPowerMode)低功耗模式和在总线活动过程中的唤醒模式,或通过应用进入这些模式;
8)可以处理数据帧(Data)、远程帧(Remote)、错误帧(Error)、过载帧(Overload)。
41.7CAN控制器特征
41.7.1CAN控制器概要
CAN是一个多主串口通讯协议,可以高效的支持实时性、安全性要求比较高的实时控制应用场景,速率可以达到1Mbit/s。
数据帧:
发送节点发送数据帧给解决节点。
最长的标准数据帧是108bit;最长的扩展数据帧128bit。
远程帧:
目的节点请求数据通过发送一个带有标识符远程帧给源节点。
然后源节点发送一个数据帧作为回复给请求数据的节点。
错误帧:
任何节点检测到总线错误产生的帧。
过载帧:
为前一个报文和后一个报文之间或远程帧提供一个延迟的帧。
AtmelCAN控制器为CPU提供充分兼容theCANprotocolV2.0PartAandV2.0PartB
的功能。
最小化CPU的通信负载。
CAN控制器自动处理数据链路层和物理层。
CPU读写数据或报文通过CAN控制器邮箱。
每个邮箱有一个标识符。
CAN控制器封装、解码要发送的报文或解析总线上收到的数据帧。
远程帧、错误帧、过载帧在软件的监控下自动处理。
41.7.2邮箱架构
CAN模块有8个邮箱。
每一个邮箱有个对应于CAN标志符的标志符。
消息可以匹配标准帧标识符或扩展帧标识符。
标志符在CAN初始化的时候被定义,后续可以动态改变,所以可以处理新的消息家族。
多个邮箱可以被配置为相同的ID。
每个邮箱可以被配置为发送或接收模式。
邮箱类型在CAN_MMRx寄存器的MOT域中定义。
41.7.2.1消息接收过程
如果CAN_MIDx寄存器的MIDE域为1,则此邮箱可以处理扩展帧,否则可以处理标准帧。
当接收到一个新的报文后,此报文ID被CAN_MAMx的值屏蔽,然后和CAN_MIDx值比较。
如果相等,则把此消息ID拷贝到CAN_MIDx寄存器。
如果一个邮箱要处理不同的报文(具有不同的ID),则CAN_MAMx寄存器屏蔽位将屏蔽ID家族中变化的位。
当接收到一个报文后,应用必须解析CAN_MIDx寄存器中屏蔽的位。
为了加速解码,CAN_MFIDx中变化的位都设置为0。
41.7.2.2接收邮箱
当CAN模块接收到一个报文后,CAN控制器查询优先级最高的邮箱,并比对ID。
如果相等,则保存在此邮箱的数据寄存器中。
根据配置,如果消息没有被应用识别,或一个带有相同ID新的消息接收到,此邮箱将会覆盖先前的一帧。
也可以配置邮箱为消费者模式。
此模式下,当接收到一个发送请求后,一个远程帧会被自动发送。
接收的第一个答复被存放在对应的邮箱数据寄存器。
多个邮箱可以组成链状结构来接收一个缓冲。
这些邮箱必须配置为相同的ID,并为接收器模式,出来最后一个邮箱,应该被配置为写重复模式。
最后一个邮箱要检测缓冲溢出。
41.7.2.3发送邮箱
当发送一个消息时,消息长度和数据写入到带有正确标识符的邮箱中。
每一个发送邮箱都会被分配一个优先级。
CAN控制器会自动发送优先级高的邮箱中的数据。
优先级保存在CAN_MMRx寄存器的PRIOR域中。
也可以配置为生产者模式。
此模式下,当接收到一个远程帧后,邮箱数据将会被自动发送。
使能这种模式后,一个生产者可以用一个邮箱代替两个邮箱:
一个检测远程帧,一个发送回复。
41.7.3时间管理单元
CAN控制器集成了一个自动运行16位的的内部定时器。
此定时器被CAN总线行的位时钟来驱动。
在CAN_MR寄存器的CANEN域初始化CAN时初始化此计数器。
在下面情况下会被清零:
1)复位;
2)低功耗模式有效的时候;
3)在时间触发模式,当最后一个邮箱接收到结束帧时。
应用也可以通过设置CAN_TCR寄存器的TIMST域来复位内部定时器。
内部定时器的当前值可以通过读CAN_TIM寄存器来获取。
当计数器从FFFFH轮转为0000H时,CAN_SR寄存器的TOVF(TimeOverflow)域置位。
此域通过读取CAN_SP寄存器被消除。
根据CAN_IMR寄存器设置的中断,当TOVF有效时,将产生一个中断。
在CAN网络中,一些CAN设备可能有个大的计数器。
在这种情况下,当计数器达到FFFFH时,应用应该停止内部计数器计数为等待另一个设备的重启状态。
此功能通过设置CAN_MR寄存器的TIMFRZ域使能。
CAN_TIM寄存器的值被冻结为FFFFh。
上述描述的的清楚此状态方法是重启定时器。
一个定时器溢出TOVF中断产生。
为了监控CAN总线活动,当帧开始或帧结束的时候或TSTP中断时,CAN_TIM寄存器的值被拷贝到CAN_TIMESTP寄存器中。
如果CAN_MR的TEOF位为1,则捕获帧结束时的值,否则捕获帧开始的值。
根据CAN_IMR设置的中断屏蔽位,当CAN_SR的TSTP的位为1时,将产生中断。
通过读取CAN_SR寄存器来清除CAN_SR的TSTP位。
时间管理单元可以工作在以下两种情况下:
时间戳模式:
内部定时器的值在帧开始或帧结束时被捕获;
时间触发模式:
当内部计数器的值达到邮箱的触发点时,邮箱发送操作被触发。
时间戳模式的使能是通过设置CAN_MR寄存器的TTM域。
时间触发模式的使能是通过设置CAN_MR寄存器的TTM域。
41.7.4CAN2.0标准特征
41.7.4.1CAN位定时配置
CAN总线上的所有控制器都必须有相同的位速率和位长。
每个控制器自身的时钟频率不一样,位速率通过时间段来调整。
CAN协议规格将匿名位时间划分为4个不同的段:
TIMEQUANTUM来自主时钟中秋的一个固定时间单元。
在位时间中,时间定量的单位的可编程范围为8到25。
SYNCSEG:
同步段,用于同步总线上的不同节点。
期望的边缘位于此段中,此段为
1TQ长。
PROPSEG:
传播段,用于补偿网络中的物理延迟时间。
是总线上信号传播时间+输入比较延迟+输出驱动延迟的2倍,可编程为1,2,…,8个TQ。
参数定义在CAN_BR寄存器的PROPAG域。
PHASESEG1,PHASESEG2:
相位段1和2:
用于补偿边界相位错误。
这两个段再同步时,可以在PHASESEG1中延长,在PHASESEG2中缩减。
PHASESEG1可编程为1,2,…,8个TQ。
PHASESEG2段长至少和信息处理时间(IPT)一样长,不大于PHASESEG1的长。
这些参数的定义在CAN_BR寄存器中。
信息处理时间(INFORMATIONPROCESSINGTIME)是请求用于确定样本位的位水平的时间。
IPT开始于样本点,通过TQ测量。
固定为2个TQ长在AtmelCAN控制器中。
因为段2在样本点的开始,是一个位时间周期的最后一段,所有段2不小于IPT。
SAMPLEPOINT(样本点):
位于段1的末尾。
总线电平值被读并被解释为相应为的值的那个时间点。
ReSynchronizationJumpWidthSJW(再同步跳转长度):
定义了相位段增加或缩减的长度。
可被编程为段1和4TQ的最小值。
如果CAN_BR寄存器的SMP域为1,在半个CAN时钟周期内获取三个输入位流,样本点为中间位置。
在CAN控制器中一个位时间周期tBIT=tCSC+tPRS+tPHS1+tPHS2。
一个时间定量tCSC=(BRP+1)/MCK
注:
BRP域的值的范围应在[1,0x7F],如,BRP=0没有意义。
tPRS=tCSC×(PROPAG+1)
tPHS1=tCSC×(PHASE1+1)
tPHS2=tCSC×(PHASE2+1)
tSJW=tCSC×(SJW+1)
CAN总线同步
自动波特率模式
41.7.4.2错误检测
有5类不相互排斥的错误类型。
CRC错误、位填充错误、位错误、格式错误、识别错误。
故障界定
为了鉴别永久错误和临时错误,每个CAN控制器有两个错误计数器:
REC(接收错误计数器)和TEC(发送错误计数器)。
错误中断处理
41.7.4.3过载帧
41.7.5低功耗模式
41.7.5.1使能低功耗模式
41.7.5.2无效低功耗模式
41.8功能性描述
41.8.1CAN控制器初始化
41.8.2CAN控制器的中断处理
41.8.3CAN控制器消息处理
41.8.3.1接收处理
接收消息的邮箱可以配置为两种模式。
接收模式,接收的第一个消息存放在邮箱的数据寄存器中。
接收重写模式,最后一个消息存放在邮箱的数据寄存器中。
简单接收邮箱
通过设置CAN_MMR寄存器的MOT域来配置邮箱为接收邮箱。
消息ID和消息接收屏蔽在接收模式有效之前被配置。
接收模式有效后,CAN_MSR寄存器的MRDY标志直到第一个消息接收后被自动清除。
当有效接收到一个消息后,MRDY标志位1.中断挂起。
中断配置取决于CAN_MCRx寄存器的配置。
消息数据被保存在邮箱的数据寄存器中指定应用提醒数据处理已经完成。
这个通过设置CAN_MCRx寄存器的MTCR域来提醒请求一次新的传输请求,这个会自动清除MRDY信号。
CAN_MSRx寄存器的MMI标志提示应用,邮箱丢失了一个消息。
当接收到一个消息时,CAN_MSRx寄存器的MRDY域同时置位,此时MMI标志置位。
通过读CAN_MSRx寄存器来清除此标志。
CAN_MSRx寄存器的MRDY域置位防止邮箱重写第一个消息。
重写接收邮箱
通过设置CAN_MMR寄存器的MOT域来配置邮箱为接收邮箱。
消息ID和消息接收屏蔽在重写接收模式有效之前被配置。
接收模式有效后,CAN_MSR寄存器的MRDY标志直到第一个消息接收后被自动清除。
当有效接收到一个消息后,MRDY标志位1.中断挂起。
中断配置取决于CAN_MCRx寄存器的配置。
当MRDY位置位且接收到一个新的消息时,新的消息覆盖了前一个消息,保存在邮箱的数据寄存器中。
AN_MSRx寄存器的MMI标志提示应用,邮箱丢失了一个消息。
通过读CAN_MSRx寄存器来清除MMI标志。
当应用读取邮箱数据时,CAN控制器可能要保存一个新的数据。
为了检查CAN_MDHx和CAN_MDLx寄存器中数据是不是属于同一类报文,应用必须在读CAN_MDHx和
CAN_MDLx的前后检查CAN_MSRx寄存器的MMI域的值。
如果在数据寄存器在读取之后,MMI置位,则软件应用必须重新读读CAN_MDHx和CAN_MDLx的值。
链式邮箱
几个邮箱被用于接收多个具有相同ID的消息,这些消息由一个大的缓冲划分的。
在这种情况下,最小次序的邮箱优先服务。
在接收和覆盖接收模式下,CAN_MMRx寄存器的优先级PRIOR域是无效的。
如果邮箱0和邮箱6接收具体同样ID的消息,第一个消息被邮箱0接收,第二个消息被邮箱5接收。
邮箱0必须配置为接收模式,邮箱5必须被配置为重写接收模式。
如果几个邮箱链状接收一个缓冲划分的多个消息,所有的邮箱都被配置为接收模式,除了最后一个邮箱被配置为重写接收模式。
第一个消息被第一个邮箱接收,第二个消息被第二个邮箱接收,最后一个消息被最后一个邮箱接收。
41.8.3.2发送处理
通过设置CAN_MMR寄存器的MOT域来配置邮箱为发送模式邮箱。
消息ID和消息接收屏蔽在重写接收模式有效之前被配置。
发送模式有效后,CAN_MSR寄存器的MRDY标志自动置位,直到第一个消息被发送。
当CAN_MSR寄存器的MRDY标志置位,软件应用通过写CAN_MDx寄存器来准备即将要被发送的消息。
当软件应用通过设置CAN_MCRx寄存器的MTCR位和消息长度时,请求一个发送指令,消息即被发送。
消息没被发送成功,MRDY标志一直保持为0。
注意:
当MRDY标志被清除时,不能访问邮箱的数据寄存器。
当MRDY标志有效时,中断挂起。
此中断的屏蔽通过CAN_IMR寄存器设置。
也可以通过设置MRTT域来发送一个远程帧。
远程帧的回复通过另外一个接收邮箱处理。
在这种情况下,设备通过两个邮箱的作用作为一个消费者。
也可以设置此邮箱为消费者模式,通过一个邮箱来处理远程帧和回复。
几个消息可能同时竞争总线仲裁。
高优先级的邮箱先发送。
通过设置CAN_TCR寄存器的MBx位,几个传输请求同时产生。
优先级在CAN_MMRx寄存器的PRIOR域设定。
0是最高优先级,15是最低优先级。
因此,可能用部分消息ID设置PRIOR域。
如果两个邮箱有同样的优先级,小序邮箱先发送。
通过设置CAN_MCRx寄存器的MACR域中止消息发送。
多个消息的发送中止可以通过写CAN_MACR寄存器的MBx域。
如果消息正在发送的过程中,被中止时,可以通过设置MRDY域来通知应用。
否则,如果消息没有发送成功,MRDY域和MABT域被置位。
当一个邮箱消息丢失了总线仲裁,如果这个消息仍有最高的优先级,CAN控制器试图为同一个消息获取下一次总线仲裁。
消息会被重新发送直到获取总线仲裁。
此功能的无效可以通过设置CAN_MR寄存器的DRPT域。
在这种情况下,如果报文第一次没有发送成功,将被发送给CAN发送器,自动被丢弃。
MABT标志有效直到设置下一次发送请求。
41.8.3.3远程帧处理
生产者和消费者模式是处理广播消息的有效方式。
推入模型允许一个生产者广播一个消息;拉近模型允许一个消费者请求一个报文。
在拉进模型中个,一个消费者发送一个远程帧给生产者。
当生产者接收到远程帧后,发送一个回复给一个或多个消费者。
使用发送和接收邮箱,一个消费者可以当两个邮箱用。
邮箱可以被配置成消费者或生产者模式。
一个单个邮箱可以处理远程帧和答复。
CAN控制器可以处理8组独立的发送者/消费者。
生产者配置
设置CAN_MMRx寄存器的MOT域为生产者模式邮箱。
消息ID和消息接收屏蔽在重写接收模式有效之前被配置。
当生产者模式有效后,CAN_MSR寄存器的MRDY标志置位,直到第一个发送请求。
应用将要发送的数据写到CAN_MDHx和CAN_MDLx寄存器中,然后设置CAN_MCRx寄存器的MTCR域。
当获得总线仲裁后,在接收到一个远程帧后,答复数据被发送。
消息没发送成功或中止,MRDY标志一直为0。
注意:
当MRDY标志被清除时,不能访问邮箱的数据寄存器。
当MRDY标志有效时,中断挂起。
此中断的屏蔽通过CAN_IMR寄存器设置。
如果接收到一个远程帧后,没有数据数据要发送,则CAN_MSRx寄存器的MMI信号有效。
可以通过读取状态寄存器来清除此标志。
CAN_MCRx的MRTR域无效。
当使用接收模式或重写接收模式时此域才有效。
消费者模式配置
设置CAN_MMRx寄存器的MOT域为消费者模式邮箱。
消息ID和消息接收屏蔽在重写接收模式有效之前被配置。
当生产者模式有效后,CAN_MSR寄存器的MRDY标志置位,直到第一个发送请求。
软件应用通过设置CAN_MCRx寄存器的MTCR域或CAN_TCR寄存器的MBx域发送一个远程帧。
应用通过CAN_MSRx寄存器的MRDY标志提醒,后读取邮箱中的数据。
中断挂起。
此中断的屏蔽通过CAN_IMR寄存器设置。
CAN_MCRx的MRTR域无效。
当使用发送模式时此域才有效。
远程帧被发送后,消费者邮箱角色转变为一个接收邮箱。
第一个接收的消息保存在邮箱的数据寄存器中。
当MRDY标志有效时,其它消息打算用此邮箱发送数据,消息将会丢失。
通过CAN_MSRx寄存器的MMI域来通知应用。
读操作会自动清除MMI有效标志。
如果生产者广播一个消息,CAN控制器可能只有一个邮箱被配置为消费者模式,0或几个邮箱被配置为接收模式,一个邮箱被配置为重写接收模式。
在这种情况下,消费者邮箱的序号应该小于重写接收邮箱的序号。
可以通过设置CAN_TCR寄存器的MBx域来同时出发多个有效的发送指令。
41.8.4CAN控制器定时模式
41.8.4.1时间戳模式
41.8.4.2时间触发模式