Eth_集成手册

目标

本集成手册用于指导客户进行Eth通信栈集成,文档主要包括的内容为:协议栈集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。

由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。

缩写词和术语

表 2‑2‑1 缩写词和术语

** 缩写词/术语**

描述

Eth

Ethernet Driver以太网驱动程序

EthIf

Ethernet Interface以太网接口

PduR

PDU Router 将I-PDU从一个模块转移到另一个模块的模块

LdCom

Large Data Communication 大数据通信模块

SoAd

Socket Adapter 套接字适配模块

TcpIp

TCP/IP protocol module TCP/IP协议模块

MCAL

Microcontroller Abstraction Layer 微控制器抽象层

参考文档

[1] 参考手册_EthIf.pdf

[2] 参考手册_EthSM.pdf

[3] 参考手册_TcpIp.pdf

[4] 参考手册_SoAd.pdf

[5] 参考手册_PduR.pdf

[6] 参考手册_LdCom.pdf

协议栈集成

项目交付的内容为:Eth通信栈源码和ORIENTAIS Configurator配置工具。协议栈细分为协议栈的各模块及其对应的配置工具模块。

Eth通信栈各配置模块的功能介绍,参见表 4‑1 Eth通信栈各配置模块介绍。

使用协议栈源码和配置工具,进行协议栈的集成的步骤,参见表 4‑2 Eth通信栈集成的步骤。

表 4‑1 Eth通信栈各配置模块介绍

模 块名

功能

Eth

ETH驱动配置。

EthIf

EthIf模块使用EthIfCtr lIdx来抽象以太网收发器和控制器的底层通信系统对VLAN的访问, 以此以太网接口实现从EthCtrlIdx到各自硬件资源控制器的映射。

EcuC

用于辅助配置工具完成配置的模块。主 要提供Pdu的定义,其它模块通过关联EcuC中Pdu,相互关联起来。

PduR

PduR模块用于Pdu在TP层和IF层的传输,为COM和DCM的下层

TcpIp

TcpIp模块作为以太网基本协议模块,提 供了发送和接收互联网协议数据的功能,处于SoAd和EthIf中间。

SoAd

S oAd模块使用PDU和socket在TCPIP栈之间创建接口,将Pdu与socket connection 形成映射关系.

LdCom

LdCom模块

表 4‑2 Eth通信栈集成的步骤

步 骤 *

操作

说明

1

ORIENTAIS Configurator配置工具 工程搭建和协议栈模块加载

若配置工具已经搭建 ,则仅需进行协议栈模块的加载操作。

2

模块配置及配置文件生成

NA

3

代码集成

现有工程、 协议栈源代码和配置生成文件的集成。

4

验证测试

NA

注意:协议栈集成之前,用户须确保已经有基础工程,且本协议栈相关的其他协议栈能正常工作。

新建ORIENTAIS工程

  1. 安装ORIENTAIS Configurator软件后,双击软件图标打开软件。

../../_images/image1169.png

图 4‑1 新建工程-1

  1. 菜单栏File🡪New🡪Project,新建工程。

../../_images/image2108.png

图 4‑2 新建工程-2

  1. 在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。

图 4‑3 新建工程-3

  1. 在弹出的窗口中输入工程名,选择Finish。

图 4‑4 新建工程-4

  1. 在弹出的窗口中选择Yes。

../../_images/image568.png

图 4‑5 新建工程-5

  1. 选择[Bsw_Builder],右键单击,选择New ECU Configuration。

../../_images/image666.png

图 4‑6 新建工程-6

  1. 在弹出的窗口中输入ECU名,然后选择Next。

image1

图 4‑7 新建工程-7

  1. 在弹出的窗口中勾选需添加的模块,点击Finish。

../../_images/image849.png

图 4‑8 新建工程-8

  1. 新建工程如下所示,上一步添加的模块已经被加入到工程中。

../../_images/image948.png

图 4‑9 新建工程-9

  1. MCAL配置导入,BSW模块需要依赖MCAL生成的Eth模块

    1. 从MCAL配置工具生成arxml

图 4‑10 新建工程-10

图 4‑11 新建工程-11

  1. 导入BSW工具

图 4‑12 新建工程-12

图 4‑13 新建工程-13

图 4‑14 新建工程-14

配置文件生成

模块配置

模块的具体配置,取决于具体的项目需求。Eth通信栈各模块配置项的详细介绍,参见文档《参考手册_EthIf.pdf》、《参考手册_EthSM.pdf》、《参考手册_TcpIp.pdf》、《参考手册_SoAd.pdf》、《参考手册_LdCom.pdf》。

配置代码生成

  1. 在ORIENTAIS Configurator主界面左方,选择对应的协议栈,或者选择整个ECU,单击右键弹出Validate All和Generate All菜单。

../../_images/image1532.png

图 4‑15 配置代码的生成-1

  1. 选择Validate All对本协议栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。

  2. 选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。

图形用户界面, 文本, 应用程序 描述已自动生成

图 4‑16 配置代码的生成-2

  1. 将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。

../../_images/image1728.png

图 4‑17 配置代码的生成-3

功能集成

代码集成

协议栈代码包括两部分:项目提供的协议栈源码和ORIENTAIS Configurator配置生成代码。

用户须将协议栈源码和章节4.2.2生成的源代码添加到集成开发工具的对应文件夹。协议栈集成的文件结构,见章节5.3。

注意:协议栈集成之前,用户须确保已经有基础工程,且本协议栈相关的其他协议栈能正常工作。

集成注意事项

用户须提前配置好Eth的MCAL驱动,如果以太网通过中断完成接收发送,需验证发送、接收中断工作正常,如存在OS,则在OS中配置好相关的以太网中断,如无OS,则需手动挂载对应的中断函数并使能中断。

集成示例

本章节通过Eth通信栈为例,向用户展示Eth通信栈的集成过程。用户可以据此熟悉Eth通信栈配置工具的配置过程,以及如何应用配置工具生成的配置文件。

为让用户更清晰的了解工具的使用,所用的配置均逐一手动完成。关于Eth驱动的配置,请参考芯片厂商提供的Eth MCAL配置手册。

注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。

集成目标

通过LdCom_Transmit实现Udp和Tcp(Server及Client)报文的发送。

表 5‑1 Eth通信Socket信息

Socket信息

Udp

本地:192.168.0.200/UDP/65000

远端:192.168.0.123/UDP/10001

Tcp Server

本地:192.168.0.200/TCP/65000

远端:0.0.0.0/TCP/0

Tcp Client

本地:192.168.0.200/TCP/55001

远端:192.168.0.123/TCP/20001

模块配置

新建配置工程及模块加载操作,请参考本文档4.2章节。

Eth驱动配置

Eth驱动配置为MCAL层配置,可以参考以下S32K148驱动进行配置。

图形用户界面, 文本, 应用程序, 电子邮件 描述已自动生成

图 5‑1 Eth配置-1

图形用户界面, 应用程序 描述已自动生成

图 5‑2 Eth配置-2

EcuC配置

  1. 双击EcuC模块,打开EcuC模块配置界面。

  2. 在EcucConfigSets栏目上右键,选择EcucConfigSet。再在EcucConfigSet上右键,选择New🡪 EcucConfigSet。再在EcucPduCollections上右键,选择New EcucPduCollection。

    1. PduIdTypeEnum 选择UINT16(该参数表示PDU的格式。因为示例只有16个PDU,PDU数不会超过65535,UINT16类型的长度就够存储了)

    2. PduLengthTypeEnum 选择UINT16(该参数表示数据长度,示例需要配置的报文长度都是在1500以内,所以选择UINT16即可)

../../_images/image2021.png

图 5‑3 配置EcucPduCollection

  1. 在EcucPduCollection上右键,选择Pdu,会生成一个Pdu的配置界面。

    1. 建议不要使用默认生成的Pdu名字(如:Pdu_0),将Pdu名字改成有意义的名字对后续的配置过程将会有很大帮助。

    2. 这里按照发送和接收,可以将Pdu名字改为报文的名字。PduLength:Pdu长度,根据实际使用帧的长度设置。

    3. 添加SoAd和LdCom所需的Pdu,并根据客户端和服务端选择不同的Pdu长度。

../../_images/image2127.png

图 5‑4 配置Pdu

  1. ECUC模块到此配置结束。可以在模块上右键,然后选择校验,查看是否配置有错误。

  2. 校验后提示窗口没有错误信息,即校验通过。

EthIf配置

  1. 配置EthIfGeneral。

../../_images/image2224.png

图 5‑5 EthIfGeneral配置

  1. 在EthIfConfigSet中配置EthIfController。

../../_images/image2322.png

图 5‑6 EthIfController配置

  1. 添加以太网对应的帧类型,选择对应的EthIfOwner,这里Owner为上层模块编号,此处对应EthRxIndicationConfigs中的以太网报文接收回调函数。

图形用户界面, 文本, 应用程序, 电子邮件 描述已自动生成

图 5‑7 EthIfConfigSet配置

  1. 在Eth_DriverApiConfigeSet对Eth驱动中的代码原型进行映射,需参考MCAL源码进行修改,一些未使用的Api(如Timestamp功能)需改为NULL_PTR。如存在EthTrcv模块,同理在EthTrcv_DriverApiConfigSet中进行修改。

图形用户界面, 应用程序 描述已自动生成

图 5‑8 Eth_DriverApiConfigSet配置

  1. 校验后提示窗口没有错误信息,即校验通过。

TcpIp配置

  1. 配置TcpIpGeneral。

    1. 设置TcpIpMainFunctionPeriod,单位秒,代码中对应10ms执行一次TcpIp_MainFunction();

    2. 使能TCP和UDP,设置对应的最大socket数量;

../../_images/image2618.png

图 5‑9 TcpIpGeneral配置

  1. 配置TcpIpIpV4General,使能IPv4(暂时只支持IPv4)。

../../_images/image2717.png

图 5‑10 TcpIpIpV4General配置

  1. 在TcpIpConfig配置页中新建TcpIpIpConfig,并在TcpIpIpConfig中添加Arp配置。

图 5‑11 TcpIpArpConfig配置

  1. TcpIpCtrl中选择EthIf配置的映射接口。

../../_images/image2915.png

图 5‑12 TcpIpCtrl配置-1

  1. 添加TcpIp的IpV4设置,并选择对应的Arp配置。

图 5‑13 TcpIpCtrl配置-2

  1. 设置TcpIp本地地址。

    1. TcpIpAssignmentTrigger选择TCPIP_AUTOMATIC。

../../_images/image3118.png

图 5‑14 TcpIpAddrAssignment配置

  1. 在TcpIpLocalAddrs中添加IP地址设置。

../../_images/image3216.png

图 5‑15 TcpIpStaticIpAddressConfig配置

  1. 新建TcpIpSocketOwnerConfig,添加SoAd模块对应的接口Api。

../../_images/image3315.png

图 5‑16 TcpIpSocketOwner配置

  1. 在TcpIpTcpConfigs中添加TCP设置。

../../_images/image3414.png

图 5‑17 TcpIpUdpConfig配置

  1. 在TcpIpUdpConfig中添加UDP设置。

../../_images/image3514.png

图 5‑18 TcpIpUdpConfig

  1. 校验后提示窗口没有错误信息,即校验通过。

SoAd配置

  1. SoAdGeneral配置。

    1. 设置SoAdMainFunctionPeriod,单位秒,代码中对应10ms执行一次SoAd_MainFunction();

    2. 配置SoAdRoutingGroupMax与SoAdSoConMax,设置SoAdRoutingGroup与SoAdSoCon的最大数量;

../../_images/image3614.png

图 5‑19 SoAdGeneral配置

  1. 在SoAdBswModules中关联SoAd相关的Bsw模块。

图形用户界面, 应用程序 描述已自动生成

图 5‑20 SoAd配置-SoAdBswModules

  1. SoAdSocketConnectionGroups中添加Udp Cilent Socket配置。

    1. 此处通过LdCom发送来执行TcpIp报文测试,暂时不使能SoAdPduHeaderEnable,同时也暂不配置对应的HeaderId.

    2. 使能SoAdSocketAutomaticSoConSetup,否则需在代码中手动通过SoAd_OpenSoCon()来使SoAd_SoConMode切换到SOAD_SOCON_ONLINE。

../../_images/image3810.png

图 5‑21 UDP Client配置-SoAdSocketConnectionGroup

  1. 设置Udp发送的远端地址。

../../_images/image398.png

图 5‑22 UDP Client配置-SoAdSocketRemoteAddress

  1. 创建Udp的SoAdSoket时,SoAdSocketRemoteIpAddress和SoAdSocketRemotePort不可设置为0,SoAdSocketRemoteIpAddress需设置为对应本地以太网的地址。

../../_images/image407.png

图 5‑23 本地以太网设置IP地址

  1. 在SoAdSocketProtocols中添加对应协议。

../../_images/image4114.png

图 5‑24 UDP Client配置-SoAdSocketProtocol

  1. SoAdSocketConnectionGroups中添加Tcp Serve Socket配置。

    1. 此处暂不勾选SoAdSocketAutomaticSoConSetup,同时在代码中添加SoAd_OpenSoCon(),入参时选择对应的SoAdSocketConnectionGroup的SoAdSocketId。

../../_images/image4215.png

图 5‑25 TCP Server配置-SoAdSocketConnectionGroup

  1. 设置TcpServer端的远端地址和Port,对于Tcp而言设置远端地址和Port为0.0.0.0,表示任意远端地址均可进行连接。

../../_images/image4314.png

图 5‑26 TCP Server配置-SoAdSocketRemoteAddress

  1. 在SoAdSocketProtocols中添加对应协议。

../../_images/image4414.png

图 5‑27 TCP Server配置-SoAdSocketTcp

  1. SoAdSocketConnectionGroups中添加Tcp Client Socket配置。

    1. 同样此处暂不勾选SoAdSocketAutomaticSoConSetup。

../../_images/image4514.png

图 5‑28 TCP Client配置-SoAdSocketConnectionGroup

  1. 添加对应TCP Client节点对应发送的远端地址与port。

../../_images/image4613.png

图 5‑29 TCP Client配置-SoAdSocketRemoteAddress

  1. 在SoAdSocketProtocols中添加对应协议。

../../_images/image4710.png

图 5‑30 TCP Client配置-SoAdSocketTcp

  1. 新建SoAdRoutingGroup,勾选SoAdRoutingGroupIsEnabledAtInit,使能SoAdRoutingGroup。

../../_images/image487.png

图 5‑31SoAdRoutingGroup配置

  1. 配置SoAdPduRoute。

    1. 添加所需的SoAdPdu路由

../../_images/image497.png

图 5‑32 SoAdPduRoute配置

  1. 新建SoAdPduRouteDest,选择对应的SoAdTxSocketConnOrSocketConnBundleRef,并在SoAdTxRoutingGroupRef添加SoAdTxRoutingGroupRef。

../../_images/image506.png

图 5‑33 SoAdPduRouteDest配置

  1. SoAdSocketRoutes配置。

    1. 添加所需的SoAdPdu路由,并在SoAdRxSocketConnOrSocketConnBundleRef选择对应的SCGroupConnection。

image2

图 5‑34 SoAdSocketRoute配置

  1. 新建SoAdSocketRouteDest,

image3

图 5‑35 SoAdSocketRouteDest配置

  1. 校验后提示窗口没有错误信息,即校验通过。

PduR配置

  1. PduRBswModules配置,添加PduR服务的Bsw模块,选择对应的PduRBswModulesRef后自动勾选Api。

../../_images/image5312.png

图 5‑36 PduRBswModules

  1. PduR的路由表,配置以上路由,路由类型选择IF。

../../_images/image5412.png

图 5‑37 PduRRoutingTables

  1. 选择路由中的目标Pdu(PduRDestPdus)和源Pdu(PduRSrcPdus),同理添加UDP、TCP的客户端和服务端的Pdu路由。

../../_images/image5511.png

图 5‑38 PduRDestPdu配置

../../_images/image569.png

图 5‑39 PduRSrcPdu配置

  1. 校验后提示窗口没有错误信息,即校验通过。

LdCom配置

  1. 配置LdComGeneral,选择Det和版本信息Api和LdCom回调头文件。

图形用户界面, 文本, 应用程序, 电子邮件 描述已自动生成

图 5‑40 LdComGeneral配置

  1. 配置LdComConfig,选择LdComApi类型LDCOM_IF,通信路由方向选择发送报文选择LDCOM_SEND、接收报文选择LDCOM_RECEIVE;添加对应发送或接收的TxComfirmation / RxIndication;最后选择PduR中配置的Pdu路由。

../../_images/image585.png

图 5‑41 LdComConfig配置

注意:Ldcom配置的TxComfirmation / RxIndication回调函数需要用户自定义。

源码集成

项目交付给用户的工程结构如下:

图片包含 图表 描述已自动生成

图 5‑42 工程结构目录

  • Config目录,这个目录用来存放配置工具生成的配置文件

  • Source目录,存放模块相关的源代码。可以看到Source目录下各个文件夹下是各个模块的源代码。

调度集成

Eth通信栈调度集成步骤如下:

  1. 以太网驱动集成验证工作正常。

  2. 若存在外接的以太网Phy,无法建立以太网连接时需考虑添加对应的Phy驱动代码。

  3. 按4.2.1中的内容,配置并集成Eth通信栈代码。

  4. 编译链接代码,将生成的elf文件烧写进芯片。

Eth通信有关的代码,在下方的main.c文件中给出重点标注。

注意 : 本示例中,Eth通信相关代码置于main.c文件,并不代表其他项目同样适用于将其置于main.c文件中。

#include “UserTimer.h”

#include “EthIf.h”

Eth通信协议相关模块头文件

#include “TcpIp.h”

#include “SoAd.h”

#include “EthSM.h”

#include “LdCom.h”

int main(void)

定义LdCom发送的Pdu

{

uint8 LdComSrcPduData[10] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};

PduInfoType LdComTransmitPdu;

LdComTransmitPdu.SduDataPtr = LdComSrcPduData;

LdComTransmitPdu.SduLength = 10;

LdComTransmitPdu.MetaDataPtr = NULL_PTR;

UserTimer_Init();

Eth_Init(&Eth_Config);

Eth_SetControllerMode(EthConf_EthCtrlConfig_EthCtrlConfig_0, ETH_MODE_ACTIVE);

Eth_T_InitPhys();

EthIf_Init(&EthIf_ConfigData);

TcpIp_Init(&TcpIp_Config);

SoAd_Init(&SoAd_Config);

SoAd_OpenSoCon(1);

SoAd_OpenSoCon(2);

LdCom_Init(&LdCom_InitCfgSet);

Eth通信协议相关模块初始化

while(1)

{

if(Gpt_10msFlag == TRUE)

{

TcpIp_MainFunction();

TcpIp、SoAd模块周期处理函数

SoAd_MainFunction();

Gpt_10msFlag = FALSE;

}

if(Gpt_50msFlag == TRUE)

LdCom模块Pdu发送

{

LdCom_Transmit(LdComIPdu_Client_Tcp_Tx,&LdComTransmitPdu);

LdCom_Transmit(LdComIPdu_Server_Udp_Tx,&LdComTransmitPdu);

LdCom_Transmit(LdComIPdu_Server_Tcp_Tx,&LdComTransmitPdu);

Gpt_50msFlag = FALSE;

}

}

return 0;

}

验证结果

  1. 在wireshark中监控到对应50ms周期发送的UDP报文。

图形用户界面, 应用程序, 表格 描述已自动生成

图 5‑43 UDP报文示例

  1. 使用网络调试助手,作为TCP Client创建连接后可以监控到对应的TCP Client报文。

../../_images/image6113.png

图 5‑44 TCP Client 报文示例

  1. 使用网络调试助手,作为TCP Server创建连接后可以监控到对应的TCP Server报文。

../../_images/image6212.png

图 5‑45 TCP Sever 报文示例