【ISO14229_UDS_0x2A服务详解】

1、0x2A服务(ReadDataByPeriodicIdentifer,根据周期数据标识符读取数据)

  Service description:
  0x2A服务(ReadDataByPeriodicIdentifier,根据周期标识符读取数据服务)允许客户端从服务端请求周期性传输的数据记录值(一个或者多个周期标识符)。
  客户端请求报文中包含了一个或者多个1字节型的周期标识符(periodicDataIdentifier)的值,其标识了在服务端所维护的数据记录。周期标识符(periodicDataIdentifier)是数据标识符(DID)的低字节,0xF200 - 0xF2FF范围的DID,被用来表示periodicDataIdentifier,比如数据标识符(DID) 0xF2E3中周期标识符(periodicDataIdentifier) 为0xE3。
  数据记录(dataRecord)的格式和定义应该由车辆制造厂商指定,这些数据记录(dataRecord)可能会包括模拟量输入和输出信号,数字输入和输出信号,内部数据以及系统状态信息。
  当收到非stopSending的0x2A服务(根据周期标识符读取数据服务)的请求时,服务端应该检查条件是否满足去执行该服务。
  在给定的时间内,只有一种transmissionMode参数来支持periodicDataIdentifier。在接收到请求报文要求将transmissionMode参数为同一个periodicDataIdentifier设置新的schedule时,会执行对periodicDataIdentifier的schedule更改。应车辆制造商的要求,会支持不同的周期标识符(periodicDataIdentifier)对应多个schedule。
  发送初始的肯定应答报文之后,服务端会去访问由周期标识符(periodicDataIdentifier)指定的记录的数据元素值,并在单独的周期性数据响应报文中去传输每个periodicDataIdentifier的值,这些值会包含相关的dataRecord参数,如周期标识符(periodicDataIdentifier)参数,和周期标识符(periodicDataIdentifier)的数据,但是不包括肯定应答服务的标识符。在ISO 14229的实现规范中描述了周期性响应消息到某些数据链路层的映射。
  对于一个指定transmissionMode的周期速率,当只有单个周期标识符(periodicDataIdentifier)被调度时,周期速率被定义为在任意的两个连续响应报文并且有同样的周期标识符(periodicDataIdentifier)参数间的时间。如果多个周期标识符(periodicDataIdentifier)被同时调度时,在同一个周期标识符(periodicDataIdentifier)之间的有效期将会基于如下设计参数来变化:
—— 周期调度程序的调用率,
—— 每个调度器分配的可用协议特定的周期数据响应报文地址信息id的数量(例如,CAN上的CAN标识符)
—— 可以被定义并行同时传输的周期标识符(periodicDataIdentifier)数量。
  如果同时传输多个周期标识符(periodicDataIdentifier),这些参数值将影响相同periodicDataIdentifier之间有效时间增加的程度。因此,上述所有设计参数均由车辆制造商指定。每次调用周期调度器时,它将确定是否有任何periodicDataIdentifiers准备好传输。
  例如,两个不同的ECU实现可能都支持一个周期速率为10ms的快速传输模式和一个唯一的周期数据响应消息的地址信息ID。如果第一个实现每隔10ms调用周期性调度器,那么当调度两个periodicDataIdentifier时,相同periodicDataIdentifier之间的时间将增加到20 ms,而当调度四个periodicDataIdentifier时,时间将增加到40 ms。如果第二个实现每5 ms调用一次周期性调度器,那么当调度两个periodicDataIdentifier时,相同periodicDataIdentifier之间的时间间隔将保持在10 ms,而当调度四个periodicDataIdentifier时,时间间隔将增加到20 ms。
  当服务端接收到包含transmissionMode stopSending的ReadDataByPeriodicIdentifier请求时,服务端将停止周期性传输请求报文中所包含的periodicDataIdentifier,或者如果请求消息中没有指定特定的periodicDataIdentifier,则停止传输所有的periodicDataIdentifier。此transmissionMode的响应消息仅包含服务标识符(SID)。
  服务端可以根据车辆制造商和系统供应商的协议,限制可以同时支持的periodicDataIdentifiers的数量。超过可同时支持的periodicDataIdentifier的最大数量将导致单个否定应答,并且该请求中的任何periodicDataIdentifier都不会被安排。不允许在单个请求报文中重复相同的periodicDataIdentifier,如果客户端违反了此规则,则服务端将忽略除一个periodicDataIdentifier之外的所有内容。

2、请求报文格式

2.1 请求报文定义

  请求报文的定义:

字节序号参数值约定字节值
#1ReadDataByPeriodicIdentifier Request SIDM0x2A
#2transmissionModeM0x00 - 0xFF
#3periodicDataIdentifier[]#1C0x00 - 0xFF
.
.
.
.
.
.
.
.
#m + 2periodicDataIdentifier[]#mU0x00 - 0xFF

  C:如果transmissionMode等于sendAtSlowRate、sendAtMediumRate或sendAtFastRate,则第一个periodicDataIdentifier必须出现在请求报文中。在transmissionMode等于stopSending的情况下,为了停止所有计划的periodicDataIdentifier,可以不存在任何periodicDataIdentifier,或者客户端可以显式指定一个或多个要停止的periodicDataIdentifier。

2.2 请求报文中子函数参数定义

  该服务未使用子函数参数。

2.3 请求报文中数据参数定义

  该服务在请求报文中的数据参数定义如下表所示:

定义
transmissionMode
该参数标识了服务端要使用的请求periodicDataIdentifiers的传输速率,其传输速率详见下表。
periodicDataIdentifier (#1 to #m)
该参数标识了客户端正在请求服务端的数据记录,单个请求报文中可以请求多个periodicdataidentifier。

  下表定义了transmissionMode参数

字节值描述约定
0x00ISOSAEReserved
ISO保留
M
0x01sendAtSlowRate
此参数指定服务端应以慢速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(slow)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。
U
0x02sendAtMediumRate
此参数指定服务端应以中速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(medium)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。
U
0x03sendAtFastRate
此参数指定服务端应以快速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(fast)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。
U
0x04stopSending
服务端停止发送周期/重复性地肯定应答报文。注意,如果ransmissionMode = stopSending, maximumNumberOfResponsesToSend参数应该设置为0x01,否则服务器操作可能是未定义的。
U
0x05 - 0xFFISOSAEReserved
ISO保留
M
        

3、肯定应答报文

3.1 肯定应答报文格式定义

  必须区分初始的肯定应答报文(表示服务端接受0x2A服务和后续的周期性数据响应消息),包括periodicDataIdentifier数据。下表定义了服务端在接受请求时,需要传输的初始肯定应答报文。

字节序号参数值约定字节值
#1ReadDataByPeriodicIdentifier Response SIDM0x6A

  周期数据标识符(periodicDataIdentifier)的数据会以请求报文中transmissionMode参数所表示的速率去周期性地传输。在初始的肯定应答之后,对于请求报文中每个支持的periodicDataIdentifier,服务端将开始发送单个周期性数据响应消息,定义如下。

字节序号参数值约定字节值
#1periodicDataIdentifierM0x00 - 0xFF

#2
.
.
#k+2
dataRecord[] = [
        data#1
        .
        .
        data#k ] ]

M
.
.
U

0x00 – 0xFF
.
.
0x00 – 0xFF

3.2 肯定应答报文数据参数定义

  下表定义了周期消息中数据参数:

Definition
periodicDataIdentifier
请求报文中的周期DID。
dataRecord
0x2A服务(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)肯定应答报文中提供给客户端的数据记录值。

4、支持的否定应答码(NRC_)

  本服务应实施如下否定响应代码,下表记录了每个应答代码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应代码。

NRC描述
0x13incorrectMessageLengthOrInvalidFormat
请求报文长度不正确或者客户端超出periodicDataIdentifiers的最大值,会发送该NRC
0x22conditionsNotCorrect
服务端的运行条件不满足去执行请求的动作时,会发送该NRC。如果客户端请求具有不同传输模式(transmissionModes)的periodicDataIdentifiers,并且服务端不支持同时使用多个传输模式,则可能发生这种情况。
0x31requestOutOfRange
如下情况发送该NRC:
— 请求的周期DID值一个都不被设备所支持;
— 在当前会话下,请求的周期DID值一个都不被支持;
— 指定的传输模式(transmissionMode)不被设备所支持;
— 请求的动态定义DID(dynamicDefinedDataIdentifier)还没被分配;
— 客户端超过了允许同时调度的periodicDataIdentifiers的最大数量;
0x33SecurityAccessDenied
至少一个周期DID是保密的,并且服务端处于上锁状态,会发送该NRC

  0x2A服务(ReadDataByPeriodicIdentifier)的否定应答码(NRC)具体处理过程如下图所示:
在这里插入图片描述

5、0x2A服务(ReadDataByPeriodicIdentifer,根据周期数据标识符读取数据)案例说明

  Assumptions:
  如下案例中展示了0x2A服务是如何运行的,客户端可以在任何时候请求与服务端状态无关的数据标识符(DID)的换算数据。如下案例特定于动力总成(如发动机控制模块)
  例1:Read multiple periodicDataIdentifiers 0xE3 and 0x24 at medium rate
  Assumptions:
  该示例演示了请求多个dataIdentifier(dataIdentifier 0xF2E3,其中periodicDataIdentifier 为0xE3 )包含了发动机冷却液温度、油门位置、发动机转速、车速传感器,并且 dataIdentifier 0xF224,其中periodicDataIdentifier 为0x24 包含了电池电压、歧管绝对压力、空气质量流量、车辆气压和计算负载值。
  客户端以中等速率请求传输,在获取周期性数据一段时间后,客户端仅停止传输periodicDataIdentifier 0xE3。
  Step #1: Request periodic transmission of the periodicDataIdentifiers
  案例1步骤1 0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序Description字节值
#1ReadDataByPeriodicIdentifier Request SID0x2A
#2transmissionMode = sendAtMediumRate0x02
#3periodicDataIdentifier#10xE3
#4periodicDataIdentifier#20x24

  案例1步骤1 0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的初始肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序Description字节值
#1ReadDataByPeriodicIdentifier Response SID0x6A

  下表定义了接下来的0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的肯定应答报文1:

字节顺序Description字节值
#1periodicDataIdentifier#10xE3
#2dataRecord [ data#1 ] = ECT0xA6
#3dataRecord [ data#2 ] = TP0xTP
#4dataRecord [ data#3 ] = RPM0x07
#5dataRecord [ data#4 ] = RPM0x50
#6dataRecord [ data#5 ] = VSS0x00

  下表定义了接下来的0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的肯定应答报文2:

字节顺序Description字节值
#1periodicDataIdentifier#10x24
#2dataRecord [ data#1 ] = B+0x8C
#3dataRecord [ data#2 ] = MAP0x20
#4dataRecord [ data#3 ] = MAF0x1A
#5dataRecord [ data#4 ] = BARO0x63
#6dataRecord [ data#5 ] = LOAD0x4A

  服务端以中等速率传输上述所示的后续响应消息。

  Step #2: Stop the transmission of the periodicDataIdentifiers
  下表定义了案例1步骤2中的请求报文,由客户端发向服务端(ECU):

字节顺序Description字节值
#1ReadDataByPeriodicIdentifier Request SID0x2A
#2transmissionMode = stopSending0x04
#3periodicDataIdentifier#10xE3

  案例1步骤2肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序Description字节值
#1ReadDataByPeriodicIdentifier Response SID0x6A

  服务端只停止传输periodicDataIdentifier 0xE3。而periodicDataIdentifier 0x24仍然以中等速率传输。

例2:Graphical and tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates

  ReadDataByPeriodicIdentifier example overview
  该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的图形和表格示例。
  该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。
  在下面案例中,定义了以下实现:
—— 快速周期速率为25ms,中周期速率为300ms。
—— 周期调度器每12.5 ms检查一次,这意味着周期调度器后台函数在此周期内被调用(轮询)。每次调用后台周期调度器时,它将遍历调度器条目,直到发送一个周期标识符,或者直到调度器中的所有标识符都已检查并且没有一个条目是准备好发送的。在示例实现中,当遍历调度程序以查看标识符是否准备好进行传输时,表中的“周期性调度程序传输索引”变量是第一个检查的索引。
—— 可以同时调度的periodicDataIdentifiers的最大数量为4。
—— 分配一个唯一的周期性数据响应消息的地址信息ID。
  由于周期调度器轮询率为12.5 ms,因此每次发送快速周期速率的periodicDataIdentifier时,快速周期速率的循环计数器将设置为2(该值是基于调度速率(25 ms)除以周期调度器的轮询率(12.5 ms)得出),而每次发送中速率时,中速周期速率的循环计数器将重置为24(调度的速率去除以周期调度器的轮询率300 / 12.5)。
  Read multiple periodicDataIdentifiers 0xE3 and 0x24 at medium rate
  在t = 0,0 ms时,客户端开始以中等速率(300 ms)发送请求去调度2个 periodicDataIdentifiers (0xF2E3和0xF224)。对于本例,服务端在第一次t = 25.0 ms时接收请求并执行周期性调度器的后台函数。
在这里插入图片描述
  下表显示了服务端中周期性调度器的一种可能实现。该表包含周期调度器变量,以及每次执行检查周期调度器的后台函数时它们是如何变化的。

timeperiodic scheduler
transmit Index
periodic
identifier sent
periodic scheduler
loop #
scheduler[0]
transmit count
scheduler[1]
transmit count
25.000xE310->240
37.510x242230->24
50.00None32223
62.50None42122
75.00None52021
87.50None61920
100.00None71819
112.50None81718
125.00None91617
137.50None101516
150.00None111415
162.50None121314
175.00None131213
187.50None141112
200.00None151011
212.50None16910
225.00None1789
237.50None1878
250.00None1967
262.50None2056
275.00None2145
287.50None3234
300.01None2323
312.50None2412
325.000xE3250->241
337.500x2426230->24
350.00None272223
362.50None282122

例3:Graphical and tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates

  ReadDataByPeriodicIdentifier example overview
  该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的图形和表格示例。
  该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。

  Read multiple periodicDataIdentifiers at different periodic rates
  在本例中,以快速周期速率(25 ms)调度三个periodicDataIdentifier (0x01、0x02、0x03),然后发送另一个请求,以中等周期速率(300 ms)调度单个periodicDataIdentifier (0x04)。在本例中,服务端接收到第一个ReadDataByPeriodicIdentifier请求(1),发送一个没有任何周期数据的肯定应答(2),并且在t = 25.0 ms时第一次执行周期调度器的后台函数(3)。服务端发送一个没有任何周期性数据的肯定应答(7),并在t = 62.5 ms时(8)以300 ms的预定中速率开始执行周期性调度器的后台函数。
在这里插入图片描述
  关键步骤:
    1 ReadDataByPeriodicIdentifier (0x2A, 0x03, 0xF201, 0xF202, 0xF203) request message (sendAtFastRate)
    2 ReadDataByPeriodicIdentifier positive response message (0x6A, no data included)
    3 ReadDataByPeriodicIdentifier periodic data response message (0x01, 0xXX, …, 0xXX)
    4 ReadDataByPeriodicIdentifier periodic data response message (0x02, 0xXX, …, 0xXX)
    5 ReadDataByPeriodicIdentifier (0x2A, 0x02, 0xF204) request message (sendAtMediumRate)
    6 ReadDataByPeriodicIdentifier periodic data response message (0x03, 0xXX, …, 0xXX)
    7 ReadDataByPeriodicIdentifier positive response message (0x6A, no data included)
    8 ReadDataByPeriodicIdentifier periodic data response message (04, 0xXX, …, 0xXX)
  下表显示了服务端中周期性调度器的一种可能实现。该表包含周期调度器变量,以及每次执行检查周期调度器的后台函数时它们是如何变化的。

timeperiodic scheduler
transmit Index
periodic
identifier sent
periodic scheduler
loop #
scheduler[0]
transmit count
scheduler[1]
transmit count
scheduler[2]
transmit count
scheduler[3]
transmit count
25.000x0110->200N/A
37.510x02210->20N/A
50.020x033010->20
62.530x0440010->24
75.000x0150->20023
87.510x02610->2022
100.020x037010->221
112.530x0180->20120
125.010x02910->2019
137.520x0310010->218
150.030x01110->20117
162.510x021210->2016
175.020x0313010->215
187.530x01140->20114
200.010x021510->2013
212.520x0316010->212
225.030x01170->20111
237.510x021810->2010
250.020x0319010->29
262.530x01200->2018
275.010x022110->207
287.520x0322010->26
300.030x01230->2015
312.510x022410->204
325.020x0325010->23
337.530x01260->2012
350.010x022710->201
362.520x0328010->20
375.030x04290010->24
387.500x01300->20023

例4:Tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates

  ReadDataByPeriodicIdentifier example overview
  该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的表格示例。
  该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。
  在下面案例中,定义了以下信息:
—— 快速周期速率为10ms。
—— 周期调度器每10ms检查一次,这意味着在此周期内调用(轮询)周期调度器的后台函数。
—— 可以同时调度的periodicDataIdentifiers的最大数量为16。
—— 分配两个唯一的周期数据响应消息地址信息id。
  由于周期调度器轮询率为10 ms,因此每次发送快速周期速率的periodicDataIdentifier时,快速周期速率的循环计数器将设置为1(该值基于调度速率(10 ms)除以周期调度器的轮询率(10 ms))。
  在t = 0,0 ms时,客户端开始以快速周期速率(10 ms)发送请求去调度2个 periodicDataIdentifier(为简单起见,为0x01, 0x02)。对于本例,服务器在第一次t = 10 ms时接收请求并执行周期性调度器的后台函数。

TimeResponse message ID#Periodic identifier sentPeriodic scheduler loop #
1010x011
1020x021
2010x012
2020x022
3010x013
3020x023
4010x014
4020x024
5010x015
5020x025
6010x016
6020x026
7010x017
7020x027
8010x018
8020x028
9010x019
9020x029
10010x0110
10020x0210

例5:Tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates

  ReadDataByPeriodicIdentifier example overview
  在t = 0,0 ms时,客户端开始以快速的周期速率(10 ms)发送请求去调度3个 periodicDataIdentifier(为简单起见,为0x01、0x02、0x03)。对于本例,服务器在第一次t = 10 ms时接收请求并执行周期性调度器的后台函数。

TimeResponse message ID#Periodic identifier sentPeriodic scheduler loop #
1010x011
1020x021
2010x032
2020x012
3010x023
3020x033
4010x014
4020x024
5010x035
5020x015
6010x026
6020x036
7010x017
7020x027
8010x038
8020x018
9010x029
9020x039
10010x0110
10020x0210

返回UDS诊断服务功能单元介绍目录

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: iso-14229是一项用于汽车电子系统通信的协议,其全称为ISO14229 Unified Diagnostic Services(UDS)on Controller Area Network(CAN)。该协议旨在为车辆的诊断、维护和修复提供标准化的方法。ISO 14229定义了诊断服务和通信的标准化消息格式,包括诊断数据、错误码、故障清除等,以使不同车辆的系统实现得到统一和互操作性。 ISO14229 UDS协议栈是用于实现ISO 14229诊断协议的软件组件。该协议栈的实现可分为物理层和软件层两个部分,其中物理层是指使用CAN总线对车辆的执行单元进行通信,而软件层则是指实现ISO 14229标准的协议堆栈。该协议栈具有标准化、可重用和可配置的特点,可在不同的客户平台上使用。 ISO 14229的文档是对该协议的规范和说明,包括协议的基本架构、消息格式、错误码表、会话层和传输层的细节等。该文档是实现ISO 14229协议的必要依据,可用于开发UDS协议栈的开发人员和车辆诊断工程师。 源码.zip则是UDS协议栈的实现源代码,包括物理层和软件层代码。开发人员可根据该源码了解UDS协议栈的实现细节和技术实现,并根据需求进行二次开发。 综上所述,ISO-14229_14229_UDS协议栈_UDS-ISO-14229_ISO14229文档_ISO 14229_源码.zip等组件,是用于实现汽车电子系统诊断的标准化协议,可为车辆的维护和修复提供规范的方法。开发人员和车辆诊断工程师可根据这些组件进行UDS协议栈的开发和实现。 ### 回答2: ISO-14229是用于诊断汽车电子控制单元(ECU)的标准协议。该协议旨在提供一种标准化的方法,让技术人员可以使用相同的工具和流程诊断不同制造商的汽车。 14229 UDS是该标准的通信协议栈。UDS指协议栈中定义的通用诊断服务,该服务可用于访问ECU的内部数据和状态。ISO14229文档提供了UDS协议栈的详细规范,以及相关的数据格式和命令集合。 此外,文档和源代码可以帮助工程师实现符合ISO-14229标准的诊断工具或ECU,提高汽车诊断系统的质量和效率。源码.zip则是UDS协议栈的代码包。 总之,ISO-14229标准和UDS协议栈提供了一种标准化的、可靠的汽车诊断协议。它们有助于提高汽车技术人员的工作效率,同时减少汽车诊断工具和软件的开发成本。 ### 回答3: ISO-14229是一种用于汽车电子系统的通讯协议。它定义了诊断通信的规范和协议,允许车辆厂商和供应商使用这些规范和协议来开发和测试车载电子控制单元。其中,UDS协议栈是实现ISO-14229的关键技术之一,能够为客户端提供远程访问ECEs的可能性。 ISO-14229规定了接口:UDS(Unified Diagnostic Service),用于与电子控制单元(ECU)之间进行通讯。 UDS协议栈则实现了UDS协议的接口,可以自动进行诊断和测试,发生故障时还能产生错误报告。 相应地, ISO14229文档描述了在ISO14229-1文档中定义的UDS协议的特定应用,与ISO15765-2的特定要求相结合。 它还包括了EVITA Light文档中的安全方面。 源码.zip文件则包含了UDS协议栈的源代码,可以在开发与应用中使用,实现对汽车电子控制单元的简便对话操作。 总之,ISO-14229及其UDS协议栈实现了车载控制电子单元的标准化通讯,可简化车辆诊断和维护过程,提高效率和可靠性。同时,相应的规范、文档和源代码也为相关人员提供了方便和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值