Имеется МК STM32F107VC, в качестве PHY используется микросхема KSZ8031, все подключено без ремапинга

Пытаюсь поднять Ethernet по статье http://eugenemcu.ru/publ/13-1-0-79 (статья к сожалению недописана, и, как мне кажется, на самом важном месте)

Делаю все по статье(удаляю ненужные модули, переназначаю GPIO), PHY_ADDRES нашел в даташите на KSZ8031, он равен 0x03

Сначала программа вешалась в функции Ethernet_Configuration, в цикле while (ETH_GetSoftwareResetStatus() == SET);
Нашел в интернете, что это изза того, что включать Ethernet Clock нужно не до этого цикла, а после. исправил, программа прошла дальше.

И тут возникает несколько вопросов
1) Как понять, работает ли Ethernet или нет? витая пара подключена к компьютеру, но когда запускаю программу там так и пишет "Сетевой кабель не подключен". я так подозреваю, это говорит о том, что ethernet не работает, соотвественно, что может быть не так и куда копать в поисках ошибки?
2) Как узнать, правильный ли PHY_Address задан? в дата шите что-то говорилось про другой PHY_Address
3) Правильно ли решена проблема с зависанием в цикле while (ETH_GetSoftwareResetStatus() == SET); ?
4) в GPIO_Configuration есть такие строчки:
Код
/* ADC Channel14 config --------------------------------------------------------*/
      /* Relative to STM3210D-EVAL Board */
      /* Configure PC.04 (ADC Channel14) as analog input -------------------------*/
      // PA3 - ADC1 CH03
        
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
      GPIO_Init(GPIOA, &GPIO_InitStructure);

Что они активируют? у меня на PA3 ничего не заведено

Модифицированный мной проект: ссылка
Заранее спасибо за ответы!