реклама на сайте
подробности

 
 
> Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :(
zltigo
сообщение Sep 24 2008, 12:04
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Во всех китах Olimex и Starterkit для чипов LPC23xx и LPC24xx ошибка в подключении PHY KS8721BL в RMII Mode. К контроллеру подключен сигнал CRS (Carrier Sense), а не RXDV(CRS_DV - Carrier Sense/Data Valid). Результат плачевен - все фреймы принимаются с якобы битой CRC. Кстати, там по хорошему надо-бы этот сигнальчик к земле подтянуть, а то со встроенной в LPC PU подтяжкой при Reset потенциально могут быть проблемы.

P.S.
Поражает пофигизм разработчиков в обработке ошибок - описанные киты давно уже в продаже, на них написано всяких разных демок-приложений вплоть до Linux, а обрабатывать ошибки sad.gif, получается не заморачивается никто особо sad.gif. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Jul 1 2011, 15:48
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (zltigo @ Jun 29 2011, 18:02) *
чевидно sad.gif

Все заработало. Основная часть демок от Кейла пошла (web-сервера (Java, CGI), ping и т.п.).
Что было сделано:
1. В инициализации EMAC добавлена строка
CODE
MAC_MCFG = MCFG_HCLK_DIV_28;

после этих строк
CODE
  /* Initialize MAC control registers. */
  MAC_MAC1 = MAC1_PASS_ALL;
  MAC_MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
  MAC_MAXF = ETH_MAX_FLEN;
  MAC_CLRT = CLRT_DEF;
  MAC_IPGR = IPGR_DEF;

2. Естественно, в начале файла есть макрос
CODE
#define MCFG_HCLK_DIV_28      (7 << 2)

Саму инициализацию вообще не трогал (не за исключением добавления указанной строки), не знаю, правильно или нет. Но работает же.
3. По невнимательности для LPC2468 использовал стартовый код LPC2300.s. Заменил на LPC2400.s.
4. Адрес микросхемы PHY не менял, он был уже 0x0100 (1 << 8).
5. Выключил всю отладку сети (файл Net_Debug.c). Это угробляло всю библиотеку TCPnet в моем случае.

Ну и сменил IP на удобный для меня rolleyes.gif
Все пошло!!!))) Пинг меньше 1 мс. Сервера работают.
Сегодня запустил под осью RTX. Стандартный пример не смог запустить. Сделал свой. Правда пинг 8 - 30 мс. Но это связано с неправильным распределением приоритетов задач. Это я уже выяснил. Буду учиться и исправлять ситуацию.
Вот вроде и все.

Большое человеческое спасибо участникам за помощь!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2011, 19:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (haker_fox @ Jul 1 2011, 17:48) *
1. В инициализации EMAC добавлена строка
CODE
MAC_MCFG = MCFG_HCLK_DIV_28;

после этих строк
CODE
  /* Initialize MAC control registers. */
  MAC_MAC1 = MAC1_PASS_ALL;
  MAC_MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
  MAC_MAXF = ETH_MAX_FLEN;
  MAC_CLRT = CLRT_DEF;
  MAC_IPGR = IPGR_DEF;

2. Естественно, в начале файла есть макрос
CODE
#define MCFG_HCLK_DIV_28      (7 << 2)

Саму инициализацию вообще не трогал (не за исключением добавления указанной строки), не знаю, правильно или нет. Но работает же.
3. По невнимательности для LPC2468 использовал стартовый код LPC2300.s. Заменил на LPC2400.s.
4. Адрес микросхемы PHY не менял, он был уже 0x0100 (1 << 8).

Да, демописатели sad.gif. У меня даже для рабочего варианта поиск PHY производится, дабы не думать каждый раз..
CODE
int init_phy(void)
{
    MCFG = MCFG_HCLK_DIV_28|MCFG_RESET_MII_MGMT;
      vSmartDelay_ms( 2 );

#if( EMAC_CFG_RMII == 0 )
    MCOMMAND &= ~CR_RMII;
#else
    MCOMMAND |= CR_RMII;
#if defined __IOLPC2458_H
    SUPP = SUPP_RESET_MII;
#else
    SUPP = 0;                 // Assume and configure RMII link speed logic for 10Mbit
#endif
#endif

    for( int i = 0; i < 7; i++ )
    {    // Check dividers to yield MII frequency ~2.5 MHz
        if( ( (configCPU_CLOCK_HZ/100000L)/mii_dividers[i][0] ) <=  25 )
        {    MCFG = mii_dividers[i][1];        // Remove reset, set proper MIIM divider
            break;
        }
    }
    vSmartDelay_ms( 10 );    // Short delay while PHY exits reset and new divider is set

      for( phy_addr = 1; phy_addr <= 31; phy_addr++ )
      {   // Put PHY in reset mode
        write_PHY( PHY_REG_BMCR, BMCR_RESET );
        // Wait for hardware reset to end
        for( int i = 0; i < 128; i++ )
        {   vSmartDelay_ms( 1 );
            if( !(read_PHY( PHY_REG_BMCR ) & BMCR_RESET) )
            {    // Reset complete
                goto phy_found;
              }
        }
    }
    printst( "PHY:Missing " );
    return( 1 );

phy_found:
    {
    // Check if this is a valid PHY
      ulong id_phy = (read_PHY( PHY_REG_IDR1 )<<16)|read_PHY( PHY_REG_IDR2 );
    if( id_phy == KS8721BL_ID  )
        xprintf( "PHY%2X:KS8721BL ", phy_addr );
    else if( id_phy == KS8041TL_ID  )
        xprintf( "PHY%2X:KS8041TL ", phy_addr );
    else
    {    xprintf( "PHY%2X:%8X -Unknown ", phy_addr, id_phy );
         return( 2 );
    }
    }

      // Sanity check...
...........


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 2 2011, 08:36
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (zltigo @ Jul 2 2011, 04:37) *
Да, демописатели sad.gif. У меня даже для рабочего варианта поиск PHY производится, дабы не думать каждый раз..

Видимо на кейловских платах другой PHY стоит. Вот они жестко под него примеры и заточили.
За исходник - спасибо! Поизучаю!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 5 2011, 14:45
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(haker_fox @ Jul 2 2011, 12:36) *
За исходник - спасибо! Поизучаю!


Какой-то индусокод. Представьте что адрес не 1 или 2 а 31 - сколько эта херня будет циклы накручивать с задержками ? Лучше нормальные открытые проекты изучайте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 18:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Jul 5 2011, 17:45) *
Какой-то индусокод. Представьте что адрес не 1 или 2 а 31 - сколько эта херня будет циклы накручивать с задержками ?

Если не умеете считать, то порядка 128ms на адрес. Один раз при инициализации. Зато будет найден любой. При необходимости экономить время и использовании 31 адреса все может быть постфактум скорректировано в конкретном рабочем исходнике. Именно такой подход к делу для ДЕМО кода является нормальным в отличии от забивания конкретного адреса, причем без комментариев, что это адрес.
QUOTE
Лучше нормальные открытые проекты изучайте.

Нормальных открытых нет. Один с относительно нормальным уровнем драйвера я уже в этом топике поминал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 5 2011, 18:56
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(zltigo @ Jul 5 2011, 22:25) *
Если не умеете считать, то порядка 128ms на адрес. Один раз при инициализации. Зато будет найден любой. При необходимости экономить время и использовании 31 адреса все может быть постфактум скорректировано в конкретном рабочем исходнике. Именно такой подход к делу для ДЕМО кода является нормальным в отличии от забивания конкретного адреса, причем без комментариев, что это адрес.


Я как раз умею считать - для 31 адреса задержка составит 3 секунды - это нормально по-вашему ? Смысл не в том что вы ищете живой адрес а в том как вы это делаете - можно было в цикле заслать сброс по всем адресам без задержек, а потом опрашивать начианая с первого и если он не ответил, то для следующих задержки уже не нужны. В итоге задержка практически не будет зависеть от адреса а для 31 сократится в 30 (!) раз.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 19:30
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Jul 5 2011, 21:56) *
можно было в цикле заслать сброс по всем адресам без задержек, а потом....

В результате получим много большую задержку для начального ОЖИДАЕМОГО адреса и более замысловатый код и более сложный для правки с целью получить из этого демо рабочий вариант.
Единственно, что, пожалуй следует изменить, это явно дефинировать ожидаемый адрес. Где-то так:
CODE
#define DEFAULT_PHY_ADDR (1)
  
    for( phy_addr = DEFAULT_PHY_ADDR;; )
      {   // Put PHY in reset mode
        write_PHY( PHY_REG_BMCR, BMCR_RESET );
        // Wait for hardware reset to end
        for( int i = 0; i < 128; i++ )
        {   vSmartDelay_ms( 1 );
            if( !(read_PHY( PHY_REG_BMCR ) & BMCR_RESET) )
            {    // Reset complete
                goto phy_found;
              }
        }
        phy_addr = ( phy_addr + 1 ) & 0x1F;
        if( phy_addr == DEFAULT_PHY_ADDR )
                           {    printst( "PHY:Missing " );
                                 return( 1 );
        }
        
    }

Достаточно изменить DEFAULT_PHY_ADDR на желаемый и получаем максимально быстрый рабочий вариант, который тем не менее обеспечит поиск при запуске демки или каких-то монтажных ошибок


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 5 2011, 20:16
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(zltigo @ Jul 5 2011, 23:30) *
В результате получим много большую задержку для начального ОЖИДАЕМОГО адреса и более замысловатый код и более сложный для правки с целью получить из этого демо рабочий вариант.


Вы о чем вообще ? вот ваш подправленый код

Код
    for (phy_addr = 1; phy_addr <= 31; phy_addr++)
        // Put PHY in reset mode
        write_PHY(PHY_REG_BMCR, BMCR_RESET);

    phy_addr = 1;

    for (int i = 0; i < 128; i++) {  
        if (!(read_PHY( PHY_REG_BMCR ) & BMCR_RESET))
            // Reset complete
            goto phy_found;
        vSmartDelay_ms(1);
    }
    
    for (phy_addr = 2; phy_addr <= 31; phy_addr++) {
        if (!(read_PHY(PHY_REG_BMCR) & BMCR_RESET))
            goto phy_found;
    }
    
    printst("PHY:Missing ");
    return (1);
      
phy_found:


Цитата
for( phy_addr = DEFAULT_PHY_ADDR;; )


Это вообще цирк - зачем тогда поиск адреса нужен sm.gif

Сообщение отредактировал sasamy - Jul 5 2011, 20:21
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 20:20
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Jul 5 2011, 23:16) *
Вы о чем вообще ?

О том, что написал.
QUOTE
вот ваш подправленый код

Я понял Вашу мысль и достаточно четко на мой взгляд написал, почему меня такая правка НЕ устраивает. Подправленный код тоже привел. Ознакомьтесь для начала.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 5 2011, 20:24
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(zltigo @ Jul 6 2011, 00:20) *
О том, что написал.

Я понял Вашу мысль и достаточно четко на мой взгляд написал, почему меня такая правка НЕ устраивает. Подправленный код тоже привел. Ознакомьтесь для начала.


Я немного опоздал с ответом - в общем это очередная индусятина - собственно то что вы ставили во главу сначала (а это перебрать и найти ЛЮБОЙ адрес даже если ошибка в физике) вдруг отошло на второй план и появился костыль который гробит всю идею на корню
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 20:35
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Jul 5 2011, 23:24) *
в общем это очередная индусятина

бла, бла, бла....
QUOTE
собственно то что вы ставили во главу сначала (а это перебрать и найти ЛЮБОЙ адрес даже если ошибка в физике) вдруг отошло на второй план

Было и есть на переднем плане. Во главе угла нормально без лишних рассылок ресетов и прочих ЛИШНИХ телодвижений инициализировать PHY. Если вдруг PHY не нашелся на том адресе, на котором должен быть, то тогда искать. Это НЕ штатный режим и время не имеет значения. Значение-же, для той-же демки имеет понятность и минимально-достаточное количество действий при инициализации. Дивная посылка кучи НЕНУЖНЫХ ресетов может в демке разве только сбить с толку читающего и замаскировать ту самую необходимо-достаточную процедуру инициализации PHY. Кстати, о времени, vSmartDelay_ms() это при работающем шедулере и не при вызове из Idle не задержка, а переключение на другую задачу. До кучи у меня нет зависимости от наличия в функции write_PHY() ожидания окончания транзакции. Отсутствие такого ожидания тоже встречалось в халявных демках sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 5 2011, 20:41
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(zltigo @ Jul 6 2011, 00:35) *
бла, бла, бла....


Честно говоря - мне нечего добавить. Учить Вас с таким самомнением бесполезно и поздно, тем более что-то доказывать - я даже не расчитывал что вы согласитесь что код у вас говенный sm.gif

Сообщение отредактировал sasamy - Jul 5 2011, 20:43
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 20:46
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Jul 5 2011, 23:41) *
...согласитесь что код у вас говенный sm.gif

Возможно со временем Вам дано будет его понять.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zltigo   Olimex/Startetkit LPC23/4 + RMII KS8721BL   Sep 24 2008, 12:04
- - Quasar   Цитата(zltigo @ Sep 24 2008, 16:04) Во вс...   Sep 25 2008, 19:18
|- - zltigo   Цитата(Quasar @ Sep 25 2008, 21:18) Я с э...   Sep 25 2008, 19:24
|- - Quasar   Цитата(zltigo @ Sep 25 2008, 23:24) ...   Sep 25 2008, 19:59
- - Vitaliy_ARM   Хорошо, что в свое время я купил демоплату у Embed...   Sep 26 2008, 14:07
|- - zltigo   Цитата(Vitaliy_ARM @ Sep 26 2008, 16:07) ...   Sep 26 2008, 15:08
|- - Vitaliy_ARM   Цитата(zltigo @ Sep 26 2008, 19:08) Если ...   Sep 27 2008, 11:15
|- - zltigo   Цитата(Vitaliy_ARM @ Sep 27 2008, 13:15) ...   Sep 27 2008, 11:58
|- - Vitaliy_ARM   Цитата(zltigo @ Sep 27 2008, 15:58) VDDA_...   Sep 27 2008, 13:03
|- - zltigo   Цитата(Vitaliy_ARM @ Sep 27 2008, 15:03) ...   Sep 27 2008, 13:08
- - lebiga   Цитата(zltigo @ Sep 24 2008, 15:04) Во вс...   Oct 1 2008, 07:26
|- - zltigo   Цитата(lebiga @ Oct 1 2008, 09:26) И еще ...   Oct 1 2008, 07:36
|- - lebiga   Цитата(zltigo @ Oct 1 2008, 10:36) Да на ...   Oct 1 2008, 07:57
|- - zltigo   Цитата(lebiga @ Oct 1 2008, 09:57) это вс...   Oct 1 2008, 08:04
|- - lebiga   Да, сам себя накрутил, где-то взял этот код... Ког...   Oct 1 2008, 10:48
- - virfis   У меня olimex LPC-E2468 с KS8721BL не проходит ини...   Oct 16 2008, 12:08
|- - defunct   На практике действительно так нужен RMII? PHY толь...   Oct 16 2008, 22:52
- - aaarrr   За наличие RMII и версии с индустриальным диапазон...   Oct 16 2008, 22:58
|- - defunct   Я нашел эту разницу и пост удалил. Поворчал по дру...   Oct 16 2008, 23:02
|- - Alexandro   Цитата(aaarrr @ Oct 17 2008, 01:58) Впроч...   Oct 17 2008, 11:49
|- - defunct   Цитата(Alexandro @ Oct 17 2008, 13:49) Не...   Nov 2 2008, 02:48
|- - zltigo   Цитата(defunct @ Nov 2 2008, 05:48) Эта д...   Nov 2 2008, 08:45
- - virfis   В чем разница RMII и MII? Может у меня поэтому не ...   Oct 17 2008, 08:03
|- - mdmitry   Цитата(virfis @ Oct 17 2008, 12:03) В чем...   Oct 17 2008, 10:32
- - haker_fox   QUOTE (zltigo @ Sep 24 2008, 21:04) Во вс...   Jun 27 2011, 06:29
- - haker_fox   Перерезал дорожку. Припоял перемычку. Лучше на ста...   Jun 29 2011, 08:13
|- - zltigo   QUOTE (haker_fox @ Jun 29 2011, 10:13) Пе...   Jun 29 2011, 09:02
- - Lotor   На счет драйвера я отписал тут, думаю поможет - ht...   Jun 29 2011, 09:45
|- - haker_fox   QUOTE (Lotor @ Jun 29 2011, 18:45) На сче...   Jun 30 2011, 00:53
|- - Lotor   Цитата(haker_fox @ Jun 30 2011, 04:53) Мо...   Jun 30 2011, 04:12
|- - haker_fox   QUOTE (Lotor @ Jun 30 2011, 13:12) Должна...   Jun 30 2011, 05:28
||- - Lotor   Цитата(haker_fox @ Jun 30 2011, 09:28) Пр...   Jun 30 2011, 06:15
||- - haker_fox   QUOTE (Lotor @ Jun 30 2011, 15:15) Ничего...   Jun 30 2011, 06:32
||- - sadfeel   Цитата(Lotor @ Jun 30 2011, 09:15) Ничего...   Jul 5 2011, 07:10
|- - yakub_EZ   Цитата(Lotor @ Jun 30 2011, 08:12) У меня...   Jun 30 2011, 08:01
|- - Lotor   Цитата(yakub_EZ @ Jun 30 2011, 12:01) Что...   Jun 30 2011, 08:07
|- - yakub_EZ   Цитата(Lotor @ Jun 30 2011, 12:07) От Чан...   Jun 30 2011, 08:21
|- - Lotor   Цитата(yakub_EZ @ Jun 30 2011, 12:21) Хм....   Jun 30 2011, 09:44
- - yakub_EZ   Демка не простая, а заточенная под стартеркит   Jun 30 2011, 09:56
|- - Lotor   Цитата(yakub_EZ @ Jun 30 2011, 13:56) Дем...   Jun 30 2011, 11:04
|- - zltigo   QUOTE (haker_fox @ Jul 2 2011, 10:36) Вид...   Jul 2 2011, 09:59
||- - haker_fox   QUOTE (zltigo @ Jul 2 2011, 18:59) PHY по...   Jul 2 2011, 12:41
|- - aaarrr   Цитата(sasamy @ Jul 6 2011, 00:41) ...даж...   Jul 5 2011, 21:20
|- - sasamy   Цитата(aaarrr @ Jul 6 2011, 01:20) Ваше ...   Jul 5 2011, 21:34
|- - aaarrr   Цитата(sasamy @ Jul 6 2011, 01:34) Еще од...   Jul 5 2011, 21:43
||- - sasamy   Цитата(aaarrr @ Jul 6 2011, 01:43) Я разв...   Jul 5 2011, 21:54
||- - aaarrr   Цитата(sasamy @ Jul 6 2011, 01:54) Собств...   Jul 5 2011, 21:56
|- - zltigo   QUOTE (sasamy @ Jul 6 2011, 00:34) .... ...   Jul 5 2011, 22:05
|- - sasamy   Цитата(zltigo @ Jul 6 2011, 01:59) Код fo...   Jul 5 2011, 22:18
|- - aaarrr   Цитата(sasamy @ Jul 6 2011, 02:18) На это...   Jul 5 2011, 22:30
||- - sasamy   Цитата(aaarrr @ Jul 6 2011, 02:30) 2.5МГц...   Jul 5 2011, 22:34
|- - zltigo   QUOTE (sasamy @ Jul 6 2011, 01:18) Вообще...   Jul 5 2011, 22:39
|- - aaarrr   Цитата(zltigo @ Jul 6 2011, 02:39) что-то...   Jul 5 2011, 22:46
||- - zltigo   QUOTE (aaarrr @ Jul 6 2011, 01:46) Вот за...   Jul 5 2011, 23:22
|- - sasamy   Цитата(zltigo @ Jul 6 2011, 02:39) Вы не ...   Jul 5 2011, 22:58
- - IgorKossak   Удалил лишнее. Прошу придерживаться рамок темы, хо...   Jul 6 2011, 20:04
- - Lotor   Не про RMII KS8721BL, зато про Olimex/Startetkit ...   Jul 7 2011, 06:34
- - aaarrr   Цитата(Lotor @ Jul 7 2011, 10:34) Проблем...   Jul 7 2011, 10:22
|- - Lotor   Цитата(aaarrr @ Jul 7 2011, 14:22) В этом...   Jul 8 2011, 07:07
- - FinaC   Цитата(Lotor @ Jul 7 2011, 12:34) Не про ...   Aug 10 2011, 06:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01656 секунд с 7
ELECTRONIX ©2004-2016