You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅通过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实现,但核心流程是这样的:

  1. 确保Eth Driver和以太网控制器已经完成初始化,DMA缓冲区的配置也已经就绪(这一步你应该已经做好了,毕竟要验证DMA接收)
  2. 调用Eth Driver的原始帧发送API,传入构造好的帧数据、帧长度、目标MAC等参数
    比如类似这样的调用(具体函数名以你的驱动为准):
    Std_ReturnType sendResult = Eth_SendRawFrame(EthControllerIndex, &rawFrameBuffer, frameLength, ETH_RAW_FRAME_NO_VLAN);
    
  3. 检查返回值sendResult,确认帧是否成功发送

四、验证DMA缓冲区的接收结果

发送完成后,你需要检查PA板的DMA接收缓冲区是否收到了这个dummy帧:

  • 调用Eth Driver提供的接收缓冲区读取API,或者在调试模式下直接访问DMA控制器的缓冲区内存(如果允许的话)
  • 对比收到的帧的目的MAC源MACPayload数据是否和你发送的完全一致
  • 确认帧长度正确,没有出现截断或数据篡改的情况

五、几个关键注意事项

  • 控制器模式配置:如果是板内自测(自己发自己收),需要确认以太网控制器的配置中开启了Receive Own Frames或者Loopback Mode,不然控制器可能会丢弃自己发送的帧;如果是外部发送到板卡,只要目的MAC是板卡自身的,即使不开启混杂模式也能正常接收
  • Autosar权限配置:如果你的项目用了Autosar的BSW模块,可能需要在BswM(基础软件模式管理器)或者Os(操作系统)中配置权限,允许应用层调用底层Eth Driver的原始帧接口
  • DMA缓冲区大小:确保DMA接收缓冲区的大小足够容纳你的dummy帧,避免出现帧溢出导致接收失败

内容的提问来源于stack exchange,提问作者Lkaf Temravet

火山引擎 最新活动