AUTOSAR之CAN Driver

一、CAN Driver简介

        CAN Driver在CAN通讯中的位置

        一个CAN Hardware Uint由一个或多个Controller组成,Controller可以位于芯片上,也可以作为外部独立的设备。一个Controller对应一个CAN节点即一个物理通道,一个一般包含多个报文邮箱(Mailbox)。

二、CAN Driver状态机

        CAN模块驱动状态机有两个状态,在上电或重置后,CAN模块进入CAN_UNINIT状态(未初始化状态),初始化后,CAN模块进入CAN_READY状态,这时可执行一些与读、写、总线关闭、唤醒和控制器状态设置相关的功能。

三、CAN Controller状态机

        CAN Controller状态机比CAN Driver状态机复杂点,分为四个状态:

  • UNINIT (未初始化):所有属于CAN模块的寄存器都处于重置状态,CAN中断被禁用。CAN控制器不在CAN总线上参与。
  • STOPPED(停止):在此状态下,CAN控制器被初始化,但不参与总线。此外,不能发送错误帧和确认。
  • STARTED(启动)  :正常运行状态,功能完整,即参与网络。对于许多控制器来说,离开“初始化”模式会导致控制器启动。
  • SLEEP (睡眠):对于支持睡眠模式的CAN硬件(通过CAN硬件直接支持的CAN总线唤醒),硬件设置与停止状态不同。

        CAN模块提供三个服务:Can_Init, Can_SetBaudrate, Can_SetControllerMode。当切换CAN状态机时,调用这些服务设置对应的寄存器。

        CAN状态机的跳转如下图所示:

        上电后, CAN首先进入UINIT状态,直到调用Can_Init()函数,进行CAN模块初始化,然后CAN模块进入STOPPED状态,此时表示CAN模块已经初始化完成,但是并不参与总线通信。

        然后当函数Can_SetControllerMode(CAN_CS_STARTED)被调用后, CAN模块进入STARTED模式,在STARTED模式下CAN模块正常工作,可进行CAN报文的收发。

        当函数Can_SetControllerMode(CAN_CS_STOPPED)被调用后, CAN状态进入STOPPED状态,此时CAN模块停止参与总线通信。

        当函数Can_SetControllerMode(CAN_CS_SLEEP)被调用后, CAN状态由STOPPED状态进入SLEEP状态。当Can_Delnit()被调用后,CAN状态机进入UNINIT状态。

        另外,除了由软件触发的CAN模块状态机跳转,以下硬件条件也可触发CAN状态机跳转。

  1.  硬件唤醒:当CAN状态机处于SLEEP模式下时,收到硬件唤醒信号,CAN状态机跳转STOPPED状态
  2. Bus-Off:当CAN状态机处于STARTED状态时,如果发生BusOff,那么CAN状态机跳转STOPPED状态;

HTH和HRH

        如上图所示,每个硬件对象由ID,DLC,SDU组成。ID是硬件对象的编号,DLC是数据长度,SDU是要接收或者发送的数据。

        用来存储接收数据的硬件对象被称为HRH(Hardware Recieve Handle)

        用来存储发送数据的硬件对象被称为HTH(Hardware Transmit Handle)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值