|
STM32F107RCT6 + KSZ8721 (ethernet) |
|
|
|
May 11 2018, 04:24
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 19-10-16
Пользователь №: 93 818

|
Пытаюсь запустить эзернет на МК. В качестве внешнего PHY использую KSZ8721. Задача следующая: сформировать пакет определенной структуры (т.е. условно 20-28 байт параметр1, 29-36 байт параметр2, 37-50 параметр3 и т.д.), записать в эти параметры значения с АЦП и передать определенное количество пакетов в секунду. Подключение MII, режим full duplex. Собственно в связи с вышеизложенным следующие вопросы: 1. Каким образом можно сформировать произвольную структуру пакета? 2. Будет ли достаточно для данных целей обычной инициализации эзернета в кубе и передачи пакетов функцией HAL_ETH_TransmitFrame()? Код функции представлен ниже. Код /** * @brief Sends an Ethernet frame. * @param heth: pointer to a ETH_HandleTypeDef structure that contains * the configuration information for ETHERNET module * @param FrameLength: Amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength) { uint32_t bufcount = 0U, size = 0U, i = 0U; /* Process Locked */ __HAL_LOCK(heth); /* Set the ETH peripheral state to BUSY */ heth->State = HAL_ETH_STATE_BUSY; if (FrameLength == 0U) { /* Set ETH HAL state to READY */ heth->State = HAL_ETH_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(heth); return HAL_ERROR; } /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */ if(((heth->TxDesc)->Status & ETH_DMATXDESC_OWN) != (uint32_t)RESET) { /* OWN bit set */ heth->State = HAL_ETH_STATE_BUSY_TX; /* Process Unlocked */ __HAL_UNLOCK(heth); return HAL_ERROR; } /* Get the number of needed Tx buffers for the current frame */ if (FrameLength > ETH_TX_BUF_SIZE) { bufcount = FrameLength/ETH_TX_BUF_SIZE; if (FrameLength % ETH_TX_BUF_SIZE) { bufcount++; } } else { bufcount = 1U; } if (bufcount == 1U) { /* Set LAST and FIRST segment */ heth->TxDesc->Status |=ETH_DMATXDESC_FS|ETH_DMATXDESC_LS; /* Set frame size */ heth->TxDesc->ControlBufferSize = (FrameLength & ETH_DMATXDESC_TBS1); /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ heth->TxDesc->Status |= ETH_DMATXDESC_OWN; /* Point to next descriptor */ heth->TxDesc= (ETH_DMADescTypeDef *)(heth->TxDesc->Buffer2NextDescAddr); } else { for (i=0U; i< bufcount; i++) { /* Clear FIRST and LAST segment bits */ heth->TxDesc->Status &= ~(ETH_DMATXDESC_FS | ETH_DMATXDESC_LS); if (i == 0U) { /* Setting the first segment bit */ heth->TxDesc->Status |= ETH_DMATXDESC_FS; } /* Program size */ heth->TxDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATXDESC_TBS1); if (i == (bufcount-1U)) { /* Setting the last segment bit */ heth->TxDesc->Status |= ETH_DMATXDESC_LS; size = FrameLength - (bufcount-1U)*ETH_TX_BUF_SIZE; heth->TxDesc->ControlBufferSize = (size & ETH_DMATXDESC_TBS1); } /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ heth->TxDesc->Status |= ETH_DMATXDESC_OWN; /* point to next descriptor */ heth->TxDesc = (ETH_DMADescTypeDef *)(heth->TxDesc->Buffer2NextDescAddr); } } /* When Tx Buffer unavailable flag is set: clear it and resume transmission */ if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) { /* Clear TBUS ETHERNET DMA flag */ (heth->Instance)->DMASR = ETH_DMASR_TBUS; /* Resume DMA transmission*/ (heth->Instance)->DMATPDR = 0U; } /* Set ETH HAL State to Ready */ heth->State = HAL_ETH_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(heth); /* Return function status */ return HAL_OK; }
|
|
|
|
|
 |
Ответов
|
May 22 2018, 16:42
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 19-10-16
Пользователь №: 93 818

|
В рбщем поговорил с преподавателем, решили т.к. времени мало организовать всю работу на таймерах/счетчиках. Дальше уже буду сам разбираться Но вот на деле уже 2 дня так и не могу пропинговать плату) В настройках LWIP пробую забивать как статический ip так и выставлять DHCP. Реакции 0. Варианта 2: либо я что-то неправильно подключил (схему приложил)
либо подозрение упало на PHYADR, в дш написано что по дефолту он 1, собственно 1 в настройках LWIP я и выставляю, но у меня вывод PHYAD0 вообще не подключен, а 1-4 включены т.к. это RXD. Получается у меня PHY адрес 30 или все таки дефолтный 1?
Сообщение отредактировал remixx - May 22 2018, 16:43
|
|
|
|
|
May 23 2018, 00:28
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (remixx @ May 23 2018, 00:42)  Но вот на деле уже 2 дня так и не могу пропинговать плату) ИМХО, не тем путём вы идёте  У вас может не работать канальный уровень, а вы ждёте пинга. Для начала - увас фиттер (ksz8721) ответила? Т.е. вы можете прочитать из её регистров её ID-номер? Если нет, или он не совпадает с даташитовским, то дальше вообще нет смысла ничего со стеком делать, кроме как решать проблему драйвера фиттера. Если id читатете. То следующий вопрос. У вас wireshark видит исходящие пакеты с платы? Любые. А плата принимает пакеты на канальном уровне? Когда заработает канальный уровень. вам нужно подключить стек. Как это делается, читатйте в документации. В том же lwip, я уже плохо помню, но надо поправить шаблон файла ethernetif.c под свои драйвера. После этого оно у меня сразу заработало.
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
remixx STM32F107RCT6 + KSZ8721 (ethernet) May 11 2018, 04:24 haker_fox Я не знаю куб, но вопрос: вы хотите данные гнать н... May 11 2018, 05:38 remixx Цитата(haker_fox @ May 11 2018, 05:38) Я ... May 14 2018, 03:36  haker_fox QUOTE (remixx @ May 14 2018, 11:36) еобхо... May 14 2018, 06:33  jcxz Цитата(remixx @ May 14 2018, 06:36) Вообщ... May 14 2018, 14:33   haker_fox QUOTE (jcxz @ May 14 2018, 22:33) Ну если... May 15 2018, 01:59   XVR Цитата(jcxz @ May 14 2018, 17:33) Да ладн... May 15 2018, 08:24    jcxz Цитата(XVR @ May 15 2018, 11:24) Любой, у... May 15 2018, 09:09     XVR Цитата(jcxz @ May 15 2018, 12:09) Чтобы з... May 15 2018, 11:46      jcxz Цитата(XVR @ May 15 2018, 14:46) А кто за... May 15 2018, 12:56       haker_fox QUOTE (jcxz @ May 15 2018, 20:56) Вы пред... May 15 2018, 14:23        jcxz Цитата(haker_fox @ May 15 2018, 17:23) Пр... May 15 2018, 15:49       XVR Цитата(jcxz @ May 15 2018, 15:56) Вы пред... May 16 2018, 04:07  iosifk Цитата(remixx @ May 14 2018, 06:36) Функц... May 14 2018, 14:41 XVR Если вам нужно просто передать пакеты, то можно сд... May 14 2018, 11:51 remixx Мне действительно интересно этим заниматься, в буд... May 15 2018, 05:58 jcxz Цитата(remixx @ May 15 2018, 08:58) Перед... May 15 2018, 06:19 haker_fox QUOTE (remixx @ May 15 2018, 13:58) Мне д... May 15 2018, 06:42 mcheb Посмотрите здесь https://github.com/ntruchsess/ard... May 15 2018, 08:42 Alex11 ЦитатаМне кажется можно статично вбить ip-адреса ж... May 15 2018, 16:26 haker_fox QUOTE (Alex11 @ May 16 2018, 00:26) Работ... May 15 2018, 23:41 remixx В указанном примере как раз таки MAC и ip адреса в... May 16 2018, 06:59 jcxz Цитата(remixx @ May 16 2018, 09:59) По со... May 17 2018, 06:35 haker_fox Я бы рекомендовал не использовать ось. Я не знаю в... May 16 2018, 07:52 remixx Цитата(haker_fox @ May 16 2018, 07:52) Я ... May 17 2018, 02:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|