Autosar之SomeIP 车载以太网【4】SD服务

SOME/IP-SD是服务发现和服务信息管理机制,用于汽车电子中的服务寻址和事件订阅。服务端和客户端通过状态机管理其行为,如Down、Init Wait Phase、Repetition Phase和Main Phase。在Main Phase,服务会周期性发送服务信息,客户端则在接收到服务信息后订阅服务。
摘要由CSDN通过智能技术生成

6. SD服务

SOME/IP-SD协议是SOME/IP协议的一种, 基于服务的通信需要Server/Client共同完成,在服务创建并且可用之后,Server和Client需要通过SOME/IP-SD动态创建两者之间的连接。Client在订阅服务之前,需要知道Server提供的服务列表;这个过程是通过“服务发现”来实现的。

SOME/IP-SD是服务的信息清单及管理机制,主要实现服务寻址及事件订阅两种功能。对服务进行寻址时,服务提供者(Server)通知Client某服务可用,并间接通知该服务的地址信息(Server端IP地址,端口号,协议),Client了解到某服务状态后,能够调用该服务的相关内容。

6.1 功能

  • 应用之间传达自己的服务或获取对方的服务是否可用。

  • 向其他应用程序订阅服务。

6.2 帧格式

  SOME/IP标准协议的基础上扩展了Entry,Option等字段

  • 发现服务FindService&OfferService

  • 订阅服务Subscribe&SubscribeACK

  • MessageID(32bit)

        固定为0xFFFF8100(Service ID为0xFFFF,Method ID为0x8100)

  • Length(32bit)

        表示Request ID至Payload的字节长度;

  • RequestID(32bit)

        用来响应特定的数据请求和发送

    • ClientID(16bit)

            一般固定为0x0000

    • SessionID(16bit)

            初始化配置为0x0001,在每发送一次数据后便加1

  • ProtocolVersion

        固定为0x01

  • InterfaceVersion

        固定为0x01

  • Messagetype

        固定为0x02

  • ReturnCode(8bit)

        主要用来指明通信中的相关错误的信息

  • Flags

    • Bit7 RebootFlag:是否发生重启

    • Bit6 UnicastFlag:是否支持单播

  • EntriesArray

        理解为“入口”,包含了服务实例以及需要订阅的事件组的信息

    • Service(服务Entry类型)

      • Type: 区分Service不同的场景;FindService(0x00),OfferService(0x01)和StopOfferService(0x01)

      • Index 1st options:表示first option run的第一个option索引值

      • Index 2nd options:表示second option run的第二个option索引值

      • #of opt 1:first option run使用的option总数目

      • #of opt 2:second option run使用的option总数目

      • ServiceId:用于表示涉及的服务的Id,通过SdServerServiceID/SdClientServiceID静态设置

      • InstanceId:注的服务实例的ID,设置为0xFFFF,表示一个服务的所有服务实例

      • MajorVersion:用于识别服务主体的主版本,通过SdClientServiceMajorVersion/SdServerServiceMajorVersion设置,0xFF表示任意版本

      • TTL:Entry的生命周期,通过SdServerTimer/SdClientTimer静态设置

      • Minor: 用于识别服务实体的次版本,通过SdClientServiceMinorVersion/SdServerServiceMinorVersion设置,0xFFFFFFFF表示任意版本

      • FindService

        • TypeID: 0x00

        • ServiceId: 设置为被发现的ServiceId

        • InstanceId: 0xFFFF,所有服务实例返回;指定InstanceId,单一指定返回

        • Major Version: 0xFF,任意版本的服务实体返回;指定MajorVersion,单一指定返回

        • SdVersionDrivenFindBehavioral:

                    如果设置为EXACT-OR-MINOR-VERSION, minor version需设置为OxFFFFFFFF,如果不是OxFFFFFFFF,必须特定minor version返回;

                    如果设置为MINIMUM_MINOR_VERSION,最小版本应设置为可接收的版本,如果为OxFFFFFFFF,则任意minor version的服务实体则返回;

        • TTL:不能设置为0。设置成0xFFFFFF,则在下一次启动前一直有效

      • OfferService

        • TypeID: 0x01

        • ServiceId: 设置为被发现的ServiceId

        • InstanceId: 设置为被发现的InstanceId

        • Major Version: 设置为Service Instance的Major Version。见参数SdServerServiceMajorVersion,其最大值只能配置成OxFE

        • Minor version: 设置为Service Instance的Minor Version

        • TTL: Service Instance的生命周期,超时之后则为无效;设置成0xFFFFFF,则在下一次启动前一直有效

      • StopOfferService

        • TypeID: 与OfferService中保持一致

        • ServiceId: 与OfferService中保持一致

        • InstanceId: 与OfferService中保持一致

        • Major Version: 与OfferService中保持一致

        • Minor version: 与OfferService中保持一致

        • TTL: 应设置为0x00

    • EventGroup(事件组Entry类型)

      • Type: 区分Service不同的场景;Subscribe(0x06),StopSubscribeEventgroup(0x06),SubscribeAck(0x07)和SubscribeEventgroupNack(0x07)

      • Index 1st options:表示first option run的第一个option索引值

      • Index 2nd options:表示second option run的第二个option索引值

      • #of opt 1:first option run使用的option总数目

      • #of opt 2:second option run使用的option总数目

      • ServiceId:用于表示服务的Id,通过SdServerServiceID/SdClientServiceID静态设置

      • MajorVersion:用于识别服务主体的主版本,通过SdClientServiceMajorVersion/SdServerServiceMajorVersion设置

      • TTL:Entry的生命周期,通过SdServerTimer/SdClientTimer静态设置

      • Counter: 用于区分同一订阅者的相同订阅事件组。 如果不使用,设置为0x0

      • EventGroupId:用于标识某个特定EventGroup的ID,通过SdConsumedEventGroupID静态设置

      • SubscribeEventgroup

        • TypeID: 0x06

        • Counter:区分不同的SubscribeEventgroup

      • StopSubscribeEventgroup

        • TypeID: 0x06

        • TTL: 应设置为0x00

      • SubscribeEventgroupAck

        • TypeID: 0x07

        • TTL: 与SubscribeEventgroup设置一致

      • SubscribeEventgroupNack

        • TypeID: 0x07

        • TTL: 应设置为0x00

  • OptionsArray

        Option类型主要是Entry的附属信息,主要包括:

    • 配置信息,可以用来配置服务的名称等;

    • 在Offer服务中定义服务的优先级;

    • 声明服务实例(offer引用,Request的目的地址,表明使用它所服务的终端地址)或者订阅端(SubscribeEventgroup引用,Request的源地址)的IP、端口号、传输协议等;

    • 声明服务端发送多播协议数据传达的终端的IP、端口号等,只能被SubscribeEventgroupAckEntry引用;

    • 声明发送SD信息的IP、端口号、传输协议,接收端使用该地址代替源地址等。

    • Configuration Options:用于配置通信过程的必要的信息

      • Length: Configuration options所占用的字节

      • Type:固定0x01

      • Configuration: [len]key=value[len]key=value[0]

    • Endpoint Options(IPV4/IPV6):用于传递IPV4或者IPV6的Endpoint信息(IP地址+Port号)以及使用的传输层协议;

      • IPV4 Endpoint Option

        • Length:固定为0x09

        • Type:固定为0x04

        • L4-Protocal: UDP, 0x11; TCP, 0x06

      • IPV6 Endpoint Option

        • Length:固定为0x15

        • Type:固定为0x06

        • L4-Protocal: UDP, 0x11; TCP, 0x06

      • IPV4 SD Endpoint Option

        • Length:固定为0x09

        • Type:固定为0x24

        • L4-Protocal: UDP, 0x11; TCP, 0x06

      • IPV6 SD Endpoint Option

        • Length:固定为0x15

        • Type:固定为0x26

        • L4-Protocal: UDP, 0x11; TCP, 0x06

  • Multicast Options(IPV4/IPV6):用于广播IPV4或者IPV6的IP地址及Port号,其中传输层协议只能使用UDP协议;

    • IPV4 Multicast Option

      • Length:固定为0x09

      • Type:固定为0x014

      • L4-Protocal: 固定为UDP, 0x11

    • IPV6 Multicast Option

      • Length:固定为0x15

      • Type:固定为0x16

6.3 状态机

6.3.1 总览

  • Down State:在这个阶段,服务是不可用的,即可以理解为服务没准备好。作为服务端的时候,不向外提供服务,作为客户端时,也不具备消费端的能力。

  • Available State:在这个阶段,Service已经上线,已经可以提供/消费服务。

    • Initial Wait Phase:当服务准备完毕后,进入此阶段。

    • Repetition Phase:为了快速找到客户端或者服务端,将在此阶段快速发送Offer或者Find报文。

    • Main Phase:在此阶段意味着服务已经进入了稳定状态,将周期性发送Find或者Offer报文。

6.3.2 服务端状态

Down

      软件初始化后,状态机的默认状态为服务不可用Down状态。

  • During动作:在此阶段,服务端将不发送offer报文,即客户端将感知该服务的不可用状态。

  • Down迁移至Available条件:Service服务被请求。ECU可以根据自定义需求请求服务上线,无论是根据网络管理状态还是服务的功能需求,在软件实现中,本质上就是调用一个函数接口使服务上线。

Init Wait Phase

      当SD 服务端状态机进入Aavailbale状态机后,默认先进入Init Wait状态。

  • Entry动作:进入Init waiy Phase状态机后,将开启一个Init Delay计时器,该定时器的值为时间参数INITIAL_DELAY_Min和INITIAL_DELAY_Max之间的随机值,上述参数在CP或者AP的协议栈中都是可以自定义配置的。

  • During动作:

    • 在Init Wait Phase阶段,如果收到Find报文,服务端将不做任何处理,即为初始化Offer报文。

    • Init Delay计时器完成时,发送一帧Offer报文

  • Init Wait Phase迁移至Repetition Phase条件:Init Delay计时器超时。

Repetition Phase
  • Entry动作:在进入状态机后,先判断参数REPETITIONS_MAX的值。

    • REPETITIONS_MAX==0,则直接进入Main Phase。

    • REPETITIONS_MAX > 0,则开启值为REPETITIONS_MAX计数器。

  • During动作

    • 计数器开启后,将以REPETITIONS_BASE_DELAY为基本发送间隔时间发送Offer 报文,每发送一次,时间间隔为上一次的两倍。

    • 如果收到某客户端的FindService,不影响当前阶段的发送计数和计时,延迟一定时间(REQUEST_RESPONSE_DELAY)后,单独发送单播OfferService给服务请求端。

    • 收到客户端的SubscribeEventgroup报文后,发送ACK/NACK,并启动属于该客户端的TTL计时器。

    • 收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器

  • Repetition Phase迁移至Main Phase条件:Init Delay计时器超时。

    • REPETITIONS_MAX==0

    • 发送完REPETITIONS_MAX次Offer Service报文。

Main Phase
  • Entry动作:进入Main hase后,开启时间为CYCLIC_OFFER_DELAY的定时器,以CYCLIC_OFFER_DELAY为周期发送Offer报文。

  • During动作

    • 如果收到某客户端的FindService,不影响当前阶段的发送计数和计时,延迟一定时间(REQUEST_RESPONSE_DELAY)后,单独发送单播OfferService给服务请求端。

    • 在此阶段,收到客户端的SubscribeEventgroup报文后,发送ACK/NACK,并启动属于该客户端的TTL计时器。

    • 收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器

6.3.3 客户端状态机

Down
  • 软件初始化后,状态机的默认状态为服务不可用Down状态。
  • During动作:在此阶段,客户端将不发送Find报文,即客户端不寻找提供该服务的服务端。
  • Down迁移至Available条件:应用程序请求Service服务上线
  • Down迁移至Main条件:当收到Offer报文后,在TTL时间(TTL指的是存活时间,即在TTL时间内,该Offer报文有效&内,直接迁移至Main Phase。
Init Wait Phase

      当SD 客户端状态机进入Aavailbale状态机后,默认先进入Init Wait状态。

  • Entry动作:进入Init waiy Phase状态机后,将开启一个Init Delay计时器,该定时器的值为时间参数INITIAL_DELAY_Min和INITIAL_DELAY_Max之间的随机值,上述参数在CP或者AP的协议栈中都是可以自定义配置的。

  • Init Wait Phase迁移至Repetition Phase条件:Init Delay计时器超时,并发送一帧Find报文。

  • Init Wait Phase迁移至Main Phase条件:在Init Delay计时器未超时期间,收到该服务对应Offer报文。

Repetition Phase
  • Entry动作:在进入状态机后,先判断参数REPETITIONS_MAX的值。

    • REPETITIONS_MAX==0,则直接进入Main Phase。

    • REPETITIONS_MAX > 0,则开启值为REPETITIONS_MAX计数器。

  • During动作:计数器开启后,将以REPETITIONS_BASE_DELAY为基本发送间隔时间发送Find报文,每发送一次,时间间隔为上一次的两倍。

  • Repetition Phase迁移至Main Phase条件:Init Delay计时器超时。

    • 发送完REPETITIONS_MAX次Find Service报文。

    • 在REPETITIONS_MAX计数器未完成期间,如果收到了Offer报文,则直接停止计数器,进入Main Phase,并且发送SubscribeEventgroup订阅报文。

Main Phase
  • During动作

    • 不再周期发送Find Service

    • 收到Offer Service,触发发送SubscribeEventgroup(延迟一定时间)

  • Main Phase迁移至Down Phase条件:如果收到StopOffer报文,则跳转至Down状态。

AUTOSAR是汽车电子系统架构标准,SD配置是指通过配置软件定义网络(SD),来实现车辆电子控制单元(ECU)之间的通信和数据交换。 SD配置涉及到以下几个方面: 1. 通信与连接:SD配置定义了ECU之间的通信架构,包括网络拓扑、通信协议、通信速率等。通过SD配置,可以确定ECU之间的连接关系,以及数据交换的方式。 2. 丰富的通信接口:SD配置提供了多种通信接口,包括CAN、LIN、FlexRay等,以满足不同的通信需求。通过SD配置,可以选择适合的通信接口,并配置其相关参数。 3. 数据传输和解析:SD配置定义了数据传输的方式,包括数据帧格式、消息传输机制等。通过SD配置,可以确定数据的传输顺序和解析方式,以确保数据的可靠传输和正确解析。 4. 兼容性和灵活性:SD配置允许用户根据具体需求进行灵活配置,以实现各种功能和性能要求。通过SD配置,可以兼容不同ECU的硬件和软件平台,并提供可扩展性和可维护性。 5. 诊断与安全性:SD配置支持诊断和故障处理功能,通过配置相关参数和机制,可以实现远程诊断和故障排除。同时,SD配置提供了安全性功能,包括数据加密、认证等,以保护车辆系统的安全。 总之,AUTOSAR SD配置是一项重要的工作,它为汽车电子系统的开发和集成提供了一种标准化的方法。通过SD配置,可以实现各个ECU之间的通信和数据交换,提高车辆电子系统的灵活性、兼容性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丶小破孩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值