米多papa
关注汽车发展动态的嵌入式软件工程师
来自专栏Automotive技术分享
1. 简介和功能概述
本文介绍了AUTOSAR基础软件模块CAN驱动程序的功能、API和配置。
Can模块是底层的一部分,主要执行硬件访问,并向上层提供与硬件无关的API。只有上层模块CanIf模块能够唯一访问Can模块的。
Can模块为发起传输,并调用CanIf模块的回调函数来通知事件提供服务,它独立于硬件。此外,它还提供控制属于同一CAN硬件单元(CAN Hardware Unit)的CAN控制器(CAN controller)的行为和状态的服务。多个CAN控制器可以由一个CAN模块控制,只要它们属于同一个CAN硬件单元。
2. 术语
3. 优先级反转
3.1. 内部优先级反转(Inner Priority Inversion)
如果只使用一个发送缓冲区,内部优先级反转可能会发生。由于低优先级,存储在缓冲区中的消息要等到“总线上的流量平静下来。在等待的时间内,该消息可以阻止由同一微控制器产生的高优先级消息在总线上传输。
3.2. 外部优先级反转(Outer Priority Inversion)
在某些CAN实现中可能会出现外部优先级反转的问题。
假设CAN节点希望传输一个连续的高优先级消息包,这些消息包被存储在不同的消息缓冲区中。如果在CAN网络中,这些消息之间的帧间距大于CAN标准定义的最小帧间距,则第二个节点可以开始传输优先级较低的消息。最小帧间空间由3个隐性位组成的Intermission字段决定。一个消息因为在另一个消息的传输过程中被挂起,在总线空闲期间开始发送,最早在Intermission字段之后的位。例外是,有等待传输消息的节点将把中断的第三位的主导位解释为帧开始位,并从第一个标识位开始传输,而不首先发送SOF位。CAN模块的内部处理时间必须足够短,以发送连续的消息,帧间空间最小,以避免在上述所有场景下的外部优先级反转。
AUTOSAR CAN Driver(CAN驱动程序)
米多papa
关注汽车发展动态的嵌入式软件工程师
来自专栏Automotive技术分享
1. 简介和功能概述
本文介绍了AUTOSAR基础软件模块CAN驱动程序的功能、API和配置。
Can模块是底层的一部分,主要执行硬件访问,并向上层提供与硬件无关的API。只有上层模块CanIf模块能够唯一访问Can模块的。
Can模块为发起传输,并调用CanIf模块的回调函数来通知事件提供服务,它独立于硬件。此外,它还提供控制属于同一CAN硬件单元(CAN Hardware Unit)的CAN控制器(CAN controller)的行为和状态的服务。多个CAN控制器可以由一个CAN模块控制,只要它们属于同一个CAN硬件单元。
2. 术语
3. 优先级反转
3.1. 内部优先级反转(Inner Priority Inversion)
如果只使用一个发送缓冲区,内部优先级反转可能会发生。由于低优先级,存储在缓冲区中的消息要等到“总线上的流量平静下来。在等待的时间内,该消息可以阻止由同一微控制器产生的高优先级消息在总线上传输。
3.2. 外部优先级反转(Outer Priority Inversion)
在某些CAN实现中可能会出现外部优先级反转的问题。
假设CAN节点希望传输一个连续的高优先级消息包,这些消息包被存储在不同的消息缓冲区中。如果在CAN网络中,这些消息之间的帧间距大于CAN标准定义的最小帧间距,则第二个节点可以开始传输优先级较低的消息。最小帧间空间由3个隐性位组成的Intermission字段决定。一个消息因为在另一个消息的传输过程中被挂起,在总线空闲期间开始发送,最早在Intermission字段之后的位。例外是,有等待传输消息的节点将把中断的第三位的主导位解释为帧开始位,并从第一个标识位开始传输,而不首先发送SOF位。CAN模块的内部处理时间必须足够短,以发送连续的消息,帧间空间最小,以避免在上述所有场景下的外部优先级反转。
CAN总线系统测试技术里面基本描述了CAN总线开发的流程,但主要侧重于CAN总线的测试,不过也能让你有所了解。根据你的描述,假设你的要求是:能够基于某嵌入式平台(最好该平台在汽车ECU开发中被广泛使用),根据给定的通信协议(一般由通信矩阵描述),编写CAN接口代码,并能通过相关设备进行简单测试。推荐的学习步骤为:
1. 了解CAN基本知识可以通过这个ppt,恒润的东西还是不错的。CAN基础_百度文库
2. 直观的了解CAN这需要你购买或借用CAN总线检测设备,档次差很多。如果是你自己想玩,可以买个周立功的USB转CAN,淘宝也就几百块钱。如果是课题组采购,可以买个Kvaser的USBCAN,几千块吧。大致这个样子。要是土豪的话,可以买Vector的VN1600,这个就好几万了。以上三种我都用过。一定要买双通道,然后一个口发,一个口接,可以自己接延长线通过示波器看信号了。尝试修改报文ID,数据,波特率等等,看示波器的变化,对理解第一部分的内容很有帮助。这个图中有三个message。一位是2us,总线的波特率是多少?1/2e-6=500Kbps
3. 选择嵌入式平台,学习CAN接口的编程飞思卡尔MC9S08DZ60MLH 8位汽车级CAN总线 开发板 学习板超可以选择这个小板子练习一下,程序的写法都是差不多的。然后和第二部分的总线检测设备连在一起进行测试。这一步需要详细了解信号转换的知识,特别是Big Endian和Little Endian的区别,factor和offset的作用,如何置1或置0,可以参考DBC_File_Format_Documentation_百度文库很详细,看完就懂了。
4. 如果有兴趣,可以看看J1939协议(用于商用车)或者CANOpen协议(用于现场控制,很多电机控制器使用)或者ISO 15031-5(用于OBD诊断)。最后,希望你在了解CAN以后,不要花过多的精力在底层上,基本都是体力劳动。体现价值的还得是上层。
汽车电子与CAN总线摘要:控制器局域网(CAN)是一种有效支持分布式控制或实时控制的现场总线,具有高性能和高可靠性的特点;随着现代汽车技术的发展,CAN技术在汽车电子领域应用日益广泛。文章介绍了符合CAN2.0B协议汽车CAN系统设计方案,着重讨论了以微处理器P89C668为核心的CAN总线智能节点的软硬件实现,推荐一款MOTOROLA的多路开关检测芯片MC33993,并且涉及到 ,SPI以及在系统编程等技术。
关键词:现场总线,CAN,汽车电子,MC33993, ,SPI
1 汽车电子与CAN总线
随着汽车电子技术的不断发展,汽车上各种电子控制单元的数目不断增加,连接导线显著增加,因而提高控制单元间通讯可靠性和降低导线成本已成为迫切需要解决的问题。为此以研发和生产汽车电子产品著称的德国BOSCH公司开发了CAN总线协议,并使其成为国际标准(ISO11898)。1989年,Intel公司率先开发出CAN总线协议控制器芯片,到目前为止,世界上已经拥有20多家CAN总线控制器芯片生产商,110多种CAN总线协议控制器芯片和集成CAN总线协议控制器的微处理器芯片。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。我国的汽车CAN总线技术起步较晚,但随着现代汽车电子的不断进步发展,其研究和应用正如火如荼的进行中。CAN总线是一种串行多主站控制器局域网总线,是一种有效支持分布式控制或实时控制的串性通讯网络。CAN总线的通信介质可以是双绞线,同轴电缆或光导纤维,通信速率可达1Mbps/40m,通信距离可达10km/40Kbps。由于其通信速率高,可靠性好以及价格低廉等特点,使其特别适合中小规模的工业过程监控设备的互连和交通运载工具电气系统中。CAN总线有如下基本特点:
◎ 废除传统的站地址编码,代之以对通信数据块进行编码,可以多主方式工作;
◎ 采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响继续传输数据,有效避免了总线冲突;
◎ 采用短帧结构,每一帧的有效字节数为8个,数据传输时间短,受干扰的概率低,重新发送的时间短;
◎ 每帧数据都有CRC校验及其他检错措施,保证了数据传输的高可靠性,适于在高干扰环境下使用;
◎ 节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其他 *** 作不受影响;
◎ 可以点对点,一对多及广播集中方式传送和接受数据。
图1 汽车CAN总线系统架构
现代汽车典型的控制单元有电控燃油喷射系统,电控传动系统,防抱死制动系统(ABS),防滑控制系统(ASR),废气再循环系统,巡航系统和空调系统,车身电子控制系统(包括照明指示和车窗,刮雨器等)。完善的汽车CAN总线网络系统架构如图1所示。
2 CAN节点硬件构架
核心芯片:
选用PHILIPS公司的高性能8位微处理器P89C668。其突出特点如下:
◎ 80C51 中央处理单元;
◎ 内置可ISP(在系统编程)和IAP(在应用编程)的Flash 存储器,Boot ROM 可通过串口访问从而升级下载用户程序;
◎ 每个机器周期6 个时钟周期 *** 作标准,每个机器周期12 个时钟周期 *** 作可选,周期12 个时钟周期下速度高达33MHz;
◎ 8K字节RAM和64K字节FLASH;
◎ 4 个中断优先级,8 个中断源;
◎ 自带 串行接口序列;
◎ 5路可编程的计数器阵列PCA(PWM输出,捕捉/比较,高速输出三种工作方式)。
无论从处理能力,存储容量,还是外围资源以及网络可扩展性方面来评价,P89C668都是一款出色的微处理器,适用工控电子等各个领域。尤其是其8K字节RAM的"海量"内存,更是许多高速存储应用场合的首选。
CAN接口电路:
采用技术成熟应用广泛的SJA1000(CAN控制器),6N137(光电隔离),P82C250(CAN收发器)组成接口电路。需要指出的是,CAN总线(CANH,CANL)两端务必跨接120欧的终端电阻。SJA1000中断引脚接CPU的外中断0引脚。
在应用/系统编程电路:
IAP/ISP技术在许多款高性能单片机得到应用,其突出特点是方便快捷的实现程序的下载和更新。P89C668的FLASH空间0XFC00~0XFFFF烧写入1K字节的Boot Rom程序,上电后可以通过软件和硬件置位方法进入Boot Rom程序,通过PHILIPS提供的编程软件由串行口通讯就可以实现程序的在线升级(ISP)。当然用户还可以根据需要依据协议,自己编写Boot Rom程序(IAP)。通过拨码开关硬件置位(ALE, , ,P2.6,P2.7),上电后强制进入Boot Rom程序,烧写程序完毕后拨回原来状态重新上电后就进入用户程序。串行口电平转换芯片用MAX202替代MAX232,其匹配电容只需103瓷片电容。串行数据通讯波特率可达38400bps。
晶振和复位电路:
外接一块工业级的12M振荡芯片作为时钟信号。复位电路采用X25045芯片进行智能控制。X25045芯片将看门狗定时器,电源监控电路和E2PROM功能合三为一。看门狗定时器功能在系统出错期间,经过一个可设置的时间间隔就置位RESET信号。电源监控电路能检测到欠电压状况,在VCC下降到限阀值以下,系统被复位。并且RESET信号在VCC恢复且稳定之前一直有效。存储器功能的X25405是CMOS的4096字的E2PROM.并且支持SPI协议的三线(SO,SI,SCLK)存取。本节点用到X25405的前两个功能构成可靠的复位电路。
开关/数字量,模拟量检测电路:
汽车节点的开关器件(信号灯,雨刮,面板,车窗玻璃,电动后视镜等等的开关)特别复杂和繁多,而电流检测,水温油位传感器信号都是非线性的模拟信号,所以可靠实时地对这些开关/模拟量进行检测成为汽车电子硬件必须解决的问题。传统的分立元件保持电路存在可靠性差,尤其是开关触点氧化严重,浪费大量的微处理器I/O口等问题,推荐采用MOTOROLA公司的多路开关检测芯片MC33993。其突出优点如下:
◎ 3.3/5.0V的SPI序列读写(SO,SI,SCLK);
◎ 8路可编程开关输入检测(接地或接电源),14路接地开关输入检测,每路开关状态改变均能够产生中断;
◎ 开关输入电压从-14V~Vpwr(工作电源),Vpwr最大可达40V;
◎ 开关状态改变时的可选择唤醒;
◎ 可选择的湿性电流(16mA或2mA);
◎ 22对1的模拟量输出;
◎ Vpwr的低功耗电流(standby current)小于100uA,VDD的低功耗电流(standby current)小于10uA。
可见只需要四个CPU口线(SPI序列线和片选),就能够完成22路开关量(其中有8路可编程为对接电源开关)的检测,还可以进行串行和并行的多片MC33993级连。所谓的湿性电流(wetting current),指的是MC33993内部提供的输入口的上拉和下拉恒流源,可以编程选择为16mA或2mA,这对于保证开关的可靠闭合,去除金属触点的氧化物有着良好的作用。输入口的恒流源,可以直接驱动MOSFET以及LED。每一个输入口都可以编程为模拟量输出状态,从而在AMUX引脚输出所选输入口的电压。利用MC33993恒流源和模拟量输出可以组成线性的传感器检测电路。ADC芯片选用AD公司生产的并行数据采样集成芯片AD1674。它从引脚到功能都与AD574/674完全兼容,但内部增加了采样/保持电路,采样频率为100kHZ,并且有全控模式和单一工作模式。其采样精度可达0.05%,符合高速数据采集的要求。
功率器件驱动电路:
汽车车身控制系统需要驱动大功率的用电器件,比如照明信号灯,前后雨刮器电机,电动车窗,电动后视镜等等。功率驱动器件考虑采用MOTOROLA公司的汽车专用功率器件。MC33286为汽车电气专用智能的双路控制驱动芯片,与传统的机械继电器相比,自身提供过流和过热保护,响应时间更短,稳定性更高。MC33286设有两路驱动通道,每路最大工作电流可达15A,通过两路输入端口将CPU引脚电平信号引入,经过内部的逻辑处理模块转换成输出通道的电平变化。特别适合信号灯以及阻性负载的驱动。MC33887是带反馈的H桥型驱动芯片,专用来驱动需要正反转的电机负载。MC33486与MC33887类似,但内部只有半桥须外加CMOS管以构成全桥驱动电路,稳定输出可达10 A,尤其适用于电动车窗电机之类的大功率并伴有冲击电流的正反相控制要求。
3 软件结构
系统的程序结构分为四个部分:CAN通讯程序(包括应用层协议的SJA1000通讯),外围接口程序(所有检测芯片和驱动芯片的驱动),中断服务程序(处理开关信号以及故障报警等消息),主程序(完成系统初始化和任务调度,喂狗等)。限于篇幅,以下着重介绍 CAN应用层协议。
本系统CAN通讯选用CAN2.0B协议的PeliCAN模式,通信位速率为500Kbps,采用双验收滤波器机制。为使用及修改方便,通讯协议中标识码设计兼容点对点、一对多及广播通讯模式。开关量消息通讯时各节点间采用主从结构,子节点的报文只有主节点接收(点对点模式),主节点的报文所有子节点均接收(广播模式)。模拟量消息通讯时各节点间采用点对点模式。
标识符定义:(如图3所示)
◎ 类名:00000100--应答类消息(自检应答、故障诊断);00001000--命令类消息;00010000--调试类消息;00100000--下载类消息;01000000--工作类消息。
◎ 保留A:验收滤波器配置预留。
应答类消息中:ID19:1--自检应答消息 0--故障诊断出错消息
ID20:验收滤波器配置预留
工作类消息中:ID19:1--开关量消息 0--模拟量消息
ID20:验收滤波器配置预留
◎ 目的地址:接收报文节点的地址。
◎ 源地址:发送报文节点的地址,用于系统自检。
图3 标识符定义
4 结束语
CAN总线以其高性能,高可靠性及独特的设计,受到工业控制领域和汽车电子领域的广泛重视,已被公认为最有前途的现场总线之一。我们深信不久的将来,国产的CAN总线汽车必将诞生。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)