目录
配置时间参考(Configuration of the bit time parameters)
前言
ISO 11898是CAN总线的规范,对应于OSI是层一和层二,即物理层和数据链路层。对于物理层来说,定义了CAN总线信号在双绞线上的电压形式,对于数据链路层来说,定义了CAN帧的各个域的用途
ISO 15765-2是诊断服务在CAN总线上传输的实现方式,对应于OSI是层4,传输层。对于classical CAN总线来说,它一帧只能承载8个字节,而上层的诊断服务却可能超过8个字节,这时候就需要传输层对数据进行分包重组流控制。ISO 15765-2还定义了应用层、传输层、数据链路层之间的编程接口,其实就是request, confirm, indication这几个原语的定义。ISO 15765-3和ISO 14229-3的内容是一样的,后者取代了前者。ISO 15765-4定义了基于CAN总线实现OBD通信的方式。(诊断有很多大于8字节的包,传诊断服务的时候TP传输协议是怎么实现的,时间参数是怎么定义的。)
ISO 14229-1 对应于OSI的层7,即应用层,就是怎么用CAN总线实现诊断的服务,请求和应答格式是什么样的。
CAN总线电气特性
CAN总线介绍
CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。
CAN是一种异步通讯bus,没有时钟线,所以需要保证一致的波特率,由两根差分信号组成(CAN_High,CAN_Low)
差分信号
使用差分信号来减小共模干扰,CAN信号分为显性和隐形,以高速CAN信号为例CAN_High和CAN_Low线上电压均为2.5V,当压差为0V时,表示显性,即逻辑0,当CAN_High为3.5V,CAN_Low为1.5V时,差值是2V时,为隐性,表示逻辑1.
CAN总线架构
CAN数据类型
按照类型:
Classical CAN(最高支持1Mbit/s的传输速率,8bit有效)
CAN FD(速度超过1Mbit/s,每次可以传输超过8bit)
按照是否支持拓展:
CAN Base,
CAN Extend。
note:一共是四种分别是CBFF(Classical Base Frame Format),CEFF(Classical Extended Frame Format),FBFF(FD Base Frame Format),FEDD
(FD Extended Frame Format)。
CAN帧类型
帧 | 用途 |
数据帧 | 用于发送单元向接收单元发送数据。 |
远程帧/遥控帧 | 用于接收单元想具有相同ID的发送单元发送数据请求。 |
错误帧 | 用于检测出错误时,通知其他帧错误帧。 |
过载帧 | 告知接收单元还未做好接收准备。 |
间隔帧 | 用于将数据帧和远程帧与前面的帧分开。 |
CAN总线特点
多主控制 | 当总线空闲时,所有单元都可以发送数据。最先发送的获得总线控制权,当同时发送的时候,根据仲裁场获得控制权。 |
消息发送 | CAN的协议中,消息都是按固定格式发送的,空闲的时候所有的总线都可以发送消息,同时发送按照仲裁结果先后发送消息,但是仲裁失败的也并不会丢失数据。 |
系统柔性 | CAN总线并没有类似于地址的信息,所以想增加单元时,只需要将单元连接即可 |
通信速度 | 因为没有clk信号线,因此异步通信,同一网络速率必须保持一致。 |
远程数据请求 | 可以使用远程帧去请求数据。 |
错误检测 | 所有单元都可以检测数据错误。并且通知所有其他所有单元,当检测错误时,会强制停止当前的发送,并且开始重传(也可以不使用重传,或定时重传) |
故障封闭 | CAN可以检测出,是暂时的数据错误(如因噪声导致的),或者是永久的数据故障(如设备出现错误)。所以当总线发生持续的错误时,将引起故障单元隔离出去。 |
连接 | CAN理论上可以连接多个单元,但是收到负载的延迟,会导致通信速率降低的原因,连接的单元越多,通信速率越低 |
CAN
DLL(Data link layer)
LLC(Data link layer) | 接收滤波(可点到点,广播,组播) 过载通知(通知节点尚未准备好接收消息) 错误恢复(再次发送数据) |
MAC(Media Access Control) | 消息帧化(DF(错误帧),RF(远程帧),EF(错误帧),OF(过载帧)) 连接控制(竞争方式支持多点传输) 裁决解决冲突的数据(根据裁决判断ID优先级和数据优先级) 故障扩散抑制(自动判断出节点的故障) 错误通知(CRC,ACK,位填充错误,格式错误,位错误) 错误检测(所有单元都可以进行错误检测) 应答(ACK,NACK) 通信方式(半双工) |
PL(Physical layer)
PCS(Physical Coding Sub-layer) | 编码/解码:NRZ不归零编码,6位插入填充位 定时:位时序,位采样数 同步:根据同步段(SS)实现 |
PMA(Physical Medium Attachment) | 这个也不在11898中 |
MDI(Medium Dependent Interface) | 这个不在11898中 |
MAC层描述
MAC子层出狱数据链路层比较底层的位置,为PL和LLC提供一些服务。
--串行化和非串行化数据 and 接收 / 发送数据
--错误检测和信号的发送
--管理 接收/发送媒介访问
MAC服务描述
数据封装 Trans data encapsulation | --接受LLC帧和控制信息的接口 --CRC校验计算和FD的bit计数 --通过添加(SOF,SRR,IDE,RTR,FDF,res,BRS,ESI,CRC,ACK,EOF)来构建MAC帧 |
媒介传输过程管理 Transmit medium access management | --在识别总线空后启动传播 --串行化MAC帧 --插入填充bit --裁决/ 在裁决失败的情况下进入接受模式 --错误检测 --ACK检测 --识别overload 的状态 --overload帧建立和启动传输 --error帧建立和启动传输 --向PL层提供串行bit流 |
接受传输过程管理 Receive medium access management | --接受来自PL的串行bit流数据 --帧结构的反序列化和重新编译 --删除填充bit --错误检测 --发送ACK --错误帧的创建和启动 --识别过载条件 --过载帧的创建和启动 |
接受数据反串口化 Receive data de-capsultion | --从接受到的帧里移除特定的MAC信息 --承接LLC帧数据,并且把接口信息发送给LLC子层 |
MAC帧结构
MAC DF(数据帧)
如果需要发送数据,那么需要将LLC包转换为MAC包,如果需要接受数据,那么需要把MAC包转换为LLC包。
SOF | Arbitration field | Control field | Data field | CRC field | ACK field | EOF |
SOF(起始位)
SOF是DFs 或者 RFs的开头,并且应该由显性bit组成,只有在bus位于隐形(空闲)的时候SOF才能发送。
Arbitration field(仲裁场)
CAN总线实际上并没有优先级标志位,他是依据仲裁位,或的关系判断是否,自己的报文允许被发送。如果自己并没有抢占到在bus总线,那么就会等待下一次发送数据
仲裁位由LLC层的标识符和RTR bit(CBFF and CEFF) 或者是 RRS bit(FBFF and FEFF)组成。RTR 和 RRS 在MAC中应该是显性的。
仲裁的结构取决于IDE bit和 FDF bit
--CBFF中(IDE显性),仲裁由11位基本标识符和RTR组成。标识符用【ID28~ID18】标识。
--CEFF中(IDE隐形),仲裁由基本标识符【ID28~ID18】,SSR and IDE【都是隐形】,拓展位【ID17~ID0】,RTR bit组成
--FBFF中(IDE显性),仲裁应该由基本标识符【ID28~ID18】,和显性的RRS组成。
--FEFF中(IDE隐形),仲裁由基本标识符【ID28~ID18】,SSR and IDE【都是隐形】,拓展位【ID17~ID0】,RRS bit组成
SRR bit(substitue Remotr Request 替代远程请求,only CEFF and FEFF)只有拓展帧有
SRR bit传输在CEFF和FEFF中ID18之后的bit,SRR应该采用隐形传输,但是接受机可以接受显性或者隐形的SRR bit(为了让标准帧永远优先于拓展帧)
RTR bit(Remote Transmission Request 远程帧传输请求,only CBFF and CEFF)
数据帧中是显性,远程帧中是隐形(为了判断当ID相同的时候数据帧永远优先于远程帧)
RRS bit (Remote Request Substitution 远程请求,only FD)
RRS应该在FD帧下传输,位置属于CBFF中的RTR的位置。RRS bit应该传输显性,但是接受方可以接受显性和隐形。(FD优先于Classical)
IDE bit(IDentifier Extension 拓展标识符)
IDE是为了区分CBFF,CEFF,FBFF,FEFF,他们是否属于
--CEFF和FEFF的仲裁位置
--CBFF和FBFF的控制位
CEFF和FEFF中IDE应该是按照隐性传输的,在FBFF和CBFF中IDE应该是按照显性传输。判断是否有拓展位。
Control field(控制场)
Control field 应该由6位(CBFF,CEFF)或者8位(FEFF)或者9位(FBFF)构成。最后四位一个是LLC传递给LLC子层的DLC。
CBFF:这个格式下控制场前两位是FDF位和r0位,传输均为显性。(6bit)
CEFF:这个格式下控制场前两位是FDF位和r0位,传输均为显性。(6bit)
FBFF:在这个模式下前五位是 IDE(显) FDF(隐) res(显) BRS ESI bit。(9位)
FEFF:这个模式下前4个bit 是FDF(隐) res(显) BRS ESI。(8位)
FDF bit(FD指示器)
这个帧是区分Classical和FD的。(Classica是显性,在FD中是隐形的)
r0 bit(Reserved bit in Classical Extended Frame Format,经典拓展帧格式保留位)
这个只是为了协议方便拓展的占位bit。传输的时候应该是显性的
res bit(Reserved bit In FD Frames,FD帧格式下的保留位)
也是为了拓展保留的位,传输的时候应该是显性的,如果传输的是一个隐形的信号,那么将看作是一个异常。
BRS bit(Bit Rate Switch,比特速率开关)
这个位标识码率是否在FD帧中切换,当BRS为显性的时候数据速率和仲裁位的速率是一致的,但是如果BRS是隐性的时候,数据段的速率大于仲裁段的速率
ESI bit(Error State Indicator,错误标志符)
这个位通过主动的error node传输显性,或者由被动error node 传输隐形。 在Classical中ESI不存在。
Data field(数据场)
为LLC子层提供数据。
CRC(循环冗余校验场)
CRC sequence:0~8字节使用CRC15。0~16字节使用CRC17。17~64字节使用CRC21。
CRC分隔符,在Classical CRC delimiter应该是单个隐形的,在FD帧中CRC可能由1个或2个隐性位组成,
ACK field(应答场)
Stuff count(FD):CAN FD在CRC场中增加了stuff count 记录填充位的个数对应8的模,还增加了奇偶校验,FSB固定位前面的一位的补码。
Stuff count 由格雷码计算和奇偶校验组成。
ACK slot:ACK要求,在发送数据的同时就要对总线数据进行回读,以及ACK slot场进行相应,(接受方需要在slot场的时间内,在报文正确的基础上,发送一个显性的位,发送者会监视总线电平上的数据)。发送方会发送2个bit的隐形电平,当监听到显性位的时候,证明发送方是正常监听到数据的。如果没有检测到显性电平,那么表示需要重新发送。
ACK delimiter:应该是一个隐形的。
EOF(停止位)
由7个隐形的bit构成
MAC RF(远程帧)
通过发送RF可以去获取数据的请求,MAC RF 和MAC DF 在,SOF, CRC,ACK,EOF中的场是等校的。RF中没有数据段
SOF | Arbitration field | Control field | CRC field | ACK field | EOF |
Arbitration field (仲裁场)
RF中是由LLC中的标识符和RTR组成的,并且RTR按照隐形传输,RF中没有FBFF或在FEFF格式。
Control field(控制场)
在CBFF和CEFF中,MAC RF的控制场应该和MAC DF的控制场等效。RF的DLC等于请求需求的DLC。
MAC EF(错误帧)
EF应该由2个不同的字段组成,第一个字段由不同节点的错误标志位叠加而组成,第二个字段由错误分隔符组成。
Error flag:
主动错误:由6个bit的显性位组成。
被错错误:由6个bit的隐性位组成。
Error delimiter(错误分割符)由7个隐性位组成。
MAC OF(过载帧)
OF type:
1.LLC要求过载。
2.被动过载。
OF应该由2个字段组成1.OF flag 2.OF delimiter
OF flag
OF flag应该由6bit 的显性标志位组成。它破坏了间隔帧的格式,别的节点也可以检测到过载情况,开始发送 OF flag。
OF delimiter
过载分隔符应由8个隐性位组成。在发送过载标志之后,每个节点都应该监视总线,直到它检测到一个隐性比特。此时,每个节点都应发送完过载标志位,所有节点同时开始多发送7个隐性比特,以完成
MAC ITM(帧间隔)
ITM:用于将数据帧和远程帧分隔开,由3个隐形组成,帧间隔的时候,不应该开启其他DF和RF的传输。在错误帧和过载帧中,不能插入间隔帧。
Error detection(错误检测)
错误类型 | 错误内容 | 错误检测段 | 检测单元 |
Bit error 位错误 | 发送方比较输出电平和总线上电平,当电平不一致就会错误 |
| 发送单元 接收单元 |
Stuff error 填充错误 | 连续检测到6个相同的电平 |
| 发送单元 接收单元 |
CRC error CRC错误 | 接收方计算的CRC校验值和发送方计算的CRC校验值不一致 |
| 接收单元 |
Form error 格式错误 | 检测出与固定格式相反的格式 |
| |
ACK error ACK错误 | 发送单元没有收到接受单元的显性ACK |
| 发送单元 |
Frame coding(帧编码)
bit流采用的是NRZ(不归零)编码格式,(在SOF,仲裁,控制,数据,CRC场中)每当检测到5个连续的一致的bit时,会在其后发送一个占位bit,发送方插入占位符,接收方,自动检测屏蔽占位符。
FD的CRC场中,stuff bit 被插入在固定的地方。(即使前一个字段的最后几个比特不是由五个连续的相同值的比特组成的序列。)
MAC primitive(MAC 原语)
MA_Data.Request(Identifier,Format,DLC,Data)
MA_Data.Indication(Identifier,Transmission_Status)
MA_Data.Confirm(Identifier,Format,DLC)
MA_Remote.Request(Identifier,Format,DLC)
MA_Remote.Indication(Identifier,Format,DLC)
MA_Remote.Confirm(Identifier,Transmission_Status)
MA_OVLD.Request()
MA_OVLD.Indication()
MA_OVLD.Confirm(Transmission_Status)
LLC层描述
LLC服务描述
LLC应该提供一下2个服务
--未应答的数据的传输服务
--未应答的远程数据的请求服务
LLC帧格式
LLC应该由identifier field,format field,DLC filed 和LLC data field组成
identifier | format | DLC | data |
Identifier field(标识符场)
标识字段分为2部分【基本标识字段,拓展标识字段】,基本标识字段为11位[ID28,……,ID18],拓展标识字段为18位[ID17,……,ID0],对于CBFF帧和FBFF帧,拓展位应该忽略
Format field(格式场)
这个字段分为,CBFF,CEFF,FBFF,FEFF中的帧,在FBFF和FEFF中,包括ESI和BRS位。
Dlc field(数据长度场)
字段中的字节数应该由DLC标识,一共4位,经典帧最多为8bit(1xxx),拓展最多为64bit(1111)。
Data field(数据场)
CAN信号传递的数据
LLC primitive
Primitives shall be written:Service.type([parameter1.……] )
1.Service.Request, 2.Service.Indication, 3.Service.Confirm。
List of LLC service primitive parameter | |
Identifier | 标识帧的内容 |
Format | 帧的设置(CBFF,CEFF,FBFF,FEFF,option giving ESI and BRS bit valus) |
DLC | 数据长度 |
Data | 传输的数据 |
Transfer_Status | 确认参数 |
Handle(optional) | 标识设备的要素 |
L_Data.Request(Identifier,Format,DLC,Data,Handle)
L_Data.Indication(Identifier,Format,DLC,Data)
L_Data.Confirm(Identifier,Transfer_Status,Handler)
L_Data.AortRequest(Handler)
L_Remote.Request(Identifier,Format,DLC,Handle)
L_Remote.Indication(Identifier,Format,DLC)
L_Remote.Confirm(Identifier,Transfer_Status,Handler)
L_Remote.AbortRequest(Handler)
PL层描述
PL服务描述
--PCS应包含与位编/解码、定时、同步以及总线故障检测相关的功能。
--PMA子层包含用于总线传输/接收的功能电路。这个不在11898中描述
--PMD子层包括物理介质和PMA子层之间的机械和电气接口。这个也不在11898中描述
PCS specification(PCS规范)
Bit 编码/解码(endcoding/decoding)
Bit time
FD提供了2个bit速率,标定bit速率和数据bit速率,数据比特速率应该小于或等于标定bit速率。
数据bit速率只在FD的数据帧中只用。当BRS是显性的时候速率是一致的,当BRS是隐性的时候,data场切换位数据bit速率。当看到CRC的第一个点,或者是EF信号时,阶段结束。
当由于检测到错误条件而切换码率时,切换时间应在采样点之后偏移小于或等于两个时间量。
Time quantum
时间量应该是由clk 周期分出的一个固定的值,至少有一个分频器,计数至少从1 to 32,最少的一个时钟量应该是一个时钟周期。
--time quantum(N) = m(N) · minimum time quantum for the nominal bit time
--time quantum(D) = m(D) · minimum time quantum for the data bit time
Bit rates and bit times
标称bit时间 = 1 / 标称比特速率 数据bit时间 = 1 / 数据bit速率
CAN位时序构成
Sync_Seg(同步段):期望在这个时间段内检测到边缘。
Prop_Seg(传播时间段):在这个时间段内应该做补偿物理延迟时间。
Phase_Seg1(相位缓冲段1):用于补偿边缘相位误差。
Phase_Seg2(相位缓冲段2):用于补偿边缘相位误差。
Sample point(采样点):采样点的位置应该是Phase_Seg1的末尾。
Tnode = Toutput + Tinput
Tprop_seg >= Tnode_A + Tnode_B + 2 * Tbusline
配置时间参考(Configuration of the bit time parameters)
位时间段的配置应满足以下限制条件
--信息处理时间应小于或等于2个时间量.
--在数据位时间上,Phase_Seg2应大于等于最大信息处理时间。
--在标称位时间内,Phase_Seg2应大于或等于这两项的最大值:(SJW和信息处理时间)
--在标称位时间和数据位时间中,SJW应小于或等于Phase_Seg1和Phase_Seg2这两项的最小值
同步(Synchronization)
在每一个时间量上都要分析电平是显性还是隐性,在两个不同的bus在时间量上被称之为边缘,接收方只在Sync_Seg为受干扰的边沿进行同步, 在Sync_Seg外部检测到的边缘可能会导致CAN节点将其操作同步到该边缘。
所有的硬同步和再同步都要遵循以下规范
--a)只允许在一个比特时间内(两个采样点之间)进行一次同步。在检测到某条边后,在下一次采样点检测到的总线状态为隐性时,停止同步。
--b)只有在前一个采样点检测到总线状态时,是隐性的边缘才会引起同步(以前的读总线状态)。CRC定界器的采样点之后,从隐性到显性的第一个检测到的边缘将引起同步。CAN实现可以选择性地选择在CRC定界器的采样点之后,至少由发射机延迟的量加上一个时间量子看到的从隐性到显性的第一个检测边缘上同步。
--c)当节点处于总线集成状态时,在帧间空间(除第一个中断位外)、在FD帧内边缘FDF位与随后的显性res位之间进行硬同步
--d)所有其他的从显性到隐性的边满足规则a)和b)应使用,用于重新同步,只有一个例外:传输FD帧的节点在传输该帧的数据阶段时不应该同步。
相位误差(Phase error of an edge)
-- e = 0 没有误差
-- e > 0 如果该边位于Sync_Seg和当前位的采样点之间
-- e < 0 如果边缘位于当前位的采样点和下位的Sync_Seg之间
硬同步
硬同步只发生在SOF位,所有接收节点调整各自当前位的同步段,调整宽度不限。
发送节点NodeA在发送SOF位时,SOF位的下降沿在SS段,这时接收节点NodeB发现自己当前位的SS段和发送节点SOF位的SS段不同步,故NodeB强行将自己当前的SS段拉到与SOF位的SS段同步。
再同步
重新同步,硬同步只能保证SOF位的同步,无法保证后续位的同步,故这就需要重新同步。重新同步发生在PBS1或PBS2中,分为两种情况。
--PBS1延长:发送节点NodeA比接收节点NodeB的时间慢,显然接收节点要进行不同,故要将PBS1延长N个Tq的时间,此时,发送节点NodeA和接收节点NodeB的采样点就同步了。
--PBS2缩短:发送节点NodeA要比接收节点NodeB的时间快,故NodeB的采样点就要滞后,但是因为有PBS2的存在,采样点不会相差太大,当前本次位的采样点没法完全同步,但是为了下一位完全同步,接收节点NodeB会缩短PBS2。