数据帧
数据帧的用途:
发送设备主动发送数据,属于广播式的通信方式。发送设备发送的消息,也可叫做报文(Message)。
数据帧有两种格式,分别是标准格式和扩展格式*:(*扩展格式增加了ID位数,能承载更多种类的ID)
数据帧标准格式
帧起始(SOF):打破宁静,告诉其他设备要开始广播了。
仲裁段(报文ID+RTR):
- 报文ID:报文ID,用以表示后面数据帧的功能,并且报文ID还用以区分优先级,多个设备同时发送时,根据规则,ID小的报文优先发送。
- RTR :RTR占据1位,必须为显性0,名称叫做远程请求标志位,*用以区分数据帧还是遥控帧。(*数据帧必须为显性0,遥控帧必须为隐性1)
仲裁主要是靠报文ID来实现,RTR加入进来是用来目的是,*相同ID的数据帧和遥控帧,数据帧的优先级大于遥控帧。(*数据帧和遥控帧的ID可以相同)
控制段(IDE+r0+DLC):
- IDE:IDE名称叫做“ID扩展标志位”,*用以区分标准格式还是扩展格式。(*标准格式为显性0,扩展格式为隐性1)
- r0 :r0是保留位。
- DLC:表示数据段的长度,CAN总线一帧数据可以有1~8字节有效载荷。(例如,1个字节数据就发送0001,如果是8个字节,就发送1000)
数据段(DATA):DLC指定几个字节,就需要发几个字节,不能多也不能少。
CRC段(CRC+CRC界定符):
- CRC:15位,CRC是一种高效的校验算法,*它会对前面所有的数据位进行CRC算法计算。(从SOF到DATA,都会进行CRC算法计算)
- CRC界定符:1位,必须是隐性电平1。
ACK段(ACK槽+ACK界定符):
- ACK槽:1位,作用就是应答,来判断有没有设备收到信息。
- ACK界定符:1位,必须是隐性电平1。
ACK段有两个注意事项:
1、ACK槽可以允许多个接收方共同拉开总线,因为一个报文消息,可以被多个设备同时接收,多设备同时操作总线输出显性0,是没问题的。
2、并不是发送方发送一段完整的波形才会有接收应答,而是发送方和接收方共同完成一整个波形。发送方每发送一位,接收方就立马接收到这一位了,所以在数据帧还没结束的时候,其实接收方已经接收到完整数据了,所以应答是夹在发送过程中的。
帧结束(EOF):7位,隐性电平1停止位。