Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f4 ethernet потеря пакетов
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Fobes
Всем доброго времени суток. Собственно заметил такую проблему. Отправляю пакеты в сеть на скорости в 4Мбита/c. использую low_level_output для отправки пакетов. при отправке нет никаких ошибок и не возникают вообще, но вот с повышением нагрузки, другими словами, если втыкаю плату в роутер, в котором уже около 4 мбит, то получаю что тупо теряются пакеты... в шарке их попросту нет, но ошибок при отправке никаких нет... физика: dp83848 ... что-то совсем в ступоре и не знаю даже куда копать... помогите идеями sad.gif
scifi
Дуплекс надо проверить для начала.
kolobok0
Цитата(Fobes @ May 18 2016, 22:17) *
...Отправляю пакеты в сеть... помогите идеями sad.gif


пакеты - это имеется ввиду IP пакеты?
ну дык имеют право теряться. кто теряет - тот не справляется. наверное надо понять критерий киляния их у того кто их киляет.

для ловли анализатором - надо учитывать, что роутеры могут резать трафик не предназначенный другим адресам.
Fobes
Цитата(scifi @ May 18 2016, 20:37) *
Дуплекс надо проверить для начала.

В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего sad.gif Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ?

CODE

#define ETH_AutoNegotiation_Disable ((uint32_t)0x00000000)
#define ETH_Speed_100M ((uint32_t)0x00004000)
#define ETH_Mode_FullDuplex ((uint32_t)0x00000800)


static void ETH_MACDMA_Config(void)
{
ETH_InitTypeDef ETH_InitStructure;

/* Reset ETHERNET on AHB Bus */
ETH_DeInit();

/* Software reset */
ETH_SoftwareReset();

/* Wait for software reset */
while (ETH_GetSoftwareResetStatus() == SET);

/* ETHERNET Configuration --------------------------------------------------*/
/* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
ETH_StructInit(&ETH_InitStructure);

/* Fill ETH_InitStructure parametrs */
/*------------------------ MAC -----------------------------------*/
//ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;

ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Enable;
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_None;
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
#ifdef CHECKSUM_BY_HARDWARE
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
#endif

/*------------------------ DMA -----------------------------------*/

/* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;

ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;

/* Configure Ethernet */
EthInitStatus = ETH_Init(&ETH_InitStructure, DP83848_PHY_ADDRESS);

/* Enable the Ethernet Rx Interrupt */
//ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
}



Цитата(kolobok0 @ May 18 2016, 20:48) *
пакеты - это имеется ввиду IP пакеты?


Нет, у меня не на транспортном уровне все, а на канальном, т.е. ethernet пакет + vlan tag + специализированный протокол.
desh
Цитата(Fobes @ May 18 2016, 22:17) *
физика: dp83848 ... что-то совсем в ступоре и не знаю даже куда копать... помогите идеями sad.gif


Некоторое время назад столкнулся с подобной проблемой. Затактировал физику в режиме RMII от PLL STM. А еррату на камень предварительно естественно не почитал. Было похожее поведение. В одних сетях работает стабильно в других идет потеря линка. Долго копал софт, потом почитал еррату, поставил внешний генератор и как бабушка пошептала.
alexp74
Цитата(Fobes @ May 18 2016, 23:32) *
В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего sad.gif Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ?

Должны быть из хэдеров на stm32. Hal сам пропишет в физику.
scifi
Цитата(Fobes @ May 18 2016, 23:32) *
В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего sad.gif Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ?

Не знаю я, что такое ETH_MACDMA_Config.
У себя опрашиваю PHY. Когда он сообщает, что соединился, спрашиваю у него скорость и дуплекс, потом конфигурирую MAC. После разрыва соединения начинаю всё это снова.
А что там наговнокодили индусы из ST - мне не ведомо.
Fobes
Цитата(scifi @ May 19 2016, 07:53) *
Не знаю я, что такое ETH_MACDMA_Config.
У себя опрашиваю PHY. Когда он сообщает, что соединился, спрашиваю у него скорость и дуплекс, потом конфигурирую MAC. После разрыва соединения начинаю всё это снова.
А что там наговнокодили индусы из ST - мне не ведомо.


Вы не dp83848 используете ? не покажете кусок кода где phy конфигурируете ?
scifi
Цитата(Fobes @ May 19 2016, 12:17) *
Вы не dp83848 используете ? не покажете кусок кода где phy конфигурируете ?

У меня KSZ8081RNA. И я его не конфигурирую - после включения он уже в правильном состоянии.
Aner
QUOTE (desh @ May 19 2016, 09:36) *
Некоторое время назад столкнулся с подобной проблемой. Затактировал физику в режиме RMII от PLL STM. А еррату на камень предварительно естественно не почитал. Было похожее поведение. В одних сетях работает стабильно в других идет потеря линка. Долго копал софт, потом почитал еррату, поставил внешний генератор и как бабушка пошептала.

Да я тоже попался на этом PLL, именно от STM физика: dp83848; ерата у них тогда была одна для F2 семейства по джиттеру этого PLL ( в F1 такого нет, там все ок с PLL и 10/100) и все это переползло в F3, F4 и похоже в F7. Но я решил немного проще и дешевле, на dp83848 поставил кварц 50Мгц (обязательно фундаменталка!), благо такие уже давно есть в 3225, 2516 корпусах. У меня обнаружилось только на 100, на 10 с PLL проходил без проблем и потерь.
scifi
Цитата(Aner @ May 19 2016, 12:43) *
Да я тоже попался на этом PLL, именно от STM физика: dp83848; ерата у них тогда была одна для F2 семейства по джиттеру этого PLL ( в F1 такого нет, там все ок с PLL и 10/100) и все это переползло в F3, F4 и похоже в F7. Но я решил немного проще и дешевле, на dp83848 поставил кварц 50Мгц (обязательно фундаменталка!), благо такие уже давно есть в 3225, 2516 корпусах. У меня обнаружилось только на 100, на 10 с PLL проходил без проблем и потерь.

У меня изначально сделано так: на STM32 стоит кварц 25 МГц, эта частота через MCO идёт на KSZ8081RNA, в свою очередь KSZ8081RNA умножает частоту и выдаёт 50 МГц для тактирования интерфейса RMII у STM32. Я не нарочно, но так получилось, что беда с джиттером PLL обошла меня стороной laughing.gif
desh
Цитата(Aner @ May 19 2016, 12:43) *
в F1 такого нет, там все ок с PLL и 10/100


Вы уверены? В еррате конечно нет, но по факту ИМХО немножечко все таки есть. Причем у разных кристаллов по разному.
В одной партии из 10 одинаковых изделий 3 имели проблемы по связи в некоторых сетях. Статистики по 107 с внешним генератором не собрал, т.к. не самое ходовое поделие.
Повторюсь, что это только мнение.

Aner
QUOTE (desh @ May 19 2016, 14:36) *
Вы уверены? В еррате конечно нет, но по факту ИМХО немножечко все таки есть. Причем у разных кристаллов по разному.
В одной партии из 10 одинаковых изделий 3 имели проблемы по связи в некоторых сетях. Статистики по 107 с внешним генератором не собрал, т.к. не самое ходовое поделие.
Повторюсь, что это только мнение.

Нет там такого, проверяли. За 4 года серийного выпуска со 107-м ничего не выявило. Может немножечко все таки есть, но в стандарт уложились, джиттер у них в норме, поскольку по правильному следали плл, в отличие от старших в этом месте. Ну и физика DP83848 дешевле получалась, чем KSZ8081RNA.
AleksBak
Цитата(Aner @ May 19 2016, 13:43) *
...Но я решил немного проще и дешевле, на dp83848 поставил кварц 50Мгц (обязательно фундаменталка!), благо такие уже давно есть в 3225, 2516 корпусах. У меня обнаружилось только на 100, на 10 с PLL проходил без проблем и потерь.

Может не кварц все-таки, а генератор?? Кварц на 50МГц?
desh
Цитата(Aner)
для F2 семейства по джиттеру этого PLL и все это переползло в F3, F4 и похоже в F7
поскольку по правильному следали плл, в отличие от старших в этом месте


Что то странное у них в таком случае с разработкой, если с первого раза сделали правильно, а потом вот уже 4 семейства они это решение повторить не могут :-)
Aner
QUOTE (desh @ May 19 2016, 17:21) *
Что то странное у них в таком случае с разработкой, если с первого раза сделали правильно, а потом вот уже 4 семейства они это решение повторить не могут :-)

Да нет, болезнь роста. Архитектуру навертели покруче, а делители, плл и тп профукали по джиттеру. Вот все и жуют их эраты...

QUOTE (AleksBak @ May 19 2016, 16:08) *
Может не кварц все-таки, а генератор?? Кварц на 50МГц?

Нет, ему питание подвоить места не нашлось, да и лишние миллиамперы не нужны были, внутренний генератор DP83848 нормально тянет кварц 50Мгц на основной гармонике.
Fobes
Цитата(scifi @ May 18 2016, 19:37) *
Дуплекс надо проверить для начала.


Собственно проверил все. В MAC включил авто определение параметров(AutoNegotiation). После настройки посмотрел статусный регистр PHYSTS на физике, посмотрел по даташиту на микруху, получилось так, вроде все в порядке...
b0 1 = Valid link established (for either 10 or 100 Mb/s operation) ;
b1 0 = 100 Mb/s mode;
b2 1 = Full duplex mode
b4 1 = Auto-Negotiation complete
b8 1 = A new Link Code Word Page has been received. Cleared on read of the ANER (address 0x06, bit 1)

Что еще проверить ? Использую покупную DP83848 Ethernet Board плату, на ней уже стоит кварц на 50МГц.

Может проблема в принципе отправки ? отправка пакета происходит в прерывании по окончании передачи ДМА ацп. Если поставить небольшую нагрузку, то теряется один пакет в минуту примерно, если подзагрузить сеть то теряется уже очень много... причем их просто нет, шарк их вообще не видит(т.е. нет ни не верной контрольно, ни ошибок, просто нет всего пакета).

Ай нид хелп, плиз sad.gif
AleksBak
Это не кварц. Это генератор. Вы должны использовать его частоту для тактирования внутреннего MAC в контроллере. Т.е. 50Мгц с генератора подать обратно в контроллер. Как подключать - написано в референс-мануале. Используйте проводники минимально возможной длины. А насчет "лишних миллиамперов" - то этот "слон" DP83848 жрет под 130 мА и на этом фоне потребление генератора вообще незаметно.
scifi
Цитата(Fobes @ May 19 2016, 23:13) *
отправка пакета происходит в прерывании

Нельзя в прерывании.
Я бы дал ссылку на документацию на lwip, но её почти нет.
Огурцов
dp83848 не работает на 100мбит на длинных проводах, проверьте - переключите на 10
или максимально уменьшите длину шлейфа,
или возьмите lan
Fobes
Цитата(AleksBak @ May 20 2016, 07:57) *
Это не кварц. Это генератор. Вы должны использовать его частоту для тактирования внутреннего MAC в контроллере. Т.е. 50Мгц с генератора подать обратно в контроллер. Как подключать - написано в референс-мануале. Используйте проводники минимально возможной длины. А насчет "лишних миллиамперов" - то этот "слон" DP83848 жрет под 130 мА и на этом фоне потребление генератора вообще незаметно.


А можно ссылку со страницей, а то никак не могу найти sad.gif Сейчас модуль подключен вот так



Цитата(scifi @ May 20 2016, 08:27) *
Нельзя в прерывании.
Я бы дал ссылку на документацию на lwip, но её почти нет.


Окай, сейчас перенесу в главный цикл отправку.


Цитата(Огурцов @ May 21 2016, 08:49) *
dp83848 не работает на 100мбит на длинных проводах, проверьте - переключите на 10
или максимально уменьшите длину шлейфа,
или возьмите lan


Длина - понятие относительное. Сейчас модуль подключен 20 сантиметровыми проводами, это много ?
Aner
QUOTE (Огурцов @ May 21 2016, 12:49) *
dp83848 не работает на 100мбит на длинных проводах, проверьте - переключите на 10
или максимально уменьшите длину шлейфа,
или возьмите lan

У меня работает dp83848 на 120 метрах кабеля 5кат на 100 Mb/s. Проверял спецом на 150 метрах, без проблем. Причем кучи устройств.
Вероятно это противоречит вашим утверждениям.
... думаю, что вы банально не разобрались, возможно это не ваша тема.
Огурцов
Цитата(Aner @ May 21 2016, 21:19) *
Вероятно это противоречит вашим утверждениям

нет, это не противоречит моим утверждениям, мои утверждения верны, ибо они всесильны

Цитата(Aner @ May 21 2016, 21:19) *
... думаю, что вы банально не разобрались

думаю, что вы банально не разобрались

Цитата(Aner @ May 21 2016, 21:19) *
возможно это не ваша тема.

да, это тема fobes
Fobes
Цитата(Fobes @ May 21 2016, 13:33) *



Может всетаки мне поможете... Письками то можно всегда помериться...
scifi
Цитата(Fobes @ May 21 2016, 15:33) *
Длина - понятие относительное. Сейчас модуль подключен 20 сантиметровыми проводами, это много ?

Это сигналы RMII бегут по 20-сантиметровым проводам? Если да, то я бы ждал чудес.
Огурцов
Цитата(Fobes @ May 22 2016, 09:28) *
Может всетаки мне поможете...

мы уже
а вы что сделали для ?
Fobes
Цитата(scifi @ May 22 2016, 10:07) *
Это сигналы RMII бегут по 20-сантиметровым проводам? Если да, то я бы ждал чудес.


Провода уменьшил по минимуму, чтобы только воткнуть можно было, отправку пакетов перенес в главный цикл. Терять стал чуть меньше, но все равно в очень больших количествах. Что еще проверить ? sad.gif Подкиньте плиз инфы как затактировать MAC от генератора PHY, гугл ничего не показал. Кто-нибудь пробовал работать на таких скоростях ? Постоянный поток данных в 4Мбита идет с STM... Как только появляется еще один такой в локальной сети, начинается потеря пакетов sad.gif
Fobes
Заменил DP83840 на офф. плату расширения для дискавери с LAN8720 на борту... Проблема осталась по прежнему... Если воткнуть напрямую в комп, потерь нет, если воткнуть в роутер, тоже нет, но вот если при этом начать качать скажем торрент на 4Мбита, просто начинают пропадать пакеты. Явно что-то не синхронно работает, подскажите, куда копать ? Где-то должен быть бит на разрешение передачи чтоли ? Где искать чего почитать ? Помогите плиз sad.gif На данный момент отправка производится функцией low_level_output из библиотеки LwIp sad.gif хелп sad.gif
pitt
Цитата(Fobes @ Jun 8 2016, 06:28) *
Если воткнуть напрямую в комп, потерь нет, если воткнуть в роутер, тоже нет, но вот если при этом начать качать скажем торрент на 4Мбита, просто начинают пропадать пакеты.


Что-то я, извините, не понимаю.
Fobes
Цитата(pitt @ Jun 8 2016, 12:26) *
Что-то я, извините, не понимаю.


Втыкаем дискавери напрямую в комп и смотрим номера пакетов, ничего не теряется, все хорошо. Берем роутер, к роутеру подключаем комп и дискавери, также роутер подключен к интернету. Запускаем данные с дискавери и смотрим, потерь опять же нет. Но стоит дать какую-либо нагрузку, т.е. запустить торрент на компе, включить онлайн фильм, то пакеты начинают теряться, причем количество потерь увеличивается с наращиванием нагрузки... дискавери генерирует около 4Мбит в локальную сеть... Так понятнее ? Как-будто передача начинается в то время, когда роутер еще не разрешил ее... Есть идеи ?
LightElf
QUOTE (Fobes @ Jun 8 2016, 17:06) *
Втыкаем дискавери напрямую в комп и смотрим номера пакетов, ничего не теряется, все хорошо. Берем роутер, к роутеру подключаем комп и дискавери, также роутер подключен к интернету. Запускаем данные с дискавери и смотрим, потерь опять же нет. Но стоит дать какую-либо нагрузку, т.е. запустить торрент на компе, включить онлайн фильм, то пакеты начинают теряться, причем количество потерь увеличивается с наращиванием нагрузки... дискавери генерирует около 4Мбит в локальную сеть... Так понятнее ? Как-будто передача начинается в то время, когда роутер еще не разрешил ее... Есть идеи ?

Пакеты какого размера? Зависит ли проблема от длины пакета?
Предположения:
1) Роутер не справляется. Например у него в свиче нет аппаратной поддержки vlan, выполняется эмуляция на процессоре.
2) Ноут не справляется. wireshark переключает сетевушку в promiscous mode и начинает фильтровать пакеты софтверно. Торрент/фильм создают тучу пакетов и шарк захлебывается.
3) Ваш девайс анонсирует поддержку flow control, но реально pause frame не обрабатывает.
Fobes
Цитата(LightElf @ Jun 8 2016, 14:56) *
Пакеты какого размера? Зависит ли проблема от длины пакета?
Предположения:
1) Роутер не справляется. Например у него в свиче нет аппаратной поддержки vlan, выполняется эмуляция на процессоре.
2) Ноут не справляется. wireshark переключает сетевушку в promiscous mode и начинает фильтровать пакеты софтверно. Торрент/фильм создают тучу пакетов и шарк захлебывается.
3) Ваш девайс анонсирует поддержку flow control, но реально pause frame не обрабатывает.


Чистый пакет 125 байт с частотой 4 кГц'а. От длины не зависит. В роутер также втыкалось промышленное устройство, генерирующее такой же поток данных что и мое. При проверке, поток пром. устройства был полон, а мой по прежнему с дырками. Пакеты ловил не шарком, а другой программой, хотя все равно все на pcap'е писалось. Первые два варианта отпадают. А вот про третий интересно... можно более подробно ? Это режим когда два пакета одновременно отправиться не могут чтоли ?
pitt
Очевидно, что проблемы с софтом, а не с железом. Попробуйте найти и поставить тупой хаб, может роутер слишком умный...
scifi
Цитата(pitt @ Jun 8 2016, 20:22) *
Очевидно, что проблемы с софтом, а не с железом. Попробуйте найти и поставить тупой хаб, может роутер слишком умный...

Рубрика "вредные советы"? Ню-ню. Хаб точно от торрента захлебнётся - к гадалке не ходи.
pitt
Цитата(scifi @ Jun 8 2016, 13:30) *
Рубрика "вредные советы"? Ню-ню. Хаб точно от торрента захлебнётся - к гадалке не ходи.

а тут торрент отлаживается или что-то иное? А нагрузить линию можно и без торрента.
scifi
Цитата(pitt @ Jun 8 2016, 21:54) *
а тут торрент отлаживается или что-то иное?

Строго говоря, тут ничего не отлаживается. Тут пляски с бубном. laughing.gif
Fobes
Цитата(pitt @ Jun 8 2016, 17:22) *
Очевидно, что проблемы с софтом, а не с железом. Попробуйте найти и поставить тупой хаб, может роутер слишком умный...


Брал коммутатор за 30к, итог тот же...

Цитата(pitt @ Jun 8 2016, 18:54) *
а тут торрент отлаживается или что-то иное? А нагрузить линию можно и без торрента.

Само собой) Отлаживается потеря пакетов. Непонятно из-за чего происходящая.

А как происходит передача пакета из озу в phy ? Использую SPL и LwIp. Пакет пишется в дискриптор, потом его DMA уже переносит в физику ? А физика уже должна думать, отправлять сейчас или подождать, так ? Или задержка при одновременной отправке пакетов с нескольких сторон управляется mac уровнем ? Куда копать ? В настройку phy или с отправкой что-то не то ?
pitt
Цитата(Fobes @ Jun 8 2016, 16:15) *
В настройку phy или с отправкой что-то не то ?

если напрямую все в порядке, то с физикой нет проблем. Настройки phy смотреть можно, но это, скорее, настройки mac, а еще скорее, роутера. Потому и сказал взять тупой хаб.
LightElf
QUOTE (Fobes @ Jun 8 2016, 18:40) *
Чистый пакет 125 байт с частотой 4 кГц'а. От длины не зависит. В роутер также втыкалось промышленное устройство, генерирующее такой же поток данных что и мое. При проверке, поток пром. устройства был полон, а мой по прежнему с дырками. Пакеты ловил не шарком, а другой программой, хотя все равно все на pcap'е писалось. Первые два варианта отпадают. А вот про третий интересно... можно более подробно ? Это режим когда два пакета одновременно отправиться не могут чтоли ?

Регистр PHY 4h, биты 10:11 сообщают партнеру, поддерживает ли устройство pause frames. Регистр ETH_MACFCR у STM32 управляет обработкой этих самых pause frames. Ессно регистры должны быть между собой согласованы. Т.е. ежели PHY сообщает партнеру о поддержке pause, то в MAC должна быть включена обработка таких пакетов. Иначе картина маслом: роутер занят, он отсылает девайсу команду заткнуться и перестает принимать от него пакеты. Девайс команду игнорирует и продолжает отправлять данные. Итого: пакеты теряются.
iosifk
Цитата(Fobes @ Jun 8 2016, 23:15) *
Пакет пишется в дискриптор, потом его DMA уже переносит в физику ? А физика уже должна думать, отправлять сейчас или подождать, так ? Или задержка при одновременной отправке пакетов с нескольких сторон управляется mac уровнем ? Куда копать ? В настройку phy или с отправкой что-то не то ?

Вообще физика - если это просто трансивер, то она работает насквозь, т.е она что получила от МАСа, то и выплюнула в линию. Она ничего не умеет, ни " думать, отправлять сейчас или подождать". Это может делать свитч, т.е. прансивер отсылает ему пакет, а он накапливает у себя пакет, если линия занята... Но это работает только в дуплексе от физики до свитча...
Из физики можно прочесть, свободна ли линия и дать команду на передачу. А если было столкновение в линии, то перезапустить пакет..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.