如何仅通过MAC地址发送原始以太网帧?PA SPC58XG板Autosar配置验证问询
仅通过MAC地址发送原始以太网帧到PA SPC58XG板的实现方案
当然可以实现!针对你的PA SPC58XG板和Autosar协议栈场景,我给你梳理一套可行的方案,帮你发送仅含MAC地址的原始以太网帧并验证DMA缓冲区接收:
一、先确认Autosar协议栈的底层访问权限
因为你用了Autosar协议栈,首先得确认你的Eth Driver(以太网驱动模块)是否支持绕过上层TCP/IP协议,直接操作以太网控制器发送原始帧:
- 检查Autosar配置工具(比如Vector DaVinci、EB tresos)中,Eth Driver的配置项是否开启了
EthRawFrameSupport(不同版本命名可能略有差异,核心是“原始帧支持”) - 确认你的应用层有权限调用Eth Driver提供的原始帧发送API,比如
Eth_SendRawFrame()这类接口
二、构造符合标准的Dummy原始帧
原始以太网帧的结构很简洁,你只需要构造包含MAC地址的基础帧即可:
- 目的MAC地址:填PA SPC58XG板的MAC地址(就是你要验证的目标板的MAC)
- 源MAC地址:如果是板内自测(自己发自己收),可以填板卡自身的MAC;如果是外部发送,填发送端设备的MAC
- EtherType字段:选一个自定义的非标准值(比如
0xFFFF),避免被上层协议误解析 - Payload:随便填几个固定字节的测试数据(比如
0x01 0x02 0x03),方便后续验证接收结果 - FCS帧校验序列:大部分以太网控制器会自动生成这个字段,所以你不用手动计算,只要在控制器配置中开启“自动添加FCS”即可
举个十六进制的帧结构示例:
[目标MAC: 6字节] [源MAC: 6字节] [EtherType: 0xFFFF] [Payload: 0x010203]
三、通过Autosar Eth Driver发送原始帧
具体步骤取决于你的Autosar版本和Eth Driver实现,但核心流程是这样的:
- 确保Eth Driver和以太网控制器已经完成初始化,DMA缓冲区的配置也已经就绪(这一步你应该已经做好了,毕竟要验证DMA接收)
- 调用Eth Driver的原始帧发送API,传入构造好的帧数据、帧长度、目标MAC等参数
比如类似这样的调用(具体函数名以你的驱动为准):Std_ReturnType sendResult = Eth_SendRawFrame(EthControllerIndex, &rawFrameBuffer, frameLength, ETH_RAW_FRAME_NO_VLAN); - 检查返回值
sendResult,确认帧是否成功发送
四、验证DMA缓冲区的接收结果
发送完成后,你需要检查PA板的DMA接收缓冲区是否收到了这个dummy帧:
- 调用Eth Driver提供的接收缓冲区读取API,或者在调试模式下直接访问DMA控制器的缓冲区内存(如果允许的话)
- 对比收到的帧的目的MAC、源MAC和Payload数据是否和你发送的完全一致
- 确认帧长度正确,没有出现截断或数据篡改的情况
五、几个关键注意事项
- 控制器模式配置:如果是板内自测(自己发自己收),需要确认以太网控制器的配置中开启了
Receive Own Frames或者Loopback Mode,不然控制器可能会丢弃自己发送的帧;如果是外部发送到板卡,只要目的MAC是板卡自身的,即使不开启混杂模式也能正常接收 - Autosar权限配置:如果你的项目用了Autosar的BSW模块,可能需要在
BswM(基础软件模式管理器)或者Os(操作系统)中配置权限,允许应用层调用底层Eth Driver的原始帧接口 - DMA缓冲区大小:确保DMA接收缓冲区的大小足够容纳你的dummy帧,避免出现帧溢出导致接收失败
内容的提问来源于stack exchange,提问作者Lkaf Temravet




