Fobes 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба Всем доброго времени суток. Собственно заметил такую проблему. Отправляю пакеты в сеть на скорости в 4Мбита/c. использую low_level_output для отправки пакетов. при отправке нет никаких ошибок и не возникают вообще, но вот с повышением нагрузки, другими словами, если втыкаю плату в роутер, в котором уже около 4 мбит, то получаю что тупо теряются пакеты... в шарке их попросту нет, но ошибок при отправке никаких нет... физика: dp83848 ... что-то совсем в ступоре и не знаю даже куда копать... помогите идеями :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба Дуплекс надо проверить для начала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба ...Отправляю пакеты в сеть... помогите идеями :( пакеты - это имеется ввиду IP пакеты? ну дык имеют право теряться. кто теряет - тот не справляется. наверное надо понять критерий киляния их у того кто их киляет. для ловли анализатором - надо учитывать, что роутеры могут резать трафик не предназначенный другим адресам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fobes 0 18 мая, 2016 Опубликовано 18 мая, 2016 (изменено) · Жалоба Дуплекс надо проверить для начала. В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего :( Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ? #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(Ð_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(Ð_InitStructure, DP83848_PHY_ADDRESS); /* Enable the Ethernet Rx Interrupt */ //ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE); } пакеты - это имеется ввиду IP пакеты? Нет, у меня не на транспортном уровне все, а на канальном, т.е. ethernet пакет + vlan tag + специализированный протокол. Изменено 18 мая, 2016 пользователем Fobes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
desh 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба физика: dp83848 ... что-то совсем в ступоре и не знаю даже куда копать... помогите идеями :( Некоторое время назад столкнулся с подобной проблемой. Затактировал физику в режиме RMII от PLL STM. А еррату на камень предварительно естественно не почитал. Было похожее поведение. В одних сетях работает стабильно в других идет потеря линка. Долго копал софт, потом почитал еррату, поставил внешний генератор и как бабушка пошептала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexp74 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего :( Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ? Должны быть из хэдеров на stm32. Hal сам пропишет в физику. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба В функции ETH_MACDMA_Config заданы вот такие параметры... Возможно я сейчас задам очень глупый вопрос, но не пинайте начинающего :( Значения ETH_Speed_100M, ETH_Mode_FullDuplex и т.д. должны быть стандартными для stm32F4 или же они берутся из даташита на физику ? Или же нужно прописывать непосредственно в физику настройки через ETH_WritePHYRegister ? Не знаю я, что такое ETH_MACDMA_Config. У себя опрашиваю PHY. Когда он сообщает, что соединился, спрашиваю у него скорость и дуплекс, потом конфигурирую MAC. После разрыва соединения начинаю всё это снова. А что там наговнокодили индусы из ST - мне не ведомо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fobes 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба Не знаю я, что такое ETH_MACDMA_Config. У себя опрашиваю PHY. Когда он сообщает, что соединился, спрашиваю у него скорость и дуплекс, потом конфигурирую MAC. После разрыва соединения начинаю всё это снова. А что там наговнокодили индусы из ST - мне не ведомо. Вы не dp83848 используете ? не покажете кусок кода где phy конфигурируете ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба Вы не dp83848 используете ? не покажете кусок кода где phy конфигурируете ? У меня KSZ8081RNA. И я его не конфигурирую - после включения он уже в правильном состоянии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 3 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба Некоторое время назад столкнулся с подобной проблемой. Затактировал физику в режиме RMII от PLL STM. А еррату на камень предварительно естественно не почитал. Было похожее поведение. В одних сетях работает стабильно в других идет потеря линка. Долго копал софт, потом почитал еррату, поставил внешний генератор и как бабушка пошептала. Да я тоже попался на этом PLL, именно от STM физика: dp83848; ерата у них тогда была одна для F2 семейства по джиттеру этого PLL ( в F1 такого нет, там все ок с PLL и 10/100) и все это переползло в F3, F4 и похоже в F7. Но я решил немного проще и дешевле, на dp83848 поставил кварц 50Мгц (обязательно фундаменталка!), благо такие уже давно есть в 3225, 2516 корпусах. У меня обнаружилось только на 100, на 10 с PLL проходил без проблем и потерь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба Да я тоже попался на этом 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
desh 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба в F1 такого нет, там все ок с PLL и 10/100 Вы уверены? В еррате конечно нет, но по факту ИМХО немножечко все таки есть. Причем у разных кристаллов по разному. В одной партии из 10 одинаковых изделий 3 имели проблемы по связи в некоторых сетях. Статистики по 107 с внешним генератором не собрал, т.к. не самое ходовое поделие. Повторюсь, что это только мнение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 3 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба Вы уверены? В еррате конечно нет, но по факту ИМХО немножечко все таки есть. Причем у разных кристаллов по разному. В одной партии из 10 одинаковых изделий 3 имели проблемы по связи в некоторых сетях. Статистики по 107 с внешним генератором не собрал, т.к. не самое ходовое поделие. Повторюсь, что это только мнение. Нет там такого, проверяли. За 4 года серийного выпуска со 107-м ничего не выявило. Может немножечко все таки есть, но в стандарт уложились, джиттер у них в норме, поскольку по правильному следали плл, в отличие от старших в этом месте. Ну и физика DP83848 дешевле получалась, чем KSZ8081RNA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба ...Но я решил немного проще и дешевле, на dp83848 поставил кварц 50Мгц (обязательно фундаменталка!), благо такие уже давно есть в 3225, 2516 корпусах. У меня обнаружилось только на 100, на 10 с PLL проходил без проблем и потерь. Может не кварц все-таки, а генератор?? Кварц на 50МГц? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
desh 0 19 мая, 2016 Опубликовано 19 мая, 2016 · Жалоба для F2 семейства по джиттеру этого PLL и все это переползло в F3, F4 и похоже в F7 поскольку по правильному следали плл, в отличие от старших в этом месте Что то странное у них в таком случае с разработкой, если с первого раза сделали правильно, а потом вот уже 4 семейства они это решение повторить не могут :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться