目录
前言
本文将按照我的理解,对以太网的数据发送流程进梳理,以求更容易理解整个模块、
先附上规范链接,建议组合学习:
https://www.autosar.org/fileadmin/standards/R18-10_R4.4.0_R1.5.0/CP/AUTOSAR_SWS_EthernetDriver.pdf
在研究接口的作用和类型之前,了解 ETH 的通信流程可以帮助我们理解接口的功能及其实现的操作。本章着重介绍与数据发送功能息息相关的接口。
数据发送流程
简单来讲,首先在完成 ETH 模块初始化完成之后,将 以太网控制器 和 PHY芯片 的模式设置为发送状态,然后将要发送的数据填入缓冲区,然后发送出去,最后调用回调函数来通知数据是否发送成功。
接口分析
Eth_Init
函数原型
void Eth_Init(
const Eth_ConfigType* CfgPtr
)
| 参数类型 | 参数名称 | 方向 | 说明 |
| const Eth_ConfigType* | CfgPtr | 输入 | 指向包含所有初始化内容的结构体指针 |
返回值:无
顾名思义,该接口函数实现的功能就是以太网的初始化。
Eth_ConfigType是一个结构体,存储着需要初始化的内容。由于包含指向例如 控制器索引、PHY相关配置 等的指针,因此后续所有函数只有再调用该接口函数之后才能正常使用。所以该接口的入参为一个不可修改的结构体指针,并通过指针所指向的数据来实现以太网的初始化。
规范说明

上图为该接口的相关规范,以及对应翻译。大概主要意思是 介绍该接口对以太网控制器的操作、程序运行出现问题时产生的错误类型 和 该接口必须在初始化时执行 三点。
先说对控制器的操作,翻译过来的内容如下几点:
1. 禁用所有控制器
2. 清除等待的以太网中断
3. 配置所有控制器参数(如中断、帧长、过滤器等)
4. 配置所有发送/接收资源(例如缓冲区初始化)
5. 删除所有待处理的发送和接收请求
总结来说,就是清除所有待执行的任务和缓冲区,然后配置参数并关闭控制器。
下表是常见的开发错误,当我们开启 开发错误检测(Det)功能后,如果程序执行出现问题,一般会抛出以下几种错误,出现这些错误的原因也就这几种,后面再出现类似内容的话就不多赘述了。
| 错误类型 |
错误码 |
Value |
| Invalid controller index (无效的控制器索引) |
ETH_E_INV_CTRL_IDX |
0x01 |
| Eth module or controller was not initialized (模块或控制器未初始化) |
ETH_E_UNINIT |
0x02 |
| Invalid pointer in parameter list (参数列表中的指针无效) |
ETH_E_PARAM_POINTER |
0x03 |
| Invalid parameter (无效的参数) |
ETH_E_INV_PARAM |
0x04 |
| Invalid mode (无效的模式) |
ETH_E_INV_MODE |
0x05 |
Eth_SetControllerMode
函数原型
Std_ReturnType Eth_SetControllerMode(
uint8 CtrlIdx,
Eth_ModeType CtrlMode
)
| 参数类型 | 参数名称 | 方向 | 说明 |
| uint8 | CtrlIdx | 输入 | 控制器索引 |
| Eth_ModeType | CtrlMode | 输入 | 枚举类型,代表控制器的模式:ETH_MODE_DOWN 0x00 禁用控制器 ETH_MODE_ACTIVE 0x01 启用控制器 |
返回值:Std_ReturnType(enum)
E_OK: 模式设置成功
E_NOT_OK: 控制器模式修改失败
该接口实现对控制器模式的切换。根据 CtrlIdx 确定要操作的控制器,CtrlMode 为要设置的模式,根据这些参数来对控制器进行操作。返回值为枚举类型,当模式设

最低0.47元/天 解锁文章
1124

被折叠的 条评论
为什么被折叠?



