找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13041|回复: 22

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

[复制链接]
发表于 2006-7-11 19:52:22 | 显示全部楼层 |阅读模式
我的实达2110-ehr v2.10B版,由于按复位键的时候操作错误,导致无法工作,加电只有POWER及LAN灯常亮,看了论坛上相关的helium 100芯片的恢复办法,及Kellson的相关贴子,经过不懈的努力,终于试出那四口的接线.我用了一根废并口鼠标的线,这四线的颜色分别为:兰,白,黄,橙,相应的并口顺序号:2,3,5,7. 此线与板的接法是:
1:兰 对应 2
2:黄 对应 5
3:白 对应 3
4:橙 对应 7
当然,这个接法我也没有办法判断是不是正确了,但至少在超级终端下可以看到以下信息了.

NBfs6Z
PP Boot 1.05 (12 March 2002)
Copyright (c) 2001 START Network Ltd
SDRAM size = 0x800000
i100%%
*** INCOMPATIBLE PP CODE AND NP CODE!
*** SHARED STRUCTURE VERSIONS: PP 38, NP 37
*** SHARED STRUCTURE SIZES:    PP 604, NP 600
*** CHECK CONSISTENCY OF PP AND NP IMAGES
<<< atmos_exit >>>
Press ';R'; to reboot
问题:现在我在超级终端下应该如何操作才可以将FIREWARE恢复回去,这FIREWARE文件我问星网数码论坛的版主要来了.见附件(1024K,上传失败了)[br][br]-=-=-=- 以下内容由 天涯2007年08月25日 00:15am 时添加 -=-=-=-
植物猫的 star 2110-eh v 2.10b 给搞定了,现在它还魂了

开心一下,总算把一年前刷成植物猫的 star 2110-eh v 2.10b 给搞定了,现在它还魂了.哈哈.
网上查资料,自已动手测试,死猫当成活猫医,总算弄好了. 这猫是我上宽带的时候自已买的,500多元啊,虽然很慢,很古老了,留着纪念一下的份了.[br][br]-=-=-=- 以下内容由 天涯2007年08月25日 00:16am 时添加 -=-=-=-
发表于 2006-7-12 01:03:09 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

你刷新了错误的PP和NP系统文件进去?
输入R它是不是重启了?之后出现一样的东西?
按其他键的反应呢?
看看能不能用Xmodem协议发送那个正确的固件进去?
 楼主| 发表于 2006-7-12 07:51:21 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

INCOMPATIBLE PP CODE AND NP CODE!
是的,楼上的版主大大,我测试了您提供的那个71238a11.rar文件,刷到一半就提示image文件不对,当时我以为没有刷新成功,应该没有刷东西进去,并且当时我以telnet的方式还可以登录,并且进去flashfs看了ls的目录,NPimage及image文件的属性是fix的,所以我就没有引起注意,直到看了你的回复,我才去查这个incompatible单词的意思,才明白这个是"不兼容"的意思,看来这回是挂了. :(
按R键没有重启,按住SPACE键加电,它的提示还是一样的.我试了用XMODEM协议,没有办法重新传送正确的固件进去,这回是不是真的没有得救了?
附后,我找来的一段资料
Software Driver
SST39VF080
8 Mbit Multi-Purpose Flash
May 2003

ABOUT THE SOFTWARE
This application note provides a software driver example for 39VF080 8 Mbit
Multi-Purpose Flash, that can be used in any microprocessor based system.
Software driver example routines provided in this document utilize high-level
"C" programming language for broad platform support. In many cases, software
driver routines can be inserted "as is" into the main body of code being
developed by the system software developers. Extensive comments are included
in each routine to describe the function of each routine. The software driver
routines in "C" can be used with many microprocessors and microcontrollers.
ABOUT THE SST39VF080
Companion product datasheet for the 39VF080 should be reviewed in conjunction
with this application note for a complete understanding of the device.
The C code in this document contains the following routines, which are listed
in this order:
Name                    Function
------------------------------------------------------------------
Check_SST_39VF080       Check manufacturer and device ID
CFI_Query               CFI Query Entry/Exit command sequence
Erase_One_Sector        Erase a sector of 4096 bytes
Erase_One_Block         Erase a block of 64K bytes
Erase_Entire_Chip       Erase the contents of the entire chip
Program_One_Byte        Alter data in one byte
Program_One_Sector      Alter data in 4096 byte sector
Program_One_Block       Alter data in 64K byte block
Check_Toggle_Ready      End of internal program or erase detection using
                        Toggle bit
Check_Data_Polling      End of internal program or erase detection using
                        Data&#35; polling

"C" LANGUAGE DRIVERS
/***********************************************************************/
/* Copyright Silicon Storage Technology, Inc. (SST), 1994-2003         */
/* Example "C" language Driver of 39VF080 8 Mbit Multi-Purpose Flash   */
/* Nelson Wang, Silicon Storage Technology, Inc.                       */
/*                                                                     */
/* Revision 1.0, May 28, 2003                                          */
/*                                                                     */
/* This file requires these external "timing"  routines:               */
/*                                                                     */
/*      1.)  Delay_150_Nano_Seconds                                    */
/*      2.)  Delay_25_Milli_Seconds                                    */
/*      3.)  Delay_100_Milli_Seconds                                   */
/***********************************************************************/
&#35;define FALSE                   0
&#35;define TRUE                    1
&#35;define SECTOR_SIZE             4096    /* Must be 4096 bytes for 39VF080 */
&#35;define BLOCK_SIZE              65536   /* Must be 64K bytes for 39VF080  */
&#35;define SST_ID                  0xBF  /* SST Manufacturer';s ID code  */
&#35;define SST_39VF080             0xD8  /* SST39VF080 device code      */
                                       
typedef unsigned char           BYTE;
typedef unsigned int            WORD;
/* -------------------------------------------------------------------- */
/*                       EXTERNAL ROUTINES                              */
/* -------------------------------------------------------------------- */
extern void     Delay_150_Nano_Seconds();
extern void     Delay_25_Milli_Seconds();
extern void     Delay_100_Milli_Seconds();

/************************************************************************/
/* PROCEDURE:   Check_SST_39VF080                                       */
/*                                                                      */
/* This procedure decides whether a physical hardware device has a      */
/* SST39VF080 8 Mbit Multi-Purpose Flash installed or not.              */
/*                                                                      */
/* Input:                                                               */
/*          None                                                        */
/*                                                                      */
/* Output:                                                              */
/*          return TRUE:  indicates a SST39VF080                        */
/*          return FALSE: indicates not a SST39VF080                    */
/************************************************************************/
int Check_SST_39VF080()              
{
        BYTE far *Temp;
        BYTE SST_id1;
        BYTE far *Temp1;
        BYTE SST_id2;
        int  ReturnStatus;
        /*  Issue the Software Product ID code to 39VF080   */
        Temp1 = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp1= 0xAA;                   /* write data 0xAA to the address   */
        Temp1 = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp1= 0x55;                   /* write data 0x55 to the address   */
        Temp1 = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp1= 0x90;                   /* write data 0x90 to the address   */
        Delay_150_Nano_Seconds();       /* insert delay time = Tida         */
        /* Read the product ID from 39VF080 */
        Temp  = (BYTE far *)0xC0000000; /* set up address to be C000:0000h */
        SST_id1  =  *Temp;              /* get first ID byte               */
        SST_id1  =  SST_id1 & 0x00FF;   /* mask of higher byte             */
        Temp1 = (BYTE far *)0xC0000001; /* set up address to be C000:0001h */
        SST_id2  =  *Temp1;             /* get second ID byte              */
        /* Determine whether there is a SST39VF080 installed or not */
        if ((SST_id1 == SST_ID) && (SST_id2 ==SST_39VF080))
                ReturnStatus = TRUE;
        else
                ReturnStatus = FALSE;
        /* Issue the Soffware Product ID Exit code thus returning the 39VF080 */
        /* to the read operating mode                                         */
        Temp1  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h   */
        *Temp1 = 0xAA;                   /* write data 0xAA to the address    */
        Temp1  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh   */
        *Temp1 = 0x55;                   /* write data 0x55 to the address    */
        Temp1  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h   */
        *Temp1 = 0xF0;                   /* write data 0xF0 to the address    */
        Delay_150_Nano_Seconds();        /* insert delay time = Tida          */
        return(ReturnStatus);
}

/************************************************************************/
/* PROCEDURE:   CFI_Query                                               */
/*                                                                      */
/* This procedure should be used to query for CFI information           */
/*                                                                      */
/* Input:                                                               */
/*          None                                                        */
/*                                                                      */
/* Output:                                                              */
/*          None                                                        */
/************************************************************************/
void CFI_Query()
{
        BYTE far *Temp1;
        /*  Issue the Software Product ID code to 39VF080   */
        Temp1 = (BYTE far *)0xC0005555; /* set up address to be C000:5555h    */
        *Temp1= 0xAA;                   /* write data 0xAA to the address     */
        Temp1 = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh    */
        *Temp1= 0x55;                   /* write data 0x55 to the address     */
        Temp1 = (BYTE far *)0xC0005555; /* set up address to be C000:5555h    */
        *Temp1= 0x98;                   /* write data 0x98 to the address     */
        Delay_150_Nano_Seconds();       /* insert delay time = Tida           */
        /* --------------------------------- */
        /*  Perform all CFI operations here  */
        /*  NOTE:  no sample code provided   */
        /* --------------------------------- */
        /* Issue the CFI Exit code thus returning the 39VF080 */
        /* to the read operating mode                          */
        Temp1  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h   */
        *Temp1 = 0xAA;                   /* write data 0xAA to the address    */
        Temp1  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh   */
        *Temp1 = 0x55;                   /* write data 0x55 to the address    */
        Temp1  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h   */
        *Temp1 = 0xF0;                   /* write data 0xF0 to the address    */
        Delay_150_Nano_Seconds();        /* insert delay time = Tida          */
}

/************************************************************************/
/* PROCEDURE:   Erase_One_Sector                                        */
/*                                                                      */
/* This procedure can be used to erase a total of 4096 bytes.           */
/*                                                                      */
/* Input:                                                               */
/*      Dst     DESTINATION address where the erase operation starts    */
/*                                                                      */
/* Output:                                                              */
/*      NONE                                                            */
/************************************************************************/
void Erase_One_Sector (BYTE far *Dst)
{
        BYTE far *Temp;
        /*  Issue the Sector Erase command to 39VF080  */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0x80;                   /* write data 0x80 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = Dst;                  /* set up starting address to be erased */
        *Temp = 0x30;                   /* write data 0x30 to the address   */
        Delay_25_Milli_Seconds();       /* Delay time = Tse                 */
}

/************************************************************************/
/* PROCEDURE:   Erase_One_Block                                         */
/*                                                                      */
/* This procedure can be used to erase a total of 64K words.            */
/*                                                                      */
/* Input:                                                               */
/*      Dst     DESTINATION address where the erase operation starts    */
/*                                                                      */
/* Output:                                                              */
/*      NONE                                                            */
/************************************************************************/
void Erase_One_Block (BYTE far *Dst)
{
        BYTE far *Temp;
        /*  Issue the Sector Erase command to 39VF080  */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0x80;                   /* write data 0x80 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = Dst;                  /* set up starting address to be erased */
        *Temp = 0x50;                   /* write data 0x50 to the address   */
        Delay_25_Milli_Seconds();       /* Delay time = Tbe                 */
}

/************************************************************************/
/* PROCEDURE:   Erase_Entire_Chip                                       */
/*                                                                      */
/* This procedure can be used to erase the entire chip.                 */
/*                                                                      */
/* Input:                                                               */
/*      NONE                                                            */
/*                                                                      */
/* Output:                                                              */
/*      NONE                                                            */
/************************************************************************/
void Erase_Entire_Chip()
{
        BYTE far *Temp;
        /*  Issue the Chip Erase command to 39VF080  */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0x80;                   /* write data 0x80 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp  = (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp  = (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0x10;                   /* write data 0x10 to the address   */
        Delay_100_Milli_Seconds();      /* Delay Tsce time                  */
}

/************************************************************************/
/* PROCEDURE:   Program_One_Byte                                        */
/*                                                                      */
/* This procedure can be used to program ONE byte of data to the        */
/* 39VF080.                                                             */
/*                                                                      */
/* NOTE:  It is necessary to first erase the sector containing the      */
/*        byte to be programmed.                                */
/*                                                                      */
/* Input:                                                               */
/*           Src     The BYTE which will be written to the 39VF080      */
/*           Dst     DESTINATION address which will be written with the */
/*                   data passed in from Src                            */
/*                                                                      */
/* Output:                                                              */
/*           None                                                       */
/************************************************************************/
void Program_One_Byte (BYTE Src, BYTE far *Dst)
{
BYTE far *Temp;
        BYTE far *DestBuf;
        DestBuf = Dst;
        Temp =  (BYTE far *)0xC0005555; /* set up address to be C000:555h   */
        *Temp = 0xAA;                   /* write data 0xAA to the address   */
        Temp =  (BYTE far *)0xC0002AAA; /* set up address to be C000:2AAAh  */
        *Temp = 0x55;                   /* write data 0x55 to the address   */
        Temp =  (BYTE far *)0xC0005555; /* set up address to be C000:5555h  */
        *Temp = 0xA0;                   /* write data 0xA0 to the address   */
        *DestBuf = Src;                 /* transfer the byte to destination */
        Check_Toggle_Ready(DestBuf);    /* wait for TOGGLE bit to get ready */
}

/************************************************************************/
/* PROCEDURE:   Program_One_Sector                                      */
/*                                                                      */
/* This procedure can be used to program a total of 4096 bytes of data  */
/* to the SST39VF080.                                                   */
/*                                                                      */
/* NOTES: 1. It is necessary to first erase the sector before the*/
/*        programming.                                */
/*        2. This sample code assumes the destination address passed*/
/*        from the calling function is the starting address of the*/
/*        sector.*/
/*                                                                      */
/* Input:                                                               */
/*           Src     SOURCE address containing the data which will be   */
/*                   written to the 39VF080                             */
/*           Dst     DESTINATION address which will be written with the */
/*                   data passed in from Src                            */
/*                                                                      */
/* Output:                                                              */
/*           None                                                       */
/************************************************************************/
void Program_One_Sector (BYTE far *Src,    BYTE far *Dst)
{
        BYTE far *SourceBuf;
        BYTE far *DestBuf;
        int Index;
        SourceBuf = Src;
        DestBuf = Dst;
        Erase_One_Sector(Dst);          /* erase the sector first */
        for (Index = 0; Index < SECTOR_SIZE; Index++)
        {
/* transfer data from source to destination */
Program_One_Byte( *SourceBuf, DestBuf);
++DestBuf;
++SourceBuf;
        }
}

/************************************************************************/
/* PROCEDURE:   Program_One_Block                                       */
/*                                                                      */
/* This procedure can be used to program a total of 64k bytes of data   */
/* to the SST39VF080.                                                   */
/*                                                                      */
/* NOTES: 1. It is necessary to first erase the block before the*/
/*        programming.                                */
/*        2. This sample code assumes the destination address passed*/
/*        from the calling function is the starting address of the*/
/*        block.*/
/**/
/* Input:                                                               */
/*           Src     SOURCE address containing the data which will be   */
/*                   written to the 39VF080                             */
/*           Dst     DESTINATION address which will be written with the */
/*                   data passed in from Src                            */
/*                                                                      */
/* Output:                                                              */
/*           None                                                       */
/************************************************************************/
void Program_One_Block (BYTE far *Src,  BYTE far *Dst)
{
        BYTE far *SourceBuf;
        BYTE far *DestBuf;
        int Index;
        SourceBuf = Src;
        DestBuf = Dst;
        Erase_One_Block(Dst);          /* erase the sector first */
        for (Index = 0; Index < BLOCK_SIZE; Index++)
        {
/* transfer data from source to destination */
Program_One_Byte( *SourceBuf, DestBuf);
++DestBuf;
++SourceBuf;
        }
}

/************************************************************************/
/* PROCEDURE:    Check_Toggle_Ready                                     */
/*                                                                      */
/* During the internal program cycle, any consecutive read operation    */
/* on DQ6 will produce alternating 0';s and 1';s (i.e. toggling between   */
/* 0 and 1). When the program cycle is completed, DQ6 of the data will  */
/* stop toggling. After the DQ6 data bit stops toggling, the device is  */
/* ready for next operation.                                            */
/*                                                                      */
/* Input:                                                               */
/*           Dst        Must already be set-up by the caller            */
/*                                                                      */
/* Output:                                                              */
/*           None                                                       */
/************************************************************************/
void Check_Toggle_Ready (BYTE far  *Dst)
{
        BYTE Loop = TRUE;
        BYTE PreData;
        BYTE CurrData;
        unsigned long TimeOut = 0;
        PreData = *Dst;
        PreData = PreData & 0x40;
        while ((TimeOut< 0x07FFFFFF) && (Loop))
        {
            CurrData = *Dst;
            CurrData = CurrData & 0x40;
            if (PreData == CurrData)
                    Loop = FALSE;   /* ready to exit the while loop */
            PreData = CurrData;
            TimeOut++;
        }
}

/************************************************************************/
/* PROCEDURE:   Check_Data_Polling                                      */
/*                                                                      */
/* During the internal program cycle, any attempt to read DQ7 of the    */
/* last byte loaded during the page/byte-load cycle will receive the    */
/* complement of the true data.  Once the program cycle is completed,   */
/* DQ7 will show true data.                                             */
/*                                                                      */
/* Input:                                                               */
/*           Dst        Must already be set-up by the caller            */
/*           True       Data is the original (true) data                */
/*                                                                      */
/* Output:                                                              */
/*           None                                                       */
/************************************************************************/
void Check_Data_Polling (BYTE far  *Dst,  BYTE TrueData)
{
        BYTE Loop = TRUE;
        BYTE CurrData;
        unsigned long TimeOut = 0;
        TrueData = TrueData &  0x80;
        while ((TimeOut< 0x07FFFFFF) && (Loop))
        {
                CurrData = *Dst;
                CurrData = CurrData & 0x80;
                if (TrueData == CurrData)
                        Loop = FALSE;   /* ready to exit the while loop  */
                TimeOut++;
        }
}
[br][br]-=-=-=- 以下内容由 天涯2006年07月12日 08:25am 时添加 -=-=-=-
对了,当时刷新不成功的时候,我就想反正测试一个也是试,就多试几个,就试了上海贝尔的那个6开头的那个,完整我记不得了,还有中兴831的那个V2.9f的,都不成功.
上面这段程序,是不是可以改成FLASH程序?然后用接数据线的办法把固件给直接刷回去?
 楼主| 发表于 2006-7-12 07:53:19 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

我板上的FLASH芯片是它SST39VF080,等今天借个相机,我会上个完整的图上来.
 楼主| 发表于 2006-7-12 07:55:02 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

http://www.sst.com/downloads/software_driver/SST39VF080.txt[br][br]-=-=-=- 以下内容由 天涯2006年07月12日 08:21am 时添加 -=-=-=-
http://slotholt.net/tini/files/SST39VF080.pdf
发表于 2006-7-12 15:05:09 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

有并口鼠标吗?超级终端好像也没有使用并口通信呀
 楼主| 发表于 2006-7-12 17:46:55 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

楼上的朋友,谢谢你提醒,我是用串口鼠标线,接主板的com1口,真是对不住,谢谢提醒了.
发表于 2006-7-12 17:56:53 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

你可真牛,这么的老猫都弄到了。我在外面也看到这个老猫,但是没有时间去试验了,要考试了,只能偶尔来这里转转
另外,71238a11.rar是我提供给版主的哦,后来也通过邮件发过给你,哈哈,声明一下版权先 ^_^
祝你成功!
 楼主| 发表于 2006-7-12 21:21:45 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

楼上的朋友,我是没有办法成功的了,除非有高手相助,我这点水平,只不过想着自己有几个MODEM坏个也不怕,大不了,当作收藏罢了,其实这个老MODEM是我当初上宽带的时候自己买的,后来别的MODEm都是找电信的朋友要来的. 当初买这个,好象花了500多元买的,1999年底买的了. 我只是看到上海贝尔的及中兴的界面稍为友好一些,所以就想用这个来试试,再加上看了kellson的贴子,心里面就更想弄. Kellson是我偶像啊,强人一个,当然论坛上还有好多强人.我很喜欢这论坛. 可惜本领却差得....英文更是别提了.
今天没有借到相机,没有办法上图了.
发表于 2006-7-12 23:04:52 | 显示全部楼层

[求助]实达2110-ehr v2.10B版如何在超级终端下恢复FIREWARE?

是不是这个东西?
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-18 09:05 , Processed in 0.052486 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表