Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с запуском AT91sam7x + DM9161AEP
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
Yurik32
AT91sam7x + DM9161AEP соединены по MII. Трансформатор - J00-0061

Есть некоторая плата. Схема, в части езернета, полностью 1 к 1 содрана с евалюейшн кита AT91SAM7X-EK.
Разводку PCB мягко говоря сделали не совсем грамотно.

Первый запуск:
С виду PHY работает полностью корректно. Лампочки адекватно мигают и реагируют на переключение режимов работы 10/100Mbit и Half / full duplex. Нормально работает Auto-MDIX.
Форма сигналов тактирования на первый взгляд нормальные.

МАС, IP, NetMask, Gateway, DNS присваиваются вручную. DHCP отключен.

Пробую пропинговать. Результат - Request timed out.
Беру ев.кит AT91SAM7X-EK загружаю туда ту же прошивку. Подключаю к ней тот же езернет кабель. Результат - все работает нормально.
Беру отладчик и смотрю как выполняется программа. Ход выполнения программы на обеих платах одинаковый.
Создается впечатление что проблема на 99% аппаратная.

Заметил такой нюанс. Если все выключить. Немного подождать. Затем снова включить. То все запускается. Пинг и другие сервисы работают, но не долго.
Проходит 40-80 секунд и снова пинг пропадает и связи нет.
Такой эффект наблюдается только на скорости 10Mbit. На 100Мбит связи нет вообще.
----
Если смотреть осциллографом то от PHY к MAC какие то данные доходят. При этом сигнал RX_DV (RX Data Valid) = 1. RX_ER (RX DataError) всегда в 0.
Значит ли это что полученные МАСом данные являются правильными и 100% должны были им обработаться?
Ответа от МАСа нет. (Ну кроме тех 40-80 секунд при включении в режиме 10Мбит).

Подскажите в чем может быть проблема. Хоть бы как-то на тех 10 мбит этот езернет стабильно запустить.
AndreiUS
Цитата
Заметил такой нюанс. Если все выключить. Немного подождать. Затем снова включить. То все запускается.


Сделан ли у Вас корректный сброс PHY при включении?
Yurik32
Цитата(AndreiUS @ Jan 30 2012, 07:32) *
Сделан ли у Вас корректный сброс PHY при включении?

ну по идее да. Стандартная процедура инициализации. Написана не мной. Лежит вот здесь
Код
c:\Keil\ARM\Boards\Atmel\AT91SAM7X-EK\RL\TCPnet\Library\EMAC_SAM7X.c

и поставляется вместе с кейлом и его библиотеками.

Кусок кода инициализации:
Код
void init_ethernet (void) {
  /* Initialize the EMAC ethernet controller. */
  U32 regv,tout,id1,id2;

  /* Enable Peripheral Clock for EMAC Peripherals */
  pPMC->PMC_PCER  = (1 << AT91C_ID_PIOB) | (1 << AT91C_ID_EMAC);

  /* Disable pull up on RXDV => PHY normal mode (not in test mode), */
  /* and set MII mode. PHY has internal pull down.                  */
  pPIOB->PIO_PPUDR= AT91C_PIO_PB16 | AT91C_PIO_PB15;

  /* Clear PB18 <=> PHY powerdown */
  pPIOB->PIO_IDR  =
  pPIOB->PIO_PER  =
  pPIOB->PIO_OER  = AT91C_PIO_PB18;
  pPIOB->PIO_CODR = AT91C_PIO_PB18;

  /* After PHY power up, hardware reset the PHY */
  pRSTC->RSTC_RCR = 0xA5000000 | AT91C_RSTC_EXTRST;

  /* Wait for hardware reset to end. */
  while (!(pRSTC->RSTC_RSR & AT91C_RSTC_NRSTL));

  /* EMAC IO init for EMAC-PHY communication in MII. */
  pPIOB->PIO_IDR  =
  pPIOB->PIO_PPUDR=
  pPIOB->PIO_PDR  =
  pPIOB->PIO_ASR  = AT91C_PB0_ETXCK_EREFCK | AT91C_PB1_ETXEN         |
                    AT91C_PB2_ETX0         | AT91C_PB3_ETX1          |
                    AT91C_PB4_ECRS         | AT91C_PB5_ERX0          |
                    AT91C_PB6_ERX1         | AT91C_PB7_ERXER         |
                    AT91C_PB8_EMDC         | AT91C_PB9_EMDIO         |
                    AT91C_PB10_ETX2        | AT91C_PB11_ETX3         |
                    AT91C_PB12_ETXER       | AT91C_PB13_ERX2         |
                    AT91C_PB14_ERX3        | AT91C_PB15_ERXDV_ECRSDV |
                    AT91C_PB16_ECOL        | AT91C_PB17_ERXCK;

  /* Enable communication between EMAC-PHY. */
  enable_MDI ();
  /* Put the DM9161 in reset mode */
  write_PHY (PHY_REG_BMCR, BMCR_RESET);

  /* Wait for hardware reset to end. */
  for (tout = 0; tout < 0x100000; tout++) {
    regv = read_PHY (PHY_REG_BMCR);
    if (!(regv & BMCR_RESET)) {
      /* Reset complete */
      break;
    }
  }

  /* Check if this is a DM9161 PHY. */
  id1 = read_PHY (PHY_REG_PHYID1);
  id2 = read_PHY (PHY_REG_PHYID2);

  if (((id1 << 16) | (id2 & 0xfff0)) == MII_DM9161_ID) {
    ..........
  }
  .......
}


Вроде все корректно. На эв.кит. AT91SAM7X-EK все же работает нормально.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.