Перейти к содержанию
    

Fobes

Участник
  • Постов

    37
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Fobes

  • Звание
    Участник
    Участник
  1. Брал коммутатор за 30к, итог тот же... Само собой) Отлаживается потеря пакетов. Непонятно из-за чего происходящая. А как происходит передача пакета из озу в phy ? Использую SPL и LwIp. Пакет пишется в дискриптор, потом его DMA уже переносит в физику ? А физика уже должна думать, отправлять сейчас или подождать, так ? Или задержка при одновременной отправке пакетов с нескольких сторон управляется mac уровнем ? Куда копать ? В настройку phy или с отправкой что-то не то ?
  2. Чистый пакет 125 байт с частотой 4 кГц'а. От длины не зависит. В роутер также втыкалось промышленное устройство, генерирующее такой же поток данных что и мое. При проверке, поток пром. устройства был полон, а мой по прежнему с дырками. Пакеты ловил не шарком, а другой программой, хотя все равно все на pcap'е писалось. Первые два варианта отпадают. А вот про третий интересно... можно более подробно ? Это режим когда два пакета одновременно отправиться не могут чтоли ?
  3. Втыкаем дискавери напрямую в комп и смотрим номера пакетов, ничего не теряется, все хорошо. Берем роутер, к роутеру подключаем комп и дискавери, также роутер подключен к интернету. Запускаем данные с дискавери и смотрим, потерь опять же нет. Но стоит дать какую-либо нагрузку, т.е. запустить торрент на компе, включить онлайн фильм, то пакеты начинают теряться, причем количество потерь увеличивается с наращиванием нагрузки... дискавери генерирует около 4Мбит в локальную сеть... Так понятнее ? Как-будто передача начинается в то время, когда роутер еще не разрешил ее... Есть идеи ?
  4. Заменил DP83840 на офф. плату расширения для дискавери с LAN8720 на борту... Проблема осталась по прежнему... Если воткнуть напрямую в комп, потерь нет, если воткнуть в роутер, тоже нет, но вот если при этом начать качать скажем торрент на 4Мбита, просто начинают пропадать пакеты. Явно что-то не синхронно работает, подскажите, куда копать ? Где-то должен быть бит на разрешение передачи чтоли ? Где искать чего почитать ? Помогите плиз :( На данный момент отправка производится функцией low_level_output из библиотеки LwIp :( хелп :(
  5. Провода уменьшил по минимуму, чтобы только воткнуть можно было, отправку пакетов перенес в главный цикл. Терять стал чуть меньше, но все равно в очень больших количествах. Что еще проверить ? :( Подкиньте плиз инфы как затактировать MAC от генератора PHY, гугл ничего не показал. Кто-нибудь пробовал работать на таких скоростях ? Постоянный поток данных в 4Мбита идет с STM... Как только появляется еще один такой в локальной сети, начинается потеря пакетов :(
  6. Может всетаки мне поможете... Письками то можно всегда помериться...
  7. А можно ссылку со страницей, а то никак не могу найти :( Сейчас модуль подключен вот так Окай, сейчас перенесу в главный цикл отправку. Длина - понятие относительное. Сейчас модуль подключен 20 сантиметровыми проводами, это много ?
  8. Собственно проверил все. В 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МГц. Может проблема в принципе отправки ? отправка пакета происходит в прерывании по окончании передачи ДМА ацп. Если поставить небольшую нагрузку, то теряется один пакет в минуту примерно, если подзагрузить сеть то теряется уже очень много... причем их просто нет, шарк их вообще не видит(т.е. нет ни не верной контрольно, ни ошибок, просто нет всего пакета). Ай нид хелп, плиз :(
  9. Вы не dp83848 используете ? не покажете кусок кода где phy конфигурируете ?
  10. В функции 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(&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); } Нет, у меня не на транспортном уровне все, а на канальном, т.е. ethernet пакет + vlan tag + специализированный протокол.
  11. stm32f4 ethernet потеря пакетов

    Всем доброго времени суток. Собственно заметил такую проблему. Отправляю пакеты в сеть на скорости в 4Мбита/c. использую low_level_output для отправки пакетов. при отправке нет никаких ошибок и не возникают вообще, но вот с повышением нагрузки, другими словами, если втыкаю плату в роутер, в котором уже около 4 мбит, то получаю что тупо теряются пакеты... в шарке их попросту нет, но ошибок при отправке никаких нет... физика: dp83848 ... что-то совсем в ступоре и не знаю даже куда копать... помогите идеями :(
  12. stm32F407 timer trigger adc

    Всем доброго времени суток. Уже совсем замучался, прощу помощи... АЦП1 запускается от триггера таймера Т3(по обновлению). Есть еще один таймер Т5, который по переполнению, сбрасывает Т3 и в этот же момент нужно произвести оцифровку(это пытаюсь сделать программно в прерывании, можно ли так ?) ... Т5 тикает раз в секунду и служит для синхронизации... В момент начала новой секунды должна производиться оцифровка... Но толи эта нулевая оцифровка не происходит, толи я что-то не так делаю или не понимаю... Помогите, плиз, может это как-то более умно можно сделать ? Строчка с вопросом в коде прокомментирована :((( //часть настройки АЦП ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO; void TIM5_IRQHandler() { if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) { ADC1->CR2 |= (uint32_t)ADC_CR2_SWSTART; // вроде как это должно запустить оцифровку, но есть, эта строчка, нет, ничего не меняется, число выборок не увеличивается... Что я делаю не так ? Как сделать верно ? помогите плиз :( TIM_ClearITPendingBit(TIM5, TIM_IT_Update); } }
  13. stm32f4 таймер. захват.

    Вопрос по прежнему актуален... Почему таймер срабатывает по триггеру, хотя у него он не выбран ?
  14. stm32f4 вопросы по таймеру

    Всем привет. Собственно возникла пара вопросов по таймеру. Не могу разобраться, объясните плиз. 1. Таймер работает в режиме захвата. Можно ли генерировать триггер по захвату канала ? 2. Таймер генерирует триггер по переполнению... TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); Можно ли вызвать срабатывание программно ? Что триггер ушел и таймер начал считать с нуля... ? И каким образом ? Не пинайте начинающего плиз...
  15. stm32f4 таймер. захват.

    void second_timer_config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseInitStructure.TIM_Prescaler = 0; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 84000000; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); } Если убрать данный код, все работает верно... Объясните мне, где косяк, как вылечить ?
×
×
  • Создать...