CAN 简介
CAN(Controller Area Network)是一种串行通信协议,最初由Bosch公司开发,用于在汽车和工业控制等领域中进行数据通信。CAN协议具有高可靠性、高速度和多节点的特点,因此在现代汽车的控制系统中得到了广泛使用。关于协议的细节,参考阅读(我自己看过了,觉得讲的不错,自己就不重复造轮子制造垃圾了):CAN总线详解CAN总线协议详解。
前言
大家首先补充一下总线的概念:
总线(Bus) 是指计算机内部各组件(如 CPU 、存储器、输入输出设备等)之间传送信息的一种物理线路及其通信协议。总线的作用是将各种不同类型的硬件组件连接起来,协调它们之间的通信和数据传输,提供数据传输的通道和传输的时序,实现数据的并行传输。
总线可以分为三种类型:数据总线、地址总线和控制总线。
数据总线,又称为数据通路,是一组并行传输的线路,用于在计算机系统中传输数据,它的宽度通常是8位、16位、32位或64位,决定了它每一次可以传输的数据大小。
地址总线,指示数据在内存中的位置,它的宽度决定了系统可以寻址的内存空间大小。它的地址总线的宽度越大,计算机所能访问的内存容量也就越大,例如一个32位的地址总线可以访问4GB的内存空间。
控制总线是一组线路,用于控制计算机中各个部件之间的信号传递和数据交换。它包括了一些控制信号,如读写控制、中断控制等,用于控制内存、输入输出设备等的数据传递和操作。
总的来说,总线在计算机中发挥着重要的作用,它能够使各组成部分之间高效地进行数据、地址和控制信号传输,从而协调计算机内部的运作,提升计算机系统的性能和效率。
一、CAN协议
1、什么是CAN
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,最初由Bosch公司开发,用于在汽车和工业控制等领域中进行数据通信。CAN协议具有高可靠性、高速度和多节点的特点,因此在现代汽车的控制系统中得到了广泛使用。
关于协议的细节,参考阅读(我自己看过了,觉得讲的不错,自己就不重复造轮子制造垃圾了):
CAN总线详解
CAN总线协议详解
CAN协议的基本特点:
双线制结构:CAN协议采用双线制结构,即CAN总线由两根线构成,分别为CAN-H和CAN-L。
面向帧的通信:CAN协议是一种面向帧的通信协议,将数据打包成帧进行传输。
帧结构:CAN通信的数据单位是帧,分为标准帧和扩展帧两种,每帧包含ID、数据和控制位等信息。
多主机体系结构:CAN协议支持多主机体系结构,多个节点可以同时进行数据传输。
差分信号:CAN协议使用差分信号的方式进行通信,具有较强的抗干扰能力。
高速通信:CAN协议支持高速通信,标准速率为1Mbps,扩展速率为10Mbps。
在实际应用中,CAN总线一般由一个主控制器和多个从节点组成。主控制器通过CAN总线向从节点发送指令或数据,从节点收到指令或数据后进行相应的操作,并将结果返回给主控制器。
在CAN总线上的通信需要遵循一定的通信规则,主要包括数据帧的格式、传输速率和错误检测等。具体来说,每个数据帧都由四部分组成:帧起始符、帧类型、数据段和校验段。CAN协议还采用了CRC(循环冗余校验)技术进行数据的完整性检验,确保数据的可靠性。
总的来说,CAN协议是一种高可靠性、高速度和多节点的通信协议,广泛应用于汽车和工业控制等领域。对CAN协议的理解能够帮助工程师更好地进行通信系统的开发和维护。
2、CAN 协议的版本
CAN协议有两个版本:CAN 1.0 和 CAN 2.0。CAN 1.0 分为两种,分别是 CAN 1.0A 和 CAN 1.0B;CAN 2.0 也分为两种,分别是 CAN 2.0A 和 CAN 2.0B。
CAN 1.0A 是 第一代CAN协议,数据传输速率最高只有1 Mbps,每个数据帧的最大数据长度是8个字节。它使用的是非返回零(Non-Return-to-Zero,NRZ)编码方式,数据帧被分为11位标识符和四个附加的控制位。CAN 1.0B 是CAN 1.0A 的一个改版,使用另一种编码方式,但通信速度和数据长度等方面与CAN 1.0A 没有太大的区别。
CAN 2.0A 和 CAN 2.0B 是第二代CAN协议,数据传输速率最高可以达到1 Mbps,每个数据帧最大数据长度为8个字节。它们的主要区别在于数据帧的标识符的长度和结构,其中,CAN 2.0A 使用了11位标识符,而CAN 2.0B 使用了29位标识符。
CAN FD(Flexible Data-Rate,灵活数据速率)协议是2012年提出的一种高速CAN协议,支持数据传输速率高达5 Mbps和64字节的数据长度。它使用类似CAN 2.0B 的标识符结构,并引入了一些新的功能,如位时间调制、抗干扰性能提高等。CAN FD协议是为了满足现代汽车应用场景的高速数据需求而开发的。
二、CAN控制器的分类
目前,CAN控制器主要有以下几种:
基于CPU的CAN控制器:基于CPU的CAN控制器是将CAN功能与CPU控制器集成在一起,具有较高的灵活性。例如,Atmel公司的ATMEL AVR8系列单片机就集成了CAN控制器。
独立CAN控制器:独立CAN控制器是一种独立的芯片,可直接连接到主控芯片的系统总线上,具有较高的数据处理能力和抗干扰能力。例如,MCP2515是一种常见的独立CAN控制器。
FPGA实现的CAN控制器:基于FPGA(可编程逻辑门阵列)实现的CAN控制器具有灵活性高、可扩展性强等特点,可以根据应用的需要进行定制化设计。例如,Xilinx公司的XC9500系列FPGA芯片可支持CAN控制器的实现。
集成在专用集成电路(ASIC)中的CAN控制器:专用集成电路是为特定应用需求而设计的定制化集成电路,常用于汽车和工业控制等领域,其CAN控制器功能会被集成在ASIC芯片中。例如,Infineon公司的XC8107系列ASIC芯片就集成了CAN控制器功能。
总之,不同类型的CAN控制器在应用领域和性能上都有着各自的优缺点,开发者需要根据具体应用场景选择合适的CAN控制器。
三、FlexCAN、C_CAN、D_CAN
上述三种CAN控制器在目前的 ARM 系SOC中经常被使用,这里给大家简单介绍区分一下。
1、FlexCAN
FlexCAN是一种常见的CAN控制器类型,由美国芯片制造商NXP(原Motorola半导体部门)推出,主要用于汽车、工业和航空等应用中。FlexCAN控制器支持CAN2.0B协议和CAN FD协议,并能以多种工作方式进行配置,例如正常模式(Normal Mode)、回环模式(Loop-back Mode)和自诊断模式(Self-diagnosis Mode)等,具有较高的灵活性和可靠性。
FlexCAN控制器采用FIFO(First In First Out)缓存机制,支持多个CAN消息的同时处理。它还有一个FlexCAN消息缓存器,能够存储多个消息,以便后续处理。在处理时,可以根据不同的请求ID和优先级指定不同的处理方式,从而有效地管理和优化CAN网络上的数据传输。
FlexCAN控制器通常使用SPI或I2C总线与主机连接,提供了多种接口和控制信号,包括RST(复位)引脚、IRQ(中断请求)引脚、TXE(传输使能)引脚、RXF(接收中断)引脚等,方便系统设计和调试。
总之,FlexCAN是一种功能强大、灵活多变的CAN控制器类型,常用于车载电子、工业控制和航空等领域,可以提供高效、可靠的数据通信和控制功能。FlexCAN属于独立CAN控制器的范畴。
2、c_can和d_can
c_can和d_can都是CAN控制器的一种类型,其中c_can通常指基于CPU的CAN控制器,d_can则是基于独立芯片的CAN控制器,具体情况会因厂商和型号而有所不同。
c_can是基于CPU的CAN控制器,它将CAN控制器和微控制器集成在一起。由于在中央处理器内部,c_can在实时数据传输和处理性能方面更具优势。
而d_can是一种独立的CAN控制器芯片,不需要依赖主控制器的处理能力,因此具有较高的数据处理能力和抗干扰能力。同时,d_can也可以支持更高的CAN总线通信速率(例如500Kbps和1Mbps)和更多的CAN节点数,适用于复杂的CAN应用场景。
总之,c_can和d_can在细节方面存在很多不同之处,可以根据具体应用场景和需求来选择合适的CAN控制器类型。
本篇文章参考了百度百科、ChatGpt检索内容、其他博主的csdn博客,如有侵权,联系删除!欢迎各位在评论区指导交流!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)