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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STM32F107RB, проблема с ethernet., Какая-то мистика, ч.2.
scifi
сообщение Dec 22 2014, 15:45
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Duplex mismatch?
Go to the top of the page
 
+Quote Post
fault-tolerant
сообщение Dec 23 2014, 06:27
Сообщение #17





Группа: Новичок
Сообщений: 5
Регистрация: 22-12-14
Пользователь №: 84 236



Цитата(Golikov A. @ Dec 22 2014, 17:41) *
вроде пакетами это уже уровень выше мака и физики, сильно выше, это даже не IP а TCP уже...
точно не стэк виноват?

Хотелось бы, но судя по всему - вряд ли. Во первых, этим драйвером многие пользуются. Во вторых, я брал совершенно разные демонстрационные/тестовые проги, общее одно - драйвер. Да и регистры вроде указывают на проблему на уровне MAC.
Сейчас пытаюсь проверять скорость и синхронизацию линий связи с регистрами PHY - MDC и MDIO... неправильные значения там приводят к ухудшению..
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 23 2014, 06:33
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а в драйверах проверили функцию посылки данных? Проследите всю цепочку посылки пакета (от формирования данных до выдачи в мак), иногда на нижнем уровне ошибки передачи заглушены 0 кодом без обработки. Потому ваш стэк думает что послал, а на самом деле что-то не пошло. По описанию больше похоже на программную ошибку....
Go to the top of the page
 
+Quote Post
fault-tolerant
сообщение Dec 23 2014, 06:50
Сообщение #19





Группа: Новичок
Сообщений: 5
Регистрация: 22-12-14
Пользователь №: 84 236



Цитата(scifi @ Dec 22 2014, 17:45) *

Это я уже проходил :D
По скольку драйвер ST написан под PHY DP83848C, а у нас KSZ8051RNL, один регистр в нем не подходил - он считывал 0x10 для проверки рзультата autonegotiation, в то время как в KSZ8051RNL 0x10 отсутствует. Считывался ноль. По этому он заседал на Half/10. Правильный регистр 0x1E, да и биты в нем не те. Но это легко подстроилось, если кому надо.
В файле STM32f2x7_eth.c, вместо:
CODE
/* Configure the MAC with the Duplex Mode fixed by the auto-negotiation process */
if((RegValue & PHY_DUPLEX_STATUS) != (uint32_t)RESET)
{
/* Set Ethernet duplex mode to Full-duplex following the auto-negotiation */
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
}
else
{
/* Set Ethernet duplex mode to Half-duplex following the auto-negotiation */
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
}

/* Configure the MAC with the speed fixed by the auto-negotiation process */
if(RegValue & PHY_SPEED_STATUS)
{
/* Set Ethernet speed to 10M following the auto-negotiation */
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
}
else
{
/* Set Ethernet speed to 100M following the auto-negotiation */
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
}

Можно вставить:
CODE
#define HALF_DUPLEX_10_BASE_T 1
#define HALF_DUPLEX_100_BASE_T 2
#define FULL_DUPLEX_10_BASE_T 5
#define FULL_DUPLEX_100_BASE_T 6

if((RegValue & FULL_DUPLEX_100_BASE_T) == FULL_DUPLEX_100_BASE_T)
{
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
}
else if((RegValue & FULL_DUPLEX_10_BASE_T) == FULL_DUPLEX_10_BASE_T)
{
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
}
else if((RegValue & HALF_DUPLEX_100_BASE_T) == HALF_DUPLEX_100_BASE_T)
{
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
}
else if((RegValue & HALF_DUPLEX_10_BASE_T) == HALF_DUPLEX_10_BASE_T)
{
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
}


Ну, и сам регистр - в stm32f2x7_eth_conf.h изменить на 0x1E:
Код
#define PHY_SR    ((uint16_t)0x1e)


Сообщение отредактировал IgorKossak - Dec 23 2014, 08:45
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
fault-tolerant
сообщение Jan 19 2015, 08:18
Сообщение #20





Группа: Новичок
Сообщений: 5
Регистрация: 22-12-14
Пользователь №: 84 236



Все еще никаких проблесков. Пытался изменить 100/10, Full/Half, проверял еше раз, что драйвер не вылетает ни на одном эксепшене... С задержкой в 10мс после каждого пакета ситуация с вебом, на пример, сносная, но все равно иногда на пару секунд зависает, ретрансмиты и т.д... Ну, а без этих задержек оно только ретрансмитами и занимается. И как поймать дебагером, когда именно оно глючит, не пойму..

Цитата(Golikov A. @ Dec 23 2014, 08:33) *
а в драйверах проверили функцию посылки данных? Проследите всю цепочку посылки пакета (от формирования данных до выдачи в мак), иногда на нижнем уровне ошибки передачи заглушены 0 кодом без обработки. Потому ваш стэк думает что послал, а на самом деле что-то не пошло. По описанию больше похоже на программную ошибку....

Что мог, проследил... Уже давно тыкаюсь. Когда слежу, судя по всему, что я вижу, посылает прекрасно. А вот как поймать сбой - до сих пор не пойму. в мыслях я уже тоже вернулся к взможности програмной ошибки как самой реальной, но не ловится крокодил.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 19 2015, 17:13
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надо не за программой следить, надо текст почитать и найти все коды возвращаемых ошибок. И проанализировать, не стоит ли где на ошибку вернуть ошибки нет...
Go to the top of the page
 
+Quote Post
fault-tolerant
сообщение Jan 22 2015, 05:24
Сообщение #22





Группа: Новичок
Сообщений: 5
Регистрация: 22-12-14
Пользователь №: 84 236



Так вот, взяв совершенно другой проэкт от ST с веб сервером на LwIP и без операционной системы, из моего используя только BSP, получаю тот же результат. То есть, проблема явно в настройках MAC или PHY, включая DMA. Прекрасная програмка tcping с опциями -t -h показывает, что чем больше пакетов передается (по типу http страницы), тем больше шансов "на застрять".
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:29
Рейтинг@Mail.ru


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