目录
基于以太网的原理,AUTOSAR 进一步规范了 ETH 模块的结构和编码规范等内容。以下是节选 AUTOSAR 4.4 中 EtherentDriver 的部分内容进行整理和分析。
PS:本篇主要是对结构和功能进行整理,函数方面会在下篇整理。
官方以太网规范文档链接如下:
https://www.autosar.org/fileadmin/standards/R18-10_R4.4.0_R1.5.0/CP/AUTOSAR_SWS_EthernetDriver.pdf
也可以直接查看本人上传的文档:
【免费】AUTOSAR-SWS-EthernetDriver.pdf资源-优快云文库
模块基础介绍
首先,在包含以太网的项目中,一般会见到这几个模块一起出现:Eth, EthIf, EthTrcv, EthSwt。先介绍以下除 Eth 外的几个模块。
EthSwt
下图是 AUTOSAR 对 EthSwt 的部分规范要求。
所谓 EthSwt 按照我的理解就是交换机,上图列举了Switch Driver 管理的 API ,它们应用于通知 Switch 驱动程序出于 Switch 管理目的所需的特殊处理。
EthTrcv
EthTrcv模块负责物理层的操作,具体来说,它管理以太网的收发过程,包括信号的发送、接收和转换等工作。它是与硬件直接交互的模块,处理网络物理链路的创建和维护。
ETH模块依赖EthTrcv模块进行物理信号的发送与接收,而EthTrcv模块则需要ETH模块提供的数据帧,以便进行有效的收发操作。
EthIf
EthIf主要是实现为底层调用提供接口并沟通上层和底层,比如为数据发送成功提供回调函数等。
接下来介绍使用以太网驱动程序(EtherentDriver)的模块:
1. 以太网接口(Ethlf)
2. 以太网收发器驱动程序(EthTrcv)
以太网驱动程序使用的模块包括用于数据一致性和主要功能处理的 BSW 调度程序机制。
此外,以太网驱动程序依赖 MCU、Port 等模块的配置,比如时钟和引脚的功能配置,因此需要它们之前的初始化。
驱动理解
从整体上看,上层通过调用 以太网接口(EthIf)来对 以太网收发器(EthTrcv) 和 以太网交换机(EthSwt) 进行管理和控制。因为以太网是一种点对点的通讯方式,根据图中示例,收发器通过例如 MII 接口等与交换机连接,然后再连到其他多个以太网设备。
来到底层,软件层面,以太网接口调用以太网驱动程序访问多个以太网控制器(EtherentController),该层可以由多个以太网驱动程序模块组成,以实现驱动多个硬件设备。
之后到了硬件层面,通过以太网驱动程序可以实现对硬件设备比如收发器等的控制和管理。在每个以太网控制器内都存在多个数据缓冲区,将要发送的数据放入指定的缓冲区,然后才能将数据发出。
综上所述,以太网接口通过调用以太网驱动程序来控制硬件实现实现数据收发,但实际上以太网控制器可能不止一个,并且每个控制器内都有很多缓冲区用来存放要发送的数据。为了能够准确操作到某个控制器的某个缓冲区,AUTOSAR 通过 索引 来实现这个功能。
在上图中,存在两个以太网控制器,分别给他们标记上 控制器索引值(CtrlIdx)为 0 和 1。通过CtrlIdx值 就能准确的控制要操作的控制器。
同理,我们为控制器缓冲区也标记上 缓冲区索引值(BufIdx)来标记他们。
在实际使用中,就通过这两个索引值来确定用于发送的控制器和缓冲区,需要注意的是,这两个索引的值都是从0开始的。
下图是 AUTOSAR 对索引的规范,感兴趣的可以翻译一下看看。