Autosar标准 - Can Driver

新手,仅做阅读笔记

Autosar标准 - Can Driver

1、介绍和功能概述

Can模块是BSW最低层的一部分,执行硬件访问,并向上层提供一个硬件独立的API。唯一可以访问Can模块的上层是CanIf模块。
Can模块提供发起传输的服务,并调用CanIf模块的回调函数来通知events,此模块使软硬件进行分离。
此外,CAN模块还提供服务来控制属于同一CAN硬件单元的CAN控制器的行为和状态。

2、首字母略缩词和缩写

缩写/首字母缩写:描述:
CAN controller一个CAN控制器只服务于一个物理通道。
CAN Hardware Unit一个CAN硬件单元可以由一个或多个相同类型的CAN控制器和一个或多个CAN RAM区域组成。CAN硬件单元可以在芯片上也可以是外部设备。CAN硬件单元由一个CAN驱动表示。
CAN L-PDU数据链路层协议数据单元。包含ID,数据长度和数据(SDU)
CAN L-SDU数据链路层服务数据单元。它就是在L-PDU内传输的数据。
DLC数据长度码(CAN Message的一部分,描述了SDU的长度。)
Hardware ObjectCAN 硬件对象被定义为 CAN 硬件单元/CAN控制器 CAN RAM 中的 PDU 缓冲区。一个硬件对象被定义为 CAN 硬件单元 CAN RAM 中的L-PDU 缓冲区。
Hardware Receive Handle (HRH)硬件接收句柄(HRH)由CAN驱动程序定义并提供。每个HRH通常只代表一个硬件对象。HRH可用于优化软件过滤。
Hardware Transmit Handle (HTH)硬件传输句柄(HTH)是由CAN驱动程序定义和提供。每个HTH通常只代表一个或多个被配置为硬件传输缓冲池的硬件对象。
Inner Priority Inversion由于在同一传输硬件对象中存在一个正在等待的低优先级L-PDU,因此可以阻止高优先级L-PDU的传输。
ISR中断服务程序
L-PDU HandleL-PDU句柄被定义并放置在CanIf模块层中。通常,每个句柄代表一个L-PDU,它是一个包含Tx/Rx处理信息的恒定结构。
MCAL微控制器抽象层
Outer Priority Inversion在两个连续的传输l-pdu之间有一个时间间隔。在这种情况下,来自另一个节点的较低优先级的L-PDU可以阻止发送自己的较高优先级的L-PDU。在这里,优先级较高的L-PDU在网络访问期间不能参与仲裁,因为优先级较低的L-PDU已经赢得了仲裁。
Physical Channel一个物理通道代表一个从CAN控制器到CAN网络的接口。不同CAN硬件单元的物理通道可以访问不同的网络。
PriorityCAN L-PDU的优先级由CAN ID表示。ID的数值越低,优先级就越高。
SFR特殊功能寄存器。控制控制器行为的硬件寄存器。
SPAL标准外部抽象层

2.1 优先级反转

2.1.1 内部优先级反转

在这里插入图片描述
“如果只使用一个 transmit buffer,可能会发生内部优先级翻转。因为如果只使用一个transmit buffer,存在Buufer中的低优先级的Message需要等待"总线上的流量平静下来”,才能传输。在等待期间,该Message可能会阻止同一微控制器生成的优先级更高的Message通过总线传输"。

2.1.2 外部优先级反转

Figure 2.2
“在一些CAN实现中,可能会出现外部优先级反转的问题。让我们假设一个CAN节点希望传输一个具有高优先级的连续消息包,这些消息存储在不同的message buffer中。如果 CAN 网络上这些报文之间的帧间距大于 CAN 标准规定的最小间距,则第二个节点可以开始传输优先级较低的报文。最小帧间空间由由3个隐性位组成的间隔字段决定。在传输另一个消息期间挂起的消息在总线空闲期间启动,at the earliest in the bit following the Intermission field。”
The exception is that a node with a waiting transmission message will interpret a dominant bit at the third bit of Intermission as Start-of-Frame bit and starts transmission with the first identifier bit without first transmitting an SOF bit.
CAN模块的内部处理时间必须足够短,以便以最小的帧间空间发送连续的消息。这样来避免在上述所有场景下的外部优先级反转。

2.2 CAN Hardware Unit

CAN 硬件单元由一个或多个 CAN 控制器组合而成,它们可以位于芯片内,或作为相同类型的外部独立设备,具有公共或单独的硬件对象。
下图显示了由连接到两个物理通道的两个CAN控制器组成的CAN硬件单元:
Figure 2.3

3、相关文档

  1. Specification of CAN Interface
    AUTOSAR_CP_SWS_CANInterface
  2. IEC:The Basic Model, IEC Norm
  3. List of Basic Software Modules
    AUTOSAR_CP_TR_BSWModuleList
  4. Specification of MCU Driver
    AUTOSAR_CP_SWS_MCUDriver
  5. Specification of ECU State Manager
    AUTOSAR_CP_SWS_ECUStateManager
  6. General Requirements on SPAL
    AUTOSAR_CP_SRS_SPALGeneral
  7. CiA 610-1 version 1.0.0 (DSP) - CAN XL specifications and test plans - Part 1:
    Data link layer and physical coding sub-layer requirements
    http://www.can-cia.org
  8. CiA 611-1 version 1.0.0 (DSP) - CAN XL higher layer functions - Part 1:Definition
    of service data unit types
    http://www.can-cia.org
  9. General Specification of Basic Software Modules
    AUTOSAR_CP_SWS_BSWGeneral

3.1 相关规范

AUTOSAR提供了一个关于Basic Software modules的通用规范,(SWS BSW
General),它也适用于CAN驱动程序。
因此,SWS BSW通用规范应被视为CAN驱动程序的附加和要求的规范。

4、约束和假设

4.1 限制

一个CAN控制器总是对应一个物理通道。它允许在总线侧连接物理通道。CanIf模块将分别处理相关的CAN控制器。一些CAN硬件单元支持通过使用CAN RAM来组合几个CAN控制器,以扩展一个CAN控制器的消息对象的数量。这些组合的CAN控制器由CAN模块作为一个控制器进行处理。
Can模块不支持Can远程帧。

Number描述
[SWS_Can_00237]Can模块不得传输由远程传输请求触发的消息。
[SWS_Can_00236]Can模块应初始化CAN HW,去忽略任何远程传输请求。

4.2 Applicability to car domains

Can模块可用于使用Can协议的任何应用程序。

5、依赖于其他模块

5.1 静态配置

第10章描述的配置元素可以被其他BSW模块的配置所引用。

5.2 驱动服务

Number描述
[SWS_Can_00238]在芯片上的CAN控制器不得使用其他驱动的任何服务。
[SWS_Can_00239]函数 Can_Init 应初始化CAN控制器所使用的芯片上的所有硬件资源。唯一的例外是 I/O引脚配置(由CAN使用的引脚),这是由 Port Driver完成的。
[SWS_Can_00240]Mcu模块应该配置与其他模块“共享“的寄存器设置。实现提示:应先初始化 Mcu 模块,然后再初始化 Can 模块。
[SWS_Can_00242]如果使用芯片外的Can控制器,Can模块应使用其他MCAL驱动程序的服务(例如SPI)。实现提示:如果Can模块使用了其他MCAL驱动程序(例如SPI)的服务,则在初始化Can模块之前,必须确保这些驱动程序已启动并运行。
[SWS_Can_00244]Can 模块应使用底层 MCAL 驱动程序的 synchronous APIs,不得提供可被 MCAL 驱动程序调用的回调函数。因此,µC和CAN硬件单元之间的连接类型只影响实现,而对API没有影响。

5.3 系统服务

Number描述
[SWS_Can_00280]在特殊的硬件情况下,Can模块应轮询硬件所发生的事件。
[SWS_Can_00281]Can 模块应使用系统服务提供的 OsCounter 进行超时检测,以防硬件未在预期时间内做出反应(硬件故障),从而避免出现无休止的循环。实现提示:等待硬件反应的Can模块功能的阻塞时间应短于Can主要函数(i.e.Can_MainFunction_Read)触发周期,因为CAN的主要函数不能用于这个目的。

5.4 CAN module Users

Number描述
[SWS_Can_00058]CAN模块直接使用CanIf模块与其他模块进行交互(eg.Default Error Tracer (DET), Ecu State Manager (ECUM))。

5.5 文件结构

Number描述
[SWS_Can_00436]Can_GeneralTypes.h 应包含 AUTOSAR CAN 模块 Can、CanIf 和 CanTrcv 共享的所有类型和常量。

6、需求跟踪

需求描述实现
[RS_Ids_00810]BSW security events[SWS_Can_91022] [SWS_Can_91023] [SWS_Can_91024]
[SRS_BSW_00005]µC 抽象层 (MCAL) 的模块可能没有硬编码的水平接口[SWS_Can_00238 ] [SWS_Can_00242]
[SRS_BSW_00007]所有用C语言编写的BSW模块都应符合MISRA C 2012标准[SWS_Can_00079]
[SRS_BSW_00101]BSW模块应能够在一个单独的初始化函数中初始化变量和硬件[SWS_Can_00250]
[SRS_BSW_00159]AUTOSAR 基础软件的所有模块都应该支持在配置工具中实现[SWS_Can_00022]
[SRS_BSW_000164中断服务函数的实现应由操作系统(Os)、复杂驱动或模块来实现[SWS_Can_00033]
[SRS_BSW_00167]所有的AUTOSAR基础软件模块应提供配置规则和限制来进行合理性检查[SWS_Can_00024]
[SRS_BSW_00306]AUTOSAR基础软件模块应不受编译器和平台的影响[SWS_Can_00079]
[SRS_BSW_00308]AUTOSAR 基本软件模块不应在其头文件中定义全局数据,而应在 C 文件中定义[SWS_Can_00079]
[SRS_BSW_00309]所有 AUTOSAR 基本软件模块都应通过明确指定 const 关键字来表示所有的“只读全局数据”[SWS_Can_00079]
[SRS_BSW_00312]共享代码必须是可重入的[SWS_Can_00214] [SWS_Can_00231] [SWS_Can_00232] [SWS_Can_00233]
[SRS_BSW_00323]所有 AUTOSAR 基本软件模块都应检查 API 参数的有效性是否通过[SWS_Can_00026] [SWS_Can_00513][SWS_Can_00514] [SWS_Can_00518][SWS_Can_00519] [SWS_Can_91006][SWS_Can_91007] [SWS_Can_91017][SWS_Can_91018]
[SRS_BSW_00330]在使用源代码且运行时间至关重要的情况下,允许使用宏来代替函数[SWS_Can_00079]
[SRS_BSW_00331]所有基本软件模块应严格区分错误信息和状态信息[SWS_Can_00039] [SWS_Can_00104]
[SRS_BSW_00336]BSW模块应该能够被关闭[SWS_Can_91002]
[SRS_BSW_00337]开发错误的分类[SWS_Can_00026] [SWS_Can_00104]
[SRS_BSW_00344]BSW模块应支持 link-time 配置[SWS_Can_00021]
[SRS_BSW_00347]必须对 BSW 驱动程序的不同实例进行命名区分[SWS_Can_00077]
[SRS_BSW_00357]应为 API 调用的成功/失败定义标准返回类型。[SWS_Can_00506]
[SRS_BSW_00358]AUTOSAR 基本软件模块实现的 init() 函数的返回类型应为 void[SWS_Can_00223]
[SRS_BSW_00369]所有AUTOSAR基础软件模块应不通过API接口函数返回特殊开发错误代码[SWS_Can_00089] [SWS_Can_00506] [SWS_Can_91011] [SWS_Can_91012]
[SRS_BSW_00373]AUTOSAR每个基础软件模块的主要处理函数应通过定义的约定来进行命名[SWS_Can_00031]
[SRS_BSW_00375]基础软件模块应报告唤醒原因[SWS_Can_00271] [SWS_Can_00364]
[SRS_BSW_00377]一个基础软件可以返回一个模块的特定类型[SWS_Can_00239]
[SRS_BSW_00385]列出可能得错误通知[SWS_Can_00104]
[SRS_BSW_00386]BSW 应规定检测错误的配置和条件[SWS_Can_00089]
[SRS_BSW_00404]BSW模块应支持post-build configuration[SWS_Can_00021]
[SRS_BSW_00405]BSW模块应支持多个配置集[SWS_Can_00021]
[SRS_BSW_00406]在调用任何 BSW 模块的应用程序接口之前,应将表示 BSW 模块是否已初始化的静态状态变量初始化为值 0[SWS_Can_00103] [SWS_Can_00512][SWS_Can_00517] [SWS_Can_91005] [SWS_Can_91016]
[SRS_BSW_00414]初始化函数应有一个指向配置结构的指针作为单一参数[SWS_Can_00223]
[SRS_BSW_00416]要初始化的模块的序列应该是可以被配置的[SWS_Can_91005] [SWS_Can_91016]
[SRS_BSW_00428]BSW 模块应说明其主要处理函数是否必须按特定顺序或序列执行。[SWS_Can_00110]
[SRS_BSW_00432]模块应具有读取/接收和写入/发送数据通路的独立主要处理函数[SWS_Can_00031] [SWS_Can_00108] [SWS_Can_00109] [SWS_Can_00112]
[SRS_BSW_00438]配置数据应在一个结构中进行定义[SWS_Can_00291]
[SRS_BSW_00449]Autosar 应用软件使用BSW服务接口应返回一个Std_ReturnType[SWS_Can_00506]
[SRS_Can_01005]CANIF应检查接收到的 PDU 的 DLC 是否正确[SWS_Can_00218]
[SRS_Can_01041]CAN驱动应实现一个用于初始化的接口[SWS_Can_00245] [SWS_Can_00246]
[SRS_Can_01042]CAN驱动程序应支持配置集的动态选择[SWS_Can_00062]
[SRS_Can_01043]CAN驱动应提供一个服务来去使能/关闭CAN控制器的中断[SWS_Can_00049] [SWS_Can_00050]
[SRS_Can_01045]CAN驱动应该提供一个接收指示服务[SWS_Can_00279] [SWS_Can_00396]
[SRS_Can_01049]CAN驱动应提供一个动态传输请求服务[SWS_Can_00212] [SWS_Can_00213][SWS_Can_00214]
[SRS_Can_01051]CAN驱动应提供一个传输确认服务[SWS_Can_00016]
[SRS_Can_01053]CAN驱动应提供一个服务去改变CAN控制器的模式[SWS_Can_00017] [SWS_Can_91010]
[SRS_Can_01054]CAN驱动应为通知CAN控制器唤醒事件提供一个Notification[SWS_Can_00235] [SWS_Can_00271] [SWS_Can_00364]
[SRS_Can_01055]CAN驱动应为bus-off状态提供一个Notification[SWS_Can_00020] [SWS_Can_00234]
[SRS_Can_01059]CAN驱动程序应保证接收到的L-pdu的数据一致性[SWS_Can_00011] [SWS_Can_00012]
[SRS_Can_01060]CAN驱动应不能从自动bus-off中恢复[SWS_Can_00272] [SWS_Can_00273][SWS_Can_00274]
[SRS_Can_01062]每个CAN控制器的每个event都应可配置为通过轮询或中断来检测[SWS_Can_00007]
[SRS_Can_01122]CAN驱动程序应支持在过渡到待机/睡眠的同时发生总线唤醒的情况[SWS_Can_00048]
[SRS_Can_01130]CANIF的接收状态接口[SWS_Can_00506]
[SRS_Can_01132]CAN驱动程序应能够通过CAN中断和轮询检测特定的通知事件消息对象[SWS_Can_00099]
[SRS_Can_01134]CAN驱动应支持多路传输[SWS_Can_00277] [SWS_Can_00401][SWS_Can_00402] [SWS_Can_00403]
[SRS_Can_01135]应可以配置一个或几个TX Hardware Objects[SWS_Can_00100]
[SRS_Can_01139]CAN interface和deiver应为初始化给一个CAN控制器特定接口[SWS_Can_00062]
[SRS_Can_01147]CAN驱动应不支持远程帧[SWS_Can_00236] [SWS_Can_00237]
[SRS_Can_01160]由于非连续性的CANFD DLC 填充字节[SWS_Can_00502]
[SRS_Can_01162]CANIF应支持标准can和canfd[SWS_Can_00501]
[SRS_Can_01166]CAN驱动应去实现一个de-initialization的接口[SWS_Can_91002] [SWS_Can_91009][SWS_Can_91010]
[SRS_Can_01167]CAN驱动应提供一个函数去返回当前CAN控制器错误状态[SWS_Can_91008]
[SRS_Can_01170]CAN驱动应提供一个函数去返回当前CAN控制器Rx和Tx错误计数器[SWS_Can_00515] [SWS_Can_00520]
[SRS_Can_01181]如果使用部分网络,ECU应确保总线上的第一个信息是唤醒帧[SWS_CAN_91025] [SWS_CAN_91026][SWS_CAN_91027] [SWS_CAN_91028][SWS_CAN_91029]
[SRS_SPAL_00157]Autosar基础软件的所有驱动程序和处理程序都应实施驱动程序和处理程序的notification机制[SWS_Can_00026] [SWS_Can_00031][SWS_Can_00108] [SWS_Can_00109][SWS_Can_00112]
[SRS_SPAL_12056]所有驱动模块都应允许notification机制的静态配置[SWS_Can_00235]
[SRS_SPAL_12057]所有驱动程序都应为初始化实现一个接口[SWS_Can_00245] [SWS_Can_00246]
[SRS_SPAL_12063]所有驱动模块只能支持原始值模式[SWS_Can_00059] [SWS_Can_00060]
[SRS_SPAL_12067]所有驱动模块应根据所选的操作模式设置其唤醒条件[SWS_Can_00257]
[SRS_SPAL_12069]所有从唤醒中断中醒来的SPALdriver都应报告唤醒原因[SWS_Can_00271] [SWS_Can_00364]
[SRS_SPAL_12075]所有具有随机流功能的驱动程序都应使用应用缓冲区[SWS_Can_00011]
[SRS_SPAL_12077]所有的驱动程序都应提供一个非阻塞的实现[SWS_Can_00372]
[SRS_SPAL_12092]驱动的接口应该被它的handler或manager去访问[SWS_Can_00058]
[SRS_SPAL_12125]所有驱动程序模块都只能初始化已配置的资源[SWS_Can_00053]
[SRS_SPAL_12129]ISRs应负责重置中断flag,并调用相应的notification函数[SWS_Can_00033]
[SRS_SPAL_12169]所有提供不同操作模式的驱动器模块都应提供模式选择的服务[SWS_Can_00017]
[SRS_SPAL_12263]所有驱动器模块的实现应允许在链接时配置特定的模块参数类型[SWS_Can_00021]
[SRS_SPAL_12265]配置数据应保持不变[SWS_Can_00021]
[SRS_SPAL_12448]所有驱动模块在进行开发错误检测后都应有特定的行为[SWS_Can_00089] [SWS_Can_00091]
[SRS_SPAL_12461]有关控制器寄存器初始化的特定规则应适用于所有驱动程序实现[SWS_Can_00407]
[SRS_SPAL_12463]寄存器的初始化设置应被合并和转发[SWS_Can_00024]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值