|
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 17 2018, 02:35
|
Участник

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

|
Цитата(haker_fox @ May 16 2018, 07:52)  Я бы рекомендовал не использовать ось. Я не знаю ваши строки, но вы можете закопаться и не успеть. ОС - это не просто многозадачность, это ещё и особый подход к проектированию ПО. Например, передача данных между процессами, обработка прерываний и т.п. Если у вас, конечно, есть опыт работы с операционными системами, тогда другой вопрос) на крайняк сделаю с "тупыми" задержками посмотрю еще сегодня ISR.
|
|
|
|
Сообщений в этой теме
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 remixx В рбщем поговорил с преподавателем, решили т.к. вр... May 22 2018, 16:42 haker_fox QUOTE (remixx @ May 23 2018, 00:42) Но во... May 23 2018, 00:28
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|