AUTOSAR ETH模块(1)——通信原理

目录

基础了解

物理层

以太网帧格式


基础了解

        ETH,以太网,简单来讲就是将几台设备连接起来形成网络。这种连接是点到点之间的。以太网的传输速率为10M~10G,速度非常快。

        为了实现网络通信的标准化,普及网络应用,国际标准化组织(ISO)将整个以太网通信结构制定了OSI(Open System Interconnection)模型,整个模型包括硬件和软件定义。

        本文及后续文章所介绍的内容为以太网模块的物理层和数据链路层,上层协议等内容暂时不在讲述范围。

以太网的数据链路层分为LLC和MAC两种。

MAC:(Media Access Control)媒体访问控制层,负责以太网的总线访问机制、物理寻址方式、以太网帧格式等等。

LLC:(Logical Link Control)逻辑链路控制层,主要负责以太网帧的收发,还可以对以太网帧进行错误控制、流控等。

LLC负责报文的收发和检测控制等操作,MAC则作为软件和硬件间的桥梁。

物理层

        以太网设备间的连接都是由 MCU 通过 MII 和 SMI 来外接 PHY 芯片,经由 PHY 芯片将信号转换为支持网线传出的形式之后,然后才能和其他设备进行通信。

其中,MII负责数据的传输,SMI负责对PHY芯片进行控制。

        SMI包括MDIO和时钟线两种线,通过MDIO可以使MCU获取PHY芯片的状态,也可以对其进行控制。AUTOSAR 规范中定义了 WriteMII 和 ReadMII 两种接口来控制和监控 MII 的状态。MCU正是通过 SMI 来实现对 PHY 芯片的控制。

        常用的 MII 总线分为MII、RMII、SMII、GMII、RGMII、SGMII等。下图为 MII 和 RMII 两种协议的对比。

        简单来讲,在原本的 MII 前加上 “ R ” 则代表引脚简化,但是这种简化可能会导致传输不够稳定,因此适用于要求较低的场景;而 “ S ” 则表示串行,前面两种比如 MII 是采用多条数据线并行传输的方式,而 SMII 则是串行传输。

以太网帧格式

        以太网帧格式由前导字段、帧起始定界符、目标地址、源地址、数据包类型、数据域、填充域、校验和域组成。

前导码:7字节,用于同步接收端的时钟信号,便于识别帧的开始。

帧起始分隔符(SFD):1字节,用于标识帧的开始,用来指示接下来是帧的实际内容。

目的地址(Dst):6字节,接收方的MAC地址。

源地址(Src):6字节,即发送方的MAC地址。

类型/长度(Type/Length):2字节,用于指示有效载荷的类型(比如IPv4或IPv6)或者数据长度。

有效数据(Payload):46到1500字节,包含实际传输的数据内容,例如IP数据包。如果数据内容不足46字节,可能会通过填充(PAD)进行扩充。

填充(PAD):在有效数据少于46字节的情况下,增加的填充字节,保证数据部分的最小长度,填充字节通常是 0x00。

帧校验序列(FCS):4字节,用于校验数据帧的完整性,通常通过CRC(循环冗余校验)算法生成。

        目前以太网帧的格式分为 IEEE 802.3 和 Ethernet II 两种,通过判别“类型/长度”字段来进一步判断当前帧的类型。

IEEE 802.3:若该字段值小于等于0x5DC (1500),那么该帧为IEEE 802.3格式,此时该字段可以视为“长度”字段:

Ethernet II:若该字段值大于等于0x600 (1536),则该帧为Ethernet II帧格式。

### Autosar 中以太网报文的配置方法 在 AUTOSAR 架构下,以太网报文的配置涉及多个模块之间的协作,主要包括 Ethernet Driver (Eth)、Pdu Router (PduR)、Socket Adaptor (SoAd) 和 Service Discovery (SD) 模块。以下是关于这些模块如何协同工作以及具体配置方法的详细介绍。 #### 配置流程概述 1. **Ethernet 驱动配置**: 使用 AutoSAR 工具链中的配置工具完成 Eth 驱动模块的基础设置,包括 MAC 地址分配、帧过滤器定义等[^1]。 2. **通信路由配置**: PduR 模块负责管理 I-PDU 的传输路径,在大多数情况下,导入 DBC 文件后默认生成的 arxml 配置已能满足基础需求;若需自定义,则可通过脚本调整[^2]。 3. **Socket Adapter 设置**: SoAd 提供了高层应用程序与底层硬件间的抽象接口,其主要功能是对 UDP/TCP 数据包进行封装/解封操作[^4]。 4. **服务发现机制**: SD 模块利用特定 API 函数监听并解析来自网络的服务公告消息,同时记录源端信息以便后续交互使用[^3]。 #### 实现示例 - 基于 UDP 协议的数据交换 下面给出一段简单的 C 语言代码片段来展示如何借助上述提到的各项组件实现两节点间基于 UDP 的数据传递: ```c #include "Std_Types.h" #include "ComStack_Types.h" void main(void){ uint8_t dataBuffer[64]; /* 初始化阶段 */ Com_Init(); // 启动 COM 组件 SoAd_Init(); // 开启 Socket Adapter 功能 while(1){ /* 发送部分 */ memset(dataBuffer,0,sizeof(dataBuffer)); strcpy((char*)dataBuffer,"Hello World!"); SoAd_SendToTcpIp( SOAD_TX_PDU_ID_FOR_UDP_PACKET, (const uint8*)&dataBuffer, sizeof(dataBuffer), NULL_PTR); Delay_ms(1000); // 控制发送频率 /* 接收部分 */ if(SoAd_ReceiveFromTcpIp(&rxDataInfo)){ ProcessReceivedMessage(rxDataInfo.bufferPtr, rxDataInfo.length); } } } ``` 此程序片段演示了一个持续循环过程中既作为客户端又充当服务器的角色模型——每隔一秒向指定目标广播一次字符串"Hello World!"的同时也随时准备接受外界传入的信息流加以处理。 #### 注意事项 - 确保所有参与通讯实体均已正确定义各自所需参数集如 IP 地址、端口号等; - 对时间敏感型应用场景考虑加入优先级队列管理待发数据序列; - 安全防护措施不可忽视,比如验证输入合法性防止缓冲区溢出攻击等问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pQAQqa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值