RTL8305NB交换机芯片SMI接口通信与寄存器详解

13 篇文章 2 订阅
订阅专栏
11 篇文章 4 订阅
订阅专栏
8 篇文章 3 订阅
订阅专栏

前言

RTL8305NB是一款5口10/100M的以太网交换机芯片。在实际应用的过程中,我们可能需要获取到交换机芯片每个端口的状态,比较坑的是原厂提供的数据手册中根本没有提到任何SMI管理接口配置说明。原理图如下图所示:
在这里插入图片描述

RTL8305NB寄存器详解

好在PHY是 IEEE802.3 中定义的一个标准模块,而IEEE802.3 又定义了地址为0-15 这16个寄存器的为基本寄存器,也就是说不同厂商这前16个寄存器定义是一致的。
在这里插入图片描述
查询相关资料得知,在Status register(状态寄存器)中bit2就是我们想要的link状态:
在这里插入图片描述
RTL8305NB五口交换机芯片的五个端口,我们可以将其理解为拥有5个PHY,每个端口对应的这五个PHY的地址不同,读取这五个PHY的状态寄存器,即可获取到每个端口的link状态。经过测试程序遍历读取PHY地址0-8的状态寄存器,得出P0-P4的PHY地址并没有按照0-4的顺序对应。
在这里插入图片描述
其端口与PHY地址对应关系如下:

端口PHY地址
P00x00
P10x02
P20x05
P30x06
P40x07

这也与另一篇讲RTL8305NB寄存器文章描述的对应关系一致:
https://blog.csdn.net/laoguanhua/article/details/81241289

更多寄存器定义可参考: https://blog.csdn.net/wuheshi/article/details/79085546

光口配置

RTL8305NB芯片默认是电口模式,但其实它也是支持光口模式的。前面说了寄存器地址0-15是基本寄存器,而地址16-31的寄存器则是留给芯片制造商自由定义。但现在芯片功能很强大,32个寄存器远远不够用,于是厂家就想出办法,使用page的方式来扩展。该芯片将端口切换成光口模式,就涉及到page的切换。
在这里插入图片描述
从上述文档可以得知,PHY地址8的寄存器31,就是Page切换的地址,往该地址写入0x8000即可切换到PHY page。
切到PHY page后,将寄存器28的bit5置高即可将端口配置为光口模式。

如下为将交换机芯片的PORT1和PORT2配置为光口的示例代码:

#define PORT1_PHY_ADDR 0x02  // SFP Port1 PHY地址
#define PORT2_PHY_ADDR 0x05  // SFP Port2 PHY地址

void switch_fiber_port_init(void)
{
    unsigned short data = 0;
    smi_reg_write(0x08, 0x1F, 0x8000);         // 切换Page至PHY page
    smi_reg_write(PORT1_PHY_ADDR, 0x1F, 0x00); // 设置Port1为光口
    data = smi_reg_read(PORT1_PHY_ADDR, 0x1C); // 读出寄存器28原始状态
    data |= (0x01 << 5);// 将bit5置高
    smi_reg_write(PORT1_PHY_ADDR, 0x1C, data); // 将修改后的值写入寄存器

    smi_reg_write(PORT2_PHY_ADDR, 0x1F, 0x00); // 设置Port2为光口
    data = smi_reg_read(PORT2_PHY_ADDR, 0x1C); // 读出寄存器28原始状态
    data |= (0x01 << 5);// 将bit5置高
    smi_reg_write(PORT2_PHY_ADDR, 0x1C, data); // 将修改后的值写入寄存器
    smi_reg_write(0x08, 0x1F, 0x0); // 切回MAC Page
}

注意: RTL8305NB虽然支持光口,但是只能支持100M光口。而市面上大多数光口交换机都是千兆起步,且存在不兼容100M光口的情况,所以在调试或实际项目使用时,需要选用支持100M光口的交换机。目前测试了三款光口交换机,支持情况如下:

品牌型号是否支持百兆光口
华为数通智选S5735-L8T4X-A1不支持
FlyinFLY-IMC-2F8TG支持
FlyinFLY-IMC-2F4TG-WG不支持

GPIO模拟SMI总线通讯示例代码

如下为GD32F4xx通过GPIO模拟MDIO/MDC与读写RTL8305NB交换机芯片寄存器示例代码,延时函数、GPIO初始化、输入输出控制需要自行修改后使用。
smi.c示例代码:

#include <stdio.h>
#include "los_tick.h"
#include "gd32f4xx_gpio.h"
#include "rtl8305nb_smi.h"

static void MDC_OUT(void);
static void MDIO_OUT(void);
static void MDIO_IN(void);
static void MDC_H(void);
static void MDC_L(void);
static int GET_MDIO(void);
static void SET_MDIO(int val);

/* 设置MDC为输出引脚,在MDC输出时钟之前设置 */
static void MDC_OUT(void)
{
    gpio_mode_set(SMI_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MDC_PIN);
    gpio_output_options_set(SMI_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, MDC_PIN);
}

/* 设置MDIO的gpio引脚为输出引脚 */
static void MDIO_OUT(void)
{
    gpio_mode_set(SMI_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MDIO_PIN);
    gpio_output_options_set(SMI_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, MDIO_PIN);
}

/* 设置MDIO的gpio引脚为输入引脚 */
static void MDIO_IN(void)
{
    gpio_mode_set(SMI_GROUP, GPIO_MODE_INPUT, GPIO_PUPD_NONE, MDIO_PIN);
}

/* MDC输出高电平,在MDC设置为输出后调用 */
static void MDC_H(void)
{
    gpio_bit_set(SMI_GROUP, MDC_PIN);
}

/* MDC输出低电平,在MDC设置为输出后调用 */
static void MDC_L(void)
{
    gpio_bit_reset(SMI_GROUP, MDC_PIN);
}

/* 获得MDIO的数据,只获得一个bit */
static int GET_MDIO(void)
{
    return gpio_input_bit_get(SMI_GROUP, MDIO_PIN);
}

/* 设置MDIO的数据,一个bit */
static void SET_MDIO(int val)
{
    if (val != 0) {
        gpio_bit_set(SMI_GROUP, MDIO_PIN);
    } else {
        gpio_bit_reset(SMI_GROUP, MDIO_PIN);
    }
}

/* MDIO发送一个bit的数据,MDIO必须已经被配置为输出 */
static void mdio_bb_send_bit(int val)
{
    MDC_OUT();
    SET_MDIO(val);
    LOS_UDelay(MDIO_DELAY);
    MDC_H();
    LOS_UDelay(MDIO_DELAY);
    MDC_L();
    // LOS_UDelay(MDIO_DELAY);
}

/*  MDIO 获取一个bit的数据,MDIO必须已经被配置为输入. */
static int mdio_bb_get_bit(void)
{
    int value;

    MDC_OUT();
    LOS_UDelay(MDIO_DELAY);
    MDC_H();
    LOS_UDelay(MDIO_READ_DELAY);
    value = GET_MDIO();
    //  LOS_UDelay(MDIO_DELAY);
    MDC_L();
    return value;
}

/*
 *  MDIO发送一个数据,MDIO 必须被配置为输出模式.
 *  value:要发送的数据
 *  bits:数据的位数
 *
 *  */
static void mdio_bb_send_num(unsigned int value, int bits)
{
    int i;
    MDIO_OUT();
    for (i = bits - 1; i >= 0; i--)
        mdio_bb_send_bit((value >> i) & 1);
}

/*
 *  MDIO获取一个数据,MDIO 必须被配置为输入模式.
 *  bits:获取数据的位数
 *
 *  */
static int mdio_bb_get_num(int bits)
{
    int i;
    int ret = 0;
    for (i = bits - 1; i >= 0; i--) {
        ret <<= 1;
        ret |= mdio_bb_get_bit();
    }

    return ret;
}

/*  Utility to send the preamble, address, and
 *   register (common to read and write).
 */
static void mdio_bb_cmd(int op, int phy, int reg)
{
    int i = 0;
    MDIO_OUT(); //设置MDIO引脚为输出引脚

    /*发送32bit的1,这个帧前缀域不是必须的,某些物理层芯片的MDIO操作就没有这个域*/
    for (i = 0; i < 32; i++)
        mdio_bb_send_bit(1);

        /* 发送开始位(01),和读操作码(10),写操作码(01)
         * Clause 45 操作,开始位是(00),(11)为读,(10)为写
         */

#if MDIO_C45_TEST
    mdio_bb_send_bit(0);
    if (op & MDIO_C45)
        mdio_bb_send_bit(0);
    else
        mdio_bb_send_bit(1);

#else
    mdio_bb_send_bit(0);
    mdio_bb_send_bit(1);

#endif
    mdio_bb_send_bit((op >> 1) & 1);
    mdio_bb_send_bit((op >> 0) & 1);

    mdio_bb_send_num(phy, 5);
    mdio_bb_send_num(reg, 5);
}

static int mdio_bb_cmd_addr(int phy, int addr)
{
    unsigned int dev_addr = (addr >> 16) & 0x1F;
    unsigned int reg = addr & 0xFFFF;

    mdio_bb_cmd(MDIO_C45_ADDR, phy, dev_addr);

    /*  send the turnaround (10) */
    mdio_bb_send_bit(1);
    mdio_bb_send_bit(0);

    mdio_bb_send_num(reg, 16);

    MDIO_IN();
    mdio_bb_get_bit();

    return dev_addr;
}

void mdio_set_turnaround(void)
{
    int i = 0;
    MDIO_IN();
    MDC_OUT();
    for (i = 0; i < 1; i++) {
        LOS_UDelay(MDIO_DELAY);
        MDC_H();
        LOS_UDelay(MDIO_DELAY);
        MDC_L();
    }
}

unsigned int smi_reg_read(int phy, int reg)
{
    unsigned int ret, i;

#if MDIO_C45_TEST
    /* 寄存器是否满足有C45标志 */
    if (reg & MII_ADDR_C45) {
        reg = mdio_bb_cmd_addr(phy, reg);
        mdio_bb_cmd(MDIO_C45_READ, phy, reg);
    } else
        mdio_bb_cmd(MDIO_READ, phy, reg);
#else
    mdio_bb_cmd(MDIO_READ, phy, reg);
#endif

    MDIO_IN();
    // mdio_set_turnaround();
#if 1
    /*  check the turnaround bit: the PHY should be driving it to zero */
    if (mdio_bb_get_bit() != 0) {
        /* PHY didn\'t driver TA low -- flush any bits it may be trying to send*/
        for (i = 0; i < 32; i++)
            mdio_bb_get_bit();
        // bios_log("PHY didn\'t driver TA low! \r\n");
        return 0xFFFF;
    }
#endif
    ret = mdio_bb_get_num(16);
    mdio_bb_get_bit();
    return ret;
}

int smi_reg_write(unsigned int phy, unsigned int reg, unsigned int val)
{
#if MDIO_C45_TEST
    if (reg & MII_ADDR_C45) {
        reg = mdio_bb_cmd_addr(phy, reg);
        mdio_bb_cmd(MDIO_C45_WRITE, phy, reg);
    } else
        mdio_bb_cmd(MDIO_WRITE, phy, reg);
#else
    mdio_bb_cmd(MDIO_WRITE, phy, reg);
#endif

#if 1
    /*  send the turnaround (10) */
    mdio_bb_send_bit(1);
    mdio_bb_send_bit(0);
#else
    mdio_set_turnaround();
#endif
    mdio_bb_send_num(val, 16);

    MDIO_IN();
    // mdio_bb_get_bit();
    return 0;
}

int smi_init(void)
{
    gpio_mode_set(SMI_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MDC_PIN);
    gpio_output_options_set(SMI_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, MDC_PIN);

    gpio_mode_set(SMI_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MDIO_PIN);
    gpio_output_options_set(SMI_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, MDIO_PIN);

    gpio_mode_set(PORT_LED_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, PORT1_LED);
    gpio_output_options_set(PORT_LED_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, PORT1_LED);

    gpio_mode_set(PORT_LED_GROUP, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, PORT2_LED);
    gpio_output_options_set(PORT_LED_GROUP, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, PORT2_LED);

    gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_15);
}

smi.h示例代码:

#ifndef __SMI_H__
#define __SMI_H__

#define PORT1_PHY_ADDR 0x02  // SFP Port1 PHY地址
#define PORT2_PHY_ADDR 0x05  // SFP Port2 PHY地址
#define STATUS_REG_ADDR 0x01 // 状态寄存器地址

#define SMI_GROUP GPIOG
#define MDC_PIN GPIO_PIN_9
#define MDIO_PIN GPIO_PIN_10

#define PORT_LED_GROUP GPIOD
#define PORT1_LED GPIO_PIN_0
#define PORT2_LED GPIO_PIN_11

#define MDIO_DELAY 10      // us
#define MDIO_READ_DELAY 10 // us

/*  Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
 *   IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips.
 */
#define MII_ADDR_C45 (1 << 30)

#define MDIO_READ 2
#define MDIO_WRITE 1

#define MDIO_C45 (1 << 15)
#define MDIO_C45_ADDR (MDIO_C45 | 0)
#define MDIO_C45_READ (MDIO_C45 | 3)
#define MDIO_C45_WRITE (MDIO_C45 | 1)

#define MDIO_C45_TEST 1

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

int smi_init(void);

unsigned int smi_reg_read(int phy, int reg);

int smi_reg_write(unsigned int phy, unsigned int reg, unsigned int val);

#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __SMI_H__ */
RTL8305NB设计原理图
05-12
5端口百兆交换机RTL8305NB设计原理图
使用RTL8305NB的一款3口交换机
11-17
使用RTL8305NB的一款3口交换机,文档包括原理图,PCB设计文件(PADS格式),CAM输出文件,BOM元件明细,已通过制作样品测试,能满足基本要求。 参照源厂原理可最多可做5口交换机
RTL8363NB 技术手册:深入解析与应用指南
最新发布
gitblog_09799的博客
09-06 428
RTL8363NB 技术手册:深入解析与应用指南 rtl8363nb中英文技术手册PDF.zip项目地址:https://gitcode.com/open-source-toolkit/8c5d8 项目介绍 在硬件开发和网络工程领域,了解芯片的详细规格和功能特性是至关重要的。RTL8363NB 中英文技术手册 PDF 项目正是为此而生。该项目提供了 RTL8363NB 芯片的完整技术手册,涵盖了...
RTL8305NB原理图.pdf
06-27
RTL8305NB原理图,典型电路,可自动设定是100Mbps或10Mbps、全双工或半双工和流量控制;并提供链路状态、激活状态、碰撞、全双工及 10Mbps或100Mbps速度的指示灯功能。
RTL8305NB _RTL8305n资料_RTL8305nb原理图_RTL8305DATA_RTL8305NB_数据手册
09-11
RTL8305N数据手册,官方资料,内容翔实
RTL8305原理图
03-02
RTL8305原理图,交换机方案,
交换机芯片RTL8305NB
08-16
交换机芯片8305NB的设计参考,原理图可以直接拿来用,网络稳压器和网口部分需要根据自己需要来修改。
RTL8305NB原理图
11-12
5口百兆交换机原理图,RTL8305NB原理图 RTL8305NB原理图
Marvell交换机芯片SMI接口读写协议
星沉地动
12-14 3335
Marvell的88E6XXX系列交换机芯片基本都提供SMI(Serial Management Interface)接口SMI接口使用2线串行通信,一个MDC提供时钟,一个MDIO为双向数据引脚。
RTL8305NB数据手册
03-28
网口hub数据手册低,成本方案,芯片体积小,功耗低,单3.3v供电,5个rj45口。里面有详细的介绍,寄存器配置,硬件参数,原理图,变压器接法特别是抽头的接法电气参数等
网口扩展芯片RTL8305NB
04-06
网口扩展芯片RTL8305NB
RTL8305NB-CG_datasheet.pdf
05-13
RTL8305NB-CG最新版本手册,Realtek最新的5口傻瓜交换机芯片RTL8305NB, 专用开发设计使用。
RTL8305NB-CG_Datasheet
11-12
The RTL8305NB is a 5-port 10/100M Ethernet switch
Realtek RTL8305NB-CG-Datasheet-1.0.pdf
03-14
Realtek瑞昱最新的5口傻瓜交换机芯片,RTL8305NB做的3口百兆交换机DATASHEET,原理图、PCB图,以此为参考可以做5口交换机!Realtek瑞昱芯片现货代理,世联芯科技深圳现货,欢迎咨询!
RTL8305SC的部分原理图
07-15
RTL8305SC的部分原理图,一直想找全套的,一直没找到,希望能够帮助到你。
RTL8305NB.rar
05-10
资料包含一份下载自http://bbs.ntpcb.com/read.php?tid=59845的RTL8305NB原理图,PCB图片文件以及RTL8305NB英文版数据手册
RTL8305NB寄存器配置光纤模式交换机
mule666的博客
06-09 1577
RTL8305NB寄存器资料 配置光纤模式 配置SFP光纤
RTL8305NB寄存器配置程序
06-07
2. **协议栈与驱动**:在单片机中,通常需要一个驱动层来处理与RTL8305NB通信,这可能涉及到SPI、I2C或GPIO等接口。驱动程序会提供API,使得上层应用程序可以方便地读写寄存器。 3. **端口配置**:RTL8305NB支持...
RTL8305NB工业级百兆4端口 AI poe交换机
andylau19890426的博客
11-11 3507
rtl8305nb交换机软件
08-25
RTL8305NB是一种高性能的交换机芯片,具有先进的软件功能。它的软件包括物理层驱动程序、交换机芯片的控制程序和管理界面。 首先,RTL8305NB交换机软件具备强大的物理层驱动程序,可以驱动和管理不同类型的网络接口,如RJ45以太网接口和SFP光纤接口。通过这些驱动程序,交换机可以实现网络设备之间的连接和通信。 其次,RTL8305NB交换机软件还包括交换芯片的控制程序。该控制程序负责实现交换机的核心功能,如流量控制、地址学习、转发和过滤等。它可以监控网络中的数据流量,并根据设置的规则进行数据包的处理和转发。此外,控制程序还支持虚拟局域网(VLAN)功能,可以将不同的网络设备划分为不同的虚拟网络,实现安全和高效的数据传输。 最后,RTL8305NB交换机软件还提供了管理界面,方便用户进行交换机的配置和管理。通过管理界面,用户可以进行端口的配置和监控、VLAN的设置、QoS(服务质量)的调整等。同时,软件还提供了故障诊断和日志记录功能,帮助用户及时发现和解决网络问题。 总之,RTL8305NB交换机软件具备丰富的功能和易用的管理界面,可以帮助用户建立强大而可靠的网络环境。无论是企业、学校还是个人用户,都可以通过使用RTL8305NB交换机软件来实现高速、稳定和安全的数据传输。
写文章

热门文章

  • sqlite3数据库提示database disk image is malformed 解决办法 55450
  • PyCharm Community安装与配置 47479
  • WSL2启动时提示:参考的对象类型不支持尝试的操作 33719
  • windows使用cmd(dos命令)映射网络驱动器 32830
  • Qt QLineEdit控件textChanged信号和textEdited信号区别 32051

分类专栏

  • 知识积累 13篇
  • OpenHarmony 15篇
  • qnx 2篇
  • 笔记 3篇
  • 音视频处理 8篇
  • linux驱动学习 8篇
  • android系统学习 5篇
  • 第三方库学习 5篇
  • Django框架学习
  • 前端学习 15篇
  • JavaScript学习 7篇
  • HTML学习 9篇
  • Crank Storyboard学习
  • QT学习 32篇
  • C++学习 14篇
  • C语言学习 42篇
  • Opencv学习 3篇
  • 单片机学习 11篇
  • 电路设计学习 2篇
  • Linux基础学习 83篇
  • MQTT学习 3篇
  • Http学习 6篇
  • 常用算法学习 5篇
  • 数据库学习 15篇
  • 代码版本管理 8篇
  • 通信协议 8篇
  • 工具使用 49篇
  • 工具链接备忘 3篇
  • Python学习 14篇
  • Windows 学习 18篇
  • 计算机基础知识 19篇

最新评论

  • 带openssl交叉编译curl库

    yume_2017: 更正:增加LDFLAGS="-Wl,-rpath-link=/home/libcurl/sysroot/lib"解决。 example: pushd curl-7.73.0 CC=${CROSS_COMPILE}gcc LD=${CROSS_COMPILE}ld AR=${CROSS_COMPILE}ar NM=${CROSS_COMPILE}nm AS=${CROSS_COMPILE}as LDFLAGS="-Wl,-rpath-link=/home/libcurl/sysroot/lib" LIBS="-ldl" ./configure --disable-static --enable-shared --with-ssl=${PREFIX} --prefix=${PREFIX} --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --without-libidn2 make CC=${CROSS_COMPILE}gcc LD=${CROSS_COMPILE}ld AR=${CROSS_COMPILE}ar NM=${CROSS_COMPILE}nm AS=${CROSS_COMPILE}as install popd

  • OpenHarmony兼容性平台认证接入

    oTingFengXiYu: 评测流程呢?一下子跳到终点?

  • 自制J-Flash烧录工具——Qt调用jlinkARM.dll方式

    bogeboge1: 修改了下1M的限制,但下载固件超过1M好像有点问题。想问一下代码里为什么强调要设置1M的判断。。

  • Source Insight 4.0安装破解及简单使用

    weixin_52293666: 我也是打不开

  • hi3861 Linux开发环境搭建

    fangye945a: 在最前面 兄弟

大家在看

  • 8.网工入门篇--------VLAN的原理和配置介绍 446
  • [java毕业设计]免费分享一套SpringBoot+Vue大学生(校园)志愿者管理系统【论文+源码+SQL脚本+PPT】,帅呆了~~
  • Java基础入门
  • 19.JVM调优常量池详解 1232
  • 18.JVM调优工具详解 2009

最新文章

  • keepalived交叉编译
  • iperf3交叉编译
  • 基于GD32F470的mbedtls 3DES算法测试
2024年1篇
2023年6篇
2022年24篇
2021年45篇
2020年52篇
2019年89篇
2018年30篇
2017年1篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家杭州市德清商场美陈布置多少钱中顺雕塑玻璃钢河源玻璃钢果蔬雕塑辽源玻璃钢景观雕塑朔州玻璃钢雕塑收费标准平顶山卡通玻璃钢雕塑哪家好六安户内玻璃钢雕塑陈村玻璃钢人物雕塑工艺精湛商场美陈棒棒糖厦门商场创意商业美陈宁波红色革命主题玻璃钢雕塑娄底玻璃钢雕塑厂扬州小型玻璃钢花盆南京知名玻璃钢雕塑性价比高玻璃钢动物牛雕塑哪家合适徐州玻璃钢广场雕塑厂家古代玻璃钢雕塑推荐厂家工艺品雕塑摆件玻璃钢小工艺品湖南株洲玻璃钢雕塑厂广东动物玻璃钢雕塑价格上海正宗玻璃钢雕塑信息推荐重庆佛像玻璃钢雕塑哪家便宜开远市玻璃钢雕塑价钱金昌玻璃钢景观雕塑公司泰州玻璃钢雕塑价格淮北玻璃钢雕塑制造厂浦口春节商场美陈上街区玻璃钢智能雕塑揭阳玻璃钢长颈鹿雕塑大型玻璃钢雕塑价格行情香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化