W5500(socket)寄存器使用说明

W5500(socket)寄存器使用说明

2023年7月15日发(作者:)

Socket 端口寄存器

Sn3_MR (Socket n 模式寄存器) [R/W] [0x0000] [0x00]

该寄存器用于配置所有 SOCKET 的选项或协议类型

7 6 5 4 3 2 1 ·0

MULTI/MFEN BCASTB NO/MC/MMB UCASTBMIP6B P3 P2 P1 P0

Sn_MR 描述

位 符号 说明

7 MULTI/MFEN UDP多播模式(P[3:0]=0010)

0:关闭多播 1:开启多播

在MACRAW模式下开启地址过滤(P[3:0]=0100)

0:关闭MAC过滤 1:开启

6 BCASTB MACRAW和UDP模式下的网络阻塞

0:关闭广播阻塞 1:开启

在UDP模式(P[3:0]=0010)可以屏蔽接收广播包在MACRAW模式P[3:0]=0100)同样生效

5 NO/MC/MMB 使用无延时ACK

Use No Delayed ACK

0:关闭无延时ACK选项

1:开启无延时ACK选项

在TCP(P[3:0]=0001)生效

多播

0:使用IGM版本2

1:使用IGM版本1

在UDP模式(P[3:0]=0010)

且MULTI=1时生效

MACRAW模式多播阻塞

在MACRAW P[3:0]=0100)生效。

4 UCASTBMIP6B Ping Block 模式

0:关闭Ping block

1:启用Ping block

如果该位设置为1 ping请求就没有响应

3 P3 协议Protocol

2 P2 P3 P2 P1 P0 含义

1 P1 0 0 0 0 Close

0 P0 0 0 0 1 TCP

0 0 1 0 UDP

0 1 0 0 MACRAW

MACRAW只有在Socket0下才能使用

1 / 10 3n 是 Socket 编号(0,1,2,3,4,5,6,7).n 设置了 SNUM[2:0]控制位集 n is Socket

number (0, 1, 2, 3, 4, 5, 6, 7). n is set ‘SNUM[2:0]’ in Control Bits sets.

Sn_CR (Socket n 配置寄存器) [R/W] [0x0001] [0x00]

该寄存器用于设置 Socket n 的配置命令如 OPEN、CLOSE、CONNECT、LISTEN、END 和

RECEIVE。经 W5500 识别这一命令后,Sn_CR 寄存器会自动清零为 0×00。尽管 Sn_CR 被清零为 0×00,但命令仍在处理中。为了验证该命令是否完成,请检查 Sn_IR 或 Sn_SR 寄存器。

0x01

符号

OPEN

说明

按照 Sn_MR(P3:P0)的协议选择来初始化和打开(open) Socket

n-th。下表显示了Sn_SR 和 Sn_MR的对应值。

Sn_MR(P[3:0])

Sn_MR_CLOSE (‘0000’)

Sn_MR_TCP (‘0001’)

Sn_MR_UDP (‘0010’)

S0_MR_MACRAW (‘0100’)

Sn_SR

SOCK_INIT (0x13)

SOCK_UDP(0x22)

SOCK_MACRAW (0x02)

0x02 LISTEN 该位只在 TCP模式(Sn_MR(P3:Po) = Sn_MR_TCP)下生效。在这种模式下,Socket n被配置为一个TCP服务器,它是等待“TCP客户端”的连接请求(SYN数据包)。该 Sn_SR 寄存器由SocK_INIT改变为SOCK_LISTEN。

当一个 TCP 客户端的连接请求成功后该 Sn_SR 寄存器由SOCK_LISTEN 改变为 SOCK_ESTABBLIESHE. 与此同时Sn_IR(0)会变为‘1’。另一方面,当连接失败时,Sn_IR(3)被设置为'1'. Sn_SR 改变为S0CK_CLOSED。

此模式只适用于 TCP 模式且运行 Socket n 作为 TCP 客户端。通过与存储在目的地址寄存器 (Sn_DIPR) 和端口号寄存器

(sn_DPORT) 中的IP 地址和端口号进行连接,一个连接请求被发送到 TCP 服务器。当一个客户端的连接请求成功后 sn_SR

寄存器改为SOCK_ESTABLIESHED。Sn_IR(0)会变为‘1’。

以下三种情况意味着连接请求失败:

1. ARPto发生超时(Sn_IR(s)=‘1')。因为目的地的 MAC 地址不能通过ARP过程中获取。

2. 当没有收到SYN/ACK数据包,而引起TCPTO(Sn_IR(3))被设置为‘1’时。

3. 当RST数据包而不是SYN/ACK数据包被接收时。

以上三种情况下,Sn_SR会该为SOCK_CLOSED。

只有在TCP模式下有效:

不论“TCP服务器”或“TCP客户端”,都使用DISCON断开。

关闭socket n

Sn_SR改为SOCK_CLOSED。

发送(SEND)Socket n 发送(TX)内存中的所有缓冲数据。

只在UDP模式下有效

只在TCP模式下有效

2 / 10

0x04 CONNECT

0x08 DISCON

0x10

0x20

0x21

Ox22

CLOSE

SEND

SEND_MAC

SEND_KEEP 0x40 RECV 通过使用接收读指针寄存器(Sn_RX_RD)来判定socket n 接收缓存是否完成接收处理。

IR (中断寄存器) [R/W] [0x0015] [0x00]

中断寄存器( IR)指明了中断的状态。 IR 的每一位都是‘0’,直到被主机写为‘1’.

如果 IR 不等于‘0×00’, INTn 引脚将会被拉低。直到其变为‘0×00’时, INTn 才会被 拉高。

7 6 5 4

MP

3 2 1 0

CONFLICT UNREACH PPPoE Reserved Reserved Reserved Reserved

表格IR说明

7

6

符号

CONFLICT

UNREACH

说明

IP冲突:

在收到APR请求时,发现发送方IP于本地IP重复,该位将置‘1’

目标不可抵达:

当接收到ICMP(目的端口不可达)包后,该位置‘1’。

当该位为‘1’时,通过相应的UIPR & UPORTR.可能查询到目标信息。如:IP地址和端口号。

PPPoE连接关闭:

当PPPoE模式下,PPPoE连接断开时,该位生效。

Magic Packet:

当网络唤醒模式启用并通过UDP接收到Magic Packet网络唤醒时,该位生效。

保留位

5

4

PPPoE

MP

3~0

Reserved

Sn_SR (Socket n 状态寄存器) [R] [0x0003] [0x00]

Sn_SR指示了 Socket n 的状态,并根据 Sn_CR 或者一些TCP模式下的特殊控制包,如

SYN,FIN 包而改变。

Sn_SR状态描述

0x00

符号

SOCK_CLOSED

说明

该位指示了Socket n 处于关闭状态,资源被释放。当DICON,CLOSE命令生效或当触发超时中断时,W5500对应的Socket n会无视之前的状态,变为SOCK_CLOSED

该位指示了Socket n端口打开并处于TCP工作模式。当Sn_MR

(P[3:0])=’0001’且OPEN命令生效时,Sn_SR变为SOCK_INIT。之后用户才可以使用LISTEN或CONNECT命令。

该位指示着Socket n工作在TCP服务器模式下,且等待对方(TCP客户端)的连接请求(SYN Packet)。

3 / 10

0x13 SOCK_INIT

0x14 SOCK_LISTEN 当连接请求被成功接收以后,Socket_SR 会变为SOCK_ESTALBLISHED状态。

否则将会在出发TCPt0超时中断之后,变为SOCK_CLOSED状态。

0x17 SOCK_ESTABLISHED 指示了Socket n的连接状态。

SOCK_LISTEN状态下,当TCP服务器处理TCP客户端的SYN请求包或当CONNECT命令配置成功时,变为SOCK_ESTABLISHED。

在此状态下,可以使用SEND或者RECV命令对数据包传输。

指示Socket n 接收到了来自连接对方发来的断开连接请求(FIN packet)。这是一个瓣关闭的状态,可以进行数据传输。若要全部关闭,需要使用DISCON命令。而如果是要关闭Socket,需要使用CLOSE命令。

指示了Socket n 处于UDP模式下

Sn_MR(P[3:0])=’0010’。当Sn_MR(P[3:0])=’0010’且OPEN命令生效时,Sn_SR改变为SOCK_UDP。

不同于TCP模式,在这个模式下,数据包可以在无连接过程的情况下传输。

指示了Socket 0 工作在MACRAW模式下SO_MR(P[3:0])=’0100’且OPEN命令生效时,Sn_SR改变为SOCK_MACRAW.

如UDP模式一样,Socket 0 工作在MACRAW模式下时。也能在无连接过程的情况下,实现MAC数据包(以太网帧)传输

0x1C SOCK_CLOSE_WAIT

0x22 SOCK_UDP

0x02 SOCK_MACRAW

Sn_SR临时状态描述

0x15

符号

SOCK_SYNSENT

说明

指示了Socket n已经发送连接请求(SYN Packet)到对方。他显示了发送CONNECT命令后,Sn_SR从SOCK_INIT到SOCK_ESTABLISHED的临时状态。

如果此时,收到了来自对方的接受连接请求(SYN/ACK

packet)则,变为SOCK_ESTABLISHED.

否则,在TCPt0超时(Sn_IR[TIMEOUT]=’1’)中断之后,转变为SOCK_CLOSED。

指示Socket n 成功的从对方收到了连接请求包(SYN

4 / 10

0x16 SOCK_SYNRECV packet)。

如果Socket n 成功的给对方发送了连接应答(SYN/ACK

packet),将转变为SOCK_ESTABLISHED状态。

否则,在出发超时中断(Sn_IR[TIMEOUT]=’1’)后,变为SOCK_CLOSED。

0x18

0x1A

0x1B

0x1D

SOCK_FIN_WAIT

SOCK_CLOSING

SOCK_TIME_WAIT

SOCK_LAST_ACK

这些状况表示SOCKET n正在关闭。

这显示的是断开连接(主动关闭或被动关闭)的过程。

当断线程序成功完成或TCPTO(Sn_IR(超时)=’1’)发生时,它便会更改为SOCK_CLOSED。

指示了Socket n在被动关闭状态下,正在等待对断开连接请求(FIN packet)做出回应(FIN/ACK packet)。

当Socket n 成功接收到了断开连接请求的回应或出发超时中断,则变为SOCK_CLOSED状态。

Sn_PORT (Socket n 源端口寄存器) [R/W] [0x0004-0x0005] [0x0000]

该寄存器配置了 Socket n 的源端口号。当 Socket n 工作在 TCP 或 UDP 模式下,该寄

存器生效。注意:必须在 OPEN 命令生效前,完成对该寄存器的设置。 例) 如 SOCKET 0

的端口 =5000(0×1388),配置应如下,

0x0004

0x13

0x0005

0x88

Sn_DHAR (Socket n 目的 MAC 地址寄存器) [R/W] [0x0006-0x000B] [0xFFFFFFFFFFFF]

Sn_DHAR 寄存器指示的为:UDP 模式下,使用 Send_MAC 配置命令,配置 Socket n

的目标主机 MAC 地址;或者 CONNECT/SEND 配置命令,ARP 过程获取到的 MAC 地址。

例) 如 Socket 0 的目标 MAC 地址 = .00.01.02.10,配置应如下

0x0006

0x08

0x0007

0xDC

0x0008

0x00

0x0009

0x01

0x000A

0x02

0x000B

0x0A

Sn_DIPR (Socket 目标 IP 地址寄存器) [R/W] [0x000C-0x000F] [0x00000000]

Sn_DIPR 配置或指示的为 Socket n 的目标主机 IP 地址,在 TCP/UDP 模式下生效。

在 TCP 客户端模式下,在 CONNECT 配置命令前,该寄存器设置了 TCP 服务器的 IP

地址。

在 TCP 服务器模式下,他显示了在成功建立连接后,TCP 客户端的 IP 地址;

在 UDP 模式下,他配置了对方主机的 IP 地址以供 SEND 或 SEND_MAC 配置命令后接

收 UDP 包。

例) 如 Socket 0 的目标 IP 地址= 192.168.0.11, 配置应如下,

0x000C

192(0xC0)

0x000D

168(0xA8)

0x000E

0(0x00)

0x000F

11(0x0B)

Sn_DPORT (Socket n 目标端口寄存器) [R/W] [0x0010-0x0011] [0x00]

Sn_DPORT 配置或指示了 Socket n 的目标主机端口号,在 TCP/UDP 模式下生效。

5 / 10 在 TCP 客户端模式下,在 CONNET 配置命令前,该寄存器配置了 TCP Server 监听的 端口号。

在 TCP 服务器模式下,他显示了在成功建立连接后,TCP 客户端的端口号;

在 UDP 模式下,他配置了对方主机的端口号以供 SEND 或 SEND_MAC 配置命令后接收

UDP 包。

例) 如 Socket 0 的目标端口号 = 5000(0×1388) ,配置应如下,

0x0010

0x13

0x0011

0x88

最大分段寄存器[R/W] [0x0012-0x0013] [0x0000]

该寄存器配置或显示了 Socket n 的最大传输单元 MTU(Maximum Transfer Unit)。 在

TCP/UDP 模式下,默认该寄存器设定的最大传输单元生效。

Mode

TCP

UDP

MACRAW

当 Socket n 处于 MACRAW 模式时,由于 MTU 不在内部处理,默认的 MTU 将会生效, 因此,当传输的数据比默认的 MTU 大时,主机需要手动的将数据划分成默认 MTU 大小 单元进行传输。

当 Socket n 处于 TCP/UDP 模式,而传输的数据比 MTU 大时,数据将会被自动的划分 成默认MTU 单元大小传输。

在 UDP 模式下,由于不像 TCP 模式那样涉及到一些连接过程,所以使用了 MTU 配置。 当不同大 小的 MTU 数据传输给对方是时,可能会收到 ICMP 包(MTU 分片)。这样的话

IR(FMTU)置‘1’,对 方的信息如 MTU 大小以及 IP 地址将分别由 FMTUR 和 UIPR 指定。

如果 IR[MTU] = ‘1’,用户不 能发送数据到对方。如果要重新恢复与对方的通讯,可以按 照以下操作:

1. 通过 CLOSED 配置命令关闭 Socket。

2. 设置 Sn_MSS 指定 FMTUR 中的 MTU。

3. 通过 OPEN 配置命令打开 Socket n。

4. 重新与对方通信

例) 如 Socket 0 的 MSS = 1460(0x05B4)

0x0012

0x05

0x0013

0xB4

Normal(MR(PPPoE)=‘0’)

Default MTU

1460

1472

Range

1~1460

1~1472

PPPoE(MR(PPPoE)=‘1’)

Default

1452

1464

1514

Range

1~1452

1~1464

服务类寄存器[R/W] [0x0015] [0x00]

该寄存器设置在 IP 层里 IP header 的 TOS(Type of Service – 服务类型) 字段。它应在执

行 OPEN 命令之前设置。

生存时间寄存器[R/W] [0x0016] [0x80]

6 / 10 该寄存器设置在 IP 层里 IP 头的 TTL(Time-To-Live – 生存时间) 字段。它应在执行OPEN

命令之前设置。

接收缓存大小寄存器[R/W] [0x001E] [0x02]

Sn_RXBUF_SIZE 配置了 Socket n 的接收缓存大小。Socket n 接收缓存区大小可以配置 为

1,2, 4,8 和 16Kbytes。如果配置为其他大小,则 W5500 不能正常的从对方主机接 收数据。

即使 Socket n 的接收缓存大小初始默认为 2Kbytes。用户仍然可以使用 Sn_RXBUF_SIZE

重新定义。但是所有 Socket 接收缓存(Sn_RXBUF_SIZE)的总大小不能超16Kbytes。否则,将会使得接收异常。

当所有的 Sn_RXBUF_SIZE配置完成后,就会按照 Socket0 到 7 的顺序依次

将16Kbytes 的接收内存分配给各个 Socket 作为接收缓存使用。

不论 Socket n 的接收缓存配置的大小如何,都可以被 16 位的偏移地址寻址找到。(寻址范围: 0×0000 到 0xFFFF)

Value(dec) 0

Buffer size 0KB

1

1KB

2

2KB

4

4KB

8

8KB

16

16KB

例) Socket 0 RX Buffer Size = 8KB

0x08

0x001E

发送缓存大小寄存器[R/W] [0x001F] [0x02]

Sn_TXBUF_SIZE 配置了 Socket n 的发送缓存大小。Socket n 发送缓存区大小可 以配置为

1,2,4,8 和 16Kbytes。如果配置为其他大小,则 W5500 不能正常给对 方主机发送数据。

即使 Socket n 的发送缓存大小初始默认为 2Kbytes。用户仍然可以使用 Sn_RXBUF_SIZE

重新定义。但是所有 Socket 发送缓存的总大小不能超过 16Kbytes。 否则,将会 使得发送异常。

当所有的 Sn_TXBUF_SIZE 配置完成后,就会按照 Socket 0 到 7 的顺序依次将 16Kbytes

的发送内存分配给各个 Socket 作为发送缓存使用。

不论 Socket n 的接发送存配置的大小如何,都可以被 16 位的偏移地址寻址找到。 (寻址范围:0×0000 到 0xFFFF)

Value(dec) 0

Buffer size 0KB

1

1KB

2

2KB

4

4KB

8

8KB

16

16KB

例) Socket 0 TX Buffer Size = 4KB

0x001F

0x04

Sn_TX_FSR (Socket n 空闲发送缓存寄存器) [R] [0x0020-0x0021] [0x0800]

Sn_TX_FSR显示了Socketn发送缓存的空闲空间大小。该寄存器初始化配 置为

7 / 10 Sn_TXBUF_SIZE 大小。当传输数据比 Sn_TX_FSR 大时,将不能保存到 Socket n 的发送 缓存中。

因为多出来的数据会覆盖之前未传输完成的数据。因此在向 Socket n 发送缓 保存数据之前,需要先检

查一下数据大小是否等于或小于其剩余空间,然后再保存数据 到发送缓存并通过

SEND/SEND_MAC

配置命令发送。如果数据比检查到的剩余空间大, 需要将数据划分成小于或等于剩余空间的大小之后,

再保存数据到 Socket n 发送缓存。

如果 Sn_MR(P[3:0])不是 TCP 模式(‘0001’), W5500 将计算发送写指针(Sn_TX_WR)和Socket n 发送读指针之间的空间,并自动将数据划分成相应大小。如果 Sn_MR(P[3:0])是

TCP 模式(‘0001’), W5500 将计算发送写指针(Sn_TX_WR)与内 部 ACK 指针(指示已经从连接对方接收数据的节点位置)之间的空间。

例) 如 2048(0×0800) 在 S0_TX_FSR 时,

例) In case of 2048(0×0800) in S0_TX_FSR,

0x0020

0x08

0x0021

0x00

Sn_TX_RD (Socket n 发送读指针寄存器) [R] [0x0022-0x0023] [0x0000]

Sn_TX_RD 寄存器可以通过 OPEN 配置命令进行初始化。然而,如果 Sn_MR(P[3:0])是TCP

模式(‘0001’),该寄存器将会在 TCP 连接期间,重新进行初始化。 该寄存器初始化之后,会根据SEND 配置命令自增。SEND 配置命令传输的是 Socket n发送缓存中,当前

Sn_TX_RD 到 Sn_TX_WR 之间保存的数据。在传输完保存的数据之后,SEND 配置命令会使得 Sn_TX_RD 等于 Sn_TX_WR。当 Sn_TX_RD 增加的值超出最大值0xFFFF(大于 0×10000 并产生进位), Sn_TX_RD 会忽略进位,仅使用低 16 位的值。

Sn_TX_WR (Socket n 发送写指针寄存器) [R/W] [0x0024-0x0025] [0x0000]

Sn_TX_WD 寄存器可以通过 OPEN 配置命令进行初化。然而,如果 Sn_MR(P[3:0])是TCP 模式(‘0001’),该寄存器将会在 TCP 连接期间,重新进行初始化。 该寄存器需要读取或更新如下。

1. 读取发送缓存中将要保存传输数据的首地址。

2. 从 Socket n 的发送缓存对应的首地址开始,保存需要传输的数据;

3. 在保存完传输数据之后,将 Sn_TX_WR 的值增加到传输数据大小。如果增加后, 超过最大值

0xFFFF(比 0×10000 大且产生进位),那么将自动忽略进位,并自动 更新为低 16 位的值。

4. 通过使用 SEND 命令发送保存在 Socket n 发送缓存中的数据。

Sn_RX_RSR (Socket n 空闲接收缓存寄存器) [R] [0x0026-0x0027] [0x0000]

Sn_RX_RSR 显示了 Socket n 接收缓存中已接收和保存的数据大小。Sn_RX_RSR 不会超过

n_RXBUF_SIZE 大小,且计算的为 Socket n 接收写指针(Sn_RX_WR)和 Socket n 接收读指针之间的空间大小。 例) 如 2048(0x0800) 在 S0_RX_RSR 时,

0x0026

0x08

8 / 10

0x0027

0x00

Sn_RX_RD (Socket n 接收读指针寄存器) [R/W] [0x0028-0x0029] [0x0000]

Sn_RX_RD 寄存器可以通过 OPEN 配置命令进行初始化。请确保该寄存器按照以下步 骤读取并更

新:

1. 读取保存在接收缓存中数据的首地址;

2. 从保存在 Socket n 接收缓存中数据的首地址开始读取数据;

3. 在读取完毕接收数据,将 Sn_RX_RD 的值更新为所读数据大小。如果增加后的值 超过最大值0xFFFF,即超过 0×10000 并产生进位,将会忽略进位,只取低 16 位 值。

4. 在接收到 RECV 命令后,将更新后的 Sn_RX_RD 值告知 W5500.

例) 如 2048(0x0800) 在 S0_RX_RD 时,

0x0028

0x08

0x0029

0x00

Sn_RX_WR (Socket n 接收写指针寄存器) [R] [0x002A-0x002B] [0x0000]

Sn_RX_WR 寄存器可以通过 OPEN 配置命令进行初始化。并且随着数据接收自动增加。 如果Sn_RX_WR 的值增长到超过最大值 0xFFFF(即超过 0×10000 并产生进位) ,那么将自动忽略进位,并自动更新为低 16 位的值。

例) 如 2048(0×0800) 在 S0_RX_WR 时,

0x002A

0x08

0x002B

0x00

Sn_RX_WR (Socket n 接收写指针寄存器) [R] [0x002A-0x002B] [0x0000]

Sn_RX_WR 寄存器可以通过 OPEN 配置命令进行初始化。并且随着数据接收自动增加。

如果

Sn_RX_WR 的值增长到超过最大值 0xFFFF(即超过 0×10000 并产生进位),那么 将自动忽略进位,并自动更新为低 16 位的值。 例) 如 2048(0×0800) 在 S0_RX_WR 时,

0x002A

0x08

Sn_IMR (Socket n 中断屏蔽寄存器) [R/W] [0x002C] [0xFF]

Sn_IMR 负责屏蔽 Socket n 的中断。每一位都对应了 Sn_IR 寄存器的相应位。Socket n 的中断触发 并且 Sn_IMR 的对应位为‘1’时,Sn_IR 的对应位变为‘1’。如果 Sn_IMR 和 Sn_IR

的对应位均为‘1’且 IR 寄存器的相应为‘1’,INTn 引脚便会拉低并使主机 产生中断。

7 6 5 4 3 2 1

DISCON

0

CON Reserved Reserved Reserved SEND_OK TIMEOUT RECV

0x002B

0x00

Sn_FRAG (Socket n 分段寄存器) [R/W] [0x002D-0x002E] [0x4000]

9 / 10 它设置了 IP 层中 IP 报头的分段字段。 例) Sn_FRAG0 = 0×4000 (不要分段)

0x002D

0x00

Sn_KPALVTR (Socket 在线时间寄存器) [R/W] [0x002F] [0x00]

Sn_KPALVTR 配置了 SOCKET n 的‘KEEP ALIVE(KA)’在线验证心跳包传输时间。他只在 TCP

模式下生效,在其他模式下将会被忽略。单位时间为 5 秒。

KA 包会在 Sn_SR 变为 SOCK_ESTABLISHED 且与对方至少进行过一次收或发的通讯后 进行传 输。如果‘Sn_KPALVTR > 0’,W5500 在一定时间周期会自动传输 KA 包以检查 TCP 的连接状态(自 动在线验证)。如果‘Sn_KPALVTR = 0’,将不会启动自动在线验 证,主机可以通过 SEND_KEEP 配 置命令发送 KA 包(手动在线验证)。在‘Sn_KPALVTR> 0’时,将会无视手动在线验证。

例)Sn_KPALVTR = 10(会每 50 秒自动发送一次在线验证包)

0x002F

0x0A

0x002E

0x00

(范文素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

10 / 10

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689406838a242964.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信