总线—CAN

本文介绍了CAN总线的起源、特点(如高速、实时性、可靠性等)、通信原理、帧格式、电气特性和误码处理,以及其在软件开发中的关键环节,包括API、数据处理和状态管理。同时,文章还探讨了CAN总线在不同领域的应用和与其它总线的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

can介绍

        CAN总线是一种用于实时控制的串行通信协议,全称为Controller Area Network。它最初由BOSCH公司于1980年代研发,用于汽车电子设备的内部通信。如今,CAN总线已经广泛应用于工业自动化、医疗设备、嵌入式系统等多个领域。

CAN总线的主要特点:

  1.  高速传输:CAN总线的传输速率最高可达1Mbps,能够满足控制的需求。
  2.  强实时性:CAN总线具有高优先级的仲裁机制,保证了关键报文的优先传输,确保了实时性。
  3.  可靠性高:CAN总线支持多主控制器和故障处理机制,具有较强的容错能力。
  4.  节省带宽:CAN总线采用多报文传输方式,减少了总线资源的占用,降低了系统的通信开销。
  5.  成本低:CAN总线硬件成本较低,且具有较高的传输效率,被广泛应用于各种嵌入式系统中。

通信概念

        CAN总线的基本通信单元是节点(Node),每个节点通过CAN收发器与总线连接。CAN总线采用多主控制结构,即网络中可以有多个节点同时发送报文。当多个节点同时发送报文时,CAN总线会根据报文的优先级进行仲裁,确保高优先级的报文优先传输。

        CAN总线支持多种报文传输模式,包括数据报文和远程报文。数据报文用于在节点之间传输数据,而远程报文则用于请求节点发送数据。CAN总线还支持广播报文,即一个节点向所有其他节点发送报文。

        总之,CAN总线是一种高速、实时、可靠的串行通信协议,广泛应用于嵌入式系统和实时控制领域。

CAN 协议基础知识

        基本原理

        CAN 协议采用多主通信模式,通过仲裁机制来解决多个节点同时发送消息的问题。每个节点都可以主动发送或接收消息,但只有一个节点可以发送消息。当多个节点同时发送消息时,CAN 总线会根据报文的优先级进行仲裁,保证高优先级报文的优先传输。

        帧格式

        CAN 帧是数据传输的基本单位,它由帧起始符、仲裁字段、控制字段、数据字段、CRC 字段和应答字段组成。

  • 仲裁字段:仲裁字段包含了发送报文的节点的标识符(ID)和远程传输(RTR)位。ID 是一个标识符,用于标识发送报文的节点和报文内容。RTR 位指示该报文是数据报文还是远程报文。
  • 控制字段:控制字段包含了保留位、仲裁(AL)位、仲裁超时(AT)位和报文接收确认(ACK)位。保留位用于未来的扩展。AL 位指示仲裁过程中是否发生冲突。AT 位指示仲裁过程中是否超时。ACK 位用于接收节点确认报文是否正确接收。
  • 数据字段:数据字段包含了要发送的数据。它最多可以包含 8 个字节的数据。
  • CRC 字段:CRC 字段包含了用于检验数据完整性的循环冗余校验码。
  • 应答字段:应答字段用于接收节点向发送节点发送应答消息。它包含一个应答位和一个保留位。应答位用于接收节点向发送发送应答消息。

        电气特性

        CAN 总线采用差分传输方式,它需要两个信号线:CANH 和 CANL。两根线的差值来判断显性和隐性,差值大为显性,差值小为隐性。显性的优先级要比隐性高。

        速率

        CAN 总线的传输速率最高可达 1Mbps。

        误码率(BER)

        CAN 协议支持误码检测和纠错,具有较高的误码率(BER)。在 CAN 总线中,误码率通常在 10^-9 到 10^-12 之间。

CAN总线硬件知识

        CAN总线硬件结构通常包括CAN控制器、CAN收发器和CAN总线驱动器。CAN控制器通过总线接口与CAN收发器连接,CAN收发器通过总线驱动器与CAN总线连接。CAN总线通常采用差分传输方式,通过CAN总线驱动器的控制,实现CAN总线上多个节点之间的数据传输和通信。

 can总线软件开发

  1.  CAN总线通信协议:熟悉CAN总线的通信协议规范,包括帧格式、帧ID、错误处理机制等。
  2.  CAN总线API和库函数:掌握CAN总线相关的API和库函数,以便在软件中进行CAN通信的配置、发送和接收操作。
  3.  数据处理和解析:根据CAN总线通信的需求,编写代码进行接收到的数据处理、解析和存储。可能需要涉及数据的打包和解包、数据转换和计算等操作。
  4.  状态管理和错误处理:实现适当的状态管理机制,跟踪CAN总线的状态和错误情况,并实施相应的错误处理策略。
  5.  驱动程序开发:如果需要与特定硬件设备进行CAN总线通信,可能需要开发相应的硬件驱动程序,与硬件进行交互。
  6.  调试和测试:进行适当的调试和测试,确保CAN总线通信的可靠性和正确性。使用相关的调试工具和设备,如CAN分析仪等。
  7.  实时性考虑:在实时控制应用中,需要对总线访问和通信的实时性进行特别处理,确保数据的及时性和准确性。

作为嵌入式开发,这边重点讲一下第二条api和库函数

首先列举一些api

  •  CAN_Init():初始化CAN控制器,配置相关参数,如波特率、仲裁方式、中断处理等。
  •  CAN_Start():启动CAN控制器,开始CAN通信。
  •  CAN_Stop():停止CAN控制器,结束CAN通信。
  •  CAN_Send():向CAN总线发送数据帧。
  •  CAN_Receive():从CAN总线接收数据帧。
  •  CAN_Transmit():通过CAN总线发送数据帧。
  •  CAN_ReceiveMultiple():从CAN总线接收多个数据帧。
  •  CAN_GetError():获取CAN控制器的错误状态。
  •  CAN_SetInterrupt():设置CAN控制器的中断处理方式。
  •  CAN_GetInterrupt():获取CAN控制器的中断状态。

 这是我打开的一个在Linux内核的can头文件

我们在开发驱动时候,会调用里面的结构体。

CAN 总线调试和故障排除

        在实际应用中,往往需要对 CAN 总线进行调试和故障排除。您需要了解使用适当的工具和技术来识别和解决 CAN 总线的问题和故障。

在这里介绍一些常见的方法和技术(难的我也不会)

  1.  可视化工具:使用CAN总线分析仪或示波器等可视化工具,监视CAN总线上的信号和数据,以便观察和分析通信过程中的问题。这些工具可以显示CAN帧、消息的时间戳、电平波形等有用的信息。
  2.  错误码分析:CAN总线的设备通常会生成错误码,用于指示通信过程中的错误情况。使用错误码,可以快速定位通信故障,并进行相应的解决措施。
  3.  硬件连接检查:检查CAN总线的物理连接,确保连接正常、终端电阻设置正确,以及电源供应稳定。
  4.  数据传输监视:使用调试工具和库函数,在软件中监视CAN数据的发送和接收,以便检测潜在的问题和错误。可以记录和分析数据,在数据传输发生错误时进行排查。
  5.  日志记录和分析:记录CAN数据和系统日志,以便在故障发生时进行回溯和分析。这些日志可用于识别问题,并查看发送和接收的数据。
  6.  电磁干扰排除:CAN总线的稳定性和可靠性受到电磁干扰的影响。通过审查设备周围的电磁干扰源,加强电磁防护,可以减少或消除干扰。
  7.  信号捕获和仿真:使用信号捕获工具和仿真器,可以模拟和重现CAN总线的通信场景,以便识别问题、调试和分析。
  8.  软件调试工具:使用软件调试工具,如调试器和串口调试工具,可以检查代码和运行时变量,确定软件层面的问题。
  9.  固件和驱动更新:确保使用最新版本的固件和驱动程序,以便修复已知问题和改善系统的性能和稳定性。

CAN 总线应用领域

        CAN 总线广泛应用于汽车电子、工业自动化、医疗设备等领域。您需要了解不同领域对 CAN 总线的应用需求和特点,以更好地设计和应用 CAN 总线。

  1.  汽车电子系统:CAN总线是汽车电子领域中最常用的通信协议之一。它在汽车中用于连接各个ECU(电控单元),例如发动机控制单元、制动系统、仪表板等,实现车辆内部的数据传输和通信。
  2.  工业自动化:CAN总线在工业自动化中广泛应用于机器控制、监控和数据采集系统。它用于连接传感器、执行器、PLC(可编程逻辑控制器)和其他设备,实现实时的控制和数据交换。
  3.  医疗设备:CAN总线在医疗设备中用于实现设备间的通信和数据传输,例如检测设备、医疗监护设备等。
  4.  航空航天:CAN总线在航空航天领域被广泛使用,用于飞机系统中的通信和数据交换,如飞行控制、电子航空系统等。
  5.  机器人技术:CAN总线在工业和服务机器人领域中应用广泛,用于连接机器人的各个部件、执行器和传感器,实现机器人的控制和协调。
  6.  仪器仪表:CAN总线可用于连接各种仪器和仪表,例如实验室设备、测量仪器、控制系统等,实现数据采集和通信。

总结

最后我们来总结一下can和其他总线的区别以及优缺点 

优点

- 支持差分信号,抗干扰能力强。

- 具有独特的错误检测和处理机制,可靠性高。

- 支持多种数据传输率,适用于实时性要求高的应用。

- 可以连接多达120个节点。

缺点

-相对于SPI和I2C,硬件和软件成本较高。

- 协议较为复杂,开发难度大。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值