|
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 11 2018, 05:38
|

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

|
Я не знаю куб, но вопрос: вы хотите данные гнать на канальном уровне? Т.е. TCP/IP или UDP вам не нужен? QUOTE (remixx @ May 11 2018, 12:24)  2. Будет ли достаточно для данных целей обычной инициализации эзернета в кубе и передачи пакетов функцией HAL_ETH_TransmitFrame()? Код функции представлен ниже. Это низкоуровневая функция передачи ETHERNET-фрейма через среду (витую пару в вашем случае). Конечно, можно гнать данные на этом уровне, но как вы будете доставлять их адресату? Или как кто-то будет запрашивать их у вашей железки? Ведь адресация в таком случае будет возможно только по mac-адресу. А в локальных сетях принято использовать что-то повыше уровнем, например IPv4. Значит вам нужен TCP/IP стек, пусть и не полный. Всё зависит от ваших требований? Чего вы хотите? Что за прибор, куда будет подключаться, кто будет обмениваться с ним данными? Рекомендую познакомиться хотя бы бегло с 7-уровневой моделью OSI. Затем почитать про TCP/IP стеки. Я использовал lwip. Прикручиватеся не совсем просто, если нет опыта. У меня ушло недели полторы на адаптацию драйвера MAC+PHY, и портирование стека на свою платформу (LPC4337 + внешний фиттер). P.S. Судя по вашим постам на форуме, вы методично и последовательно ваяете что-то измерительное с выходом в сеть))) P.S.S. Логический анализатор вам и здесь может понадобиться. У вас kszшка-то хоть ответила по MDC?
--------------------
Выбор.
|
|
|
|
|
May 14 2018, 03:36
|
Участник

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

|
Цитата(haker_fox @ May 11 2018, 05:38)  Я не знаю куб, но вопрос: вы хотите данные гнать на канальном уровне? Т.е. TCP/IP или UDP вам не нужен?
Это низкоуровневая функция передачи ETHERNET-фрейма через среду (витую пару в вашем случае). Конечно, можно гнать данные на этом уровне, но как вы будете доставлять их адресату? Или как кто-то будет запрашивать их у вашей железки? Ведь адресация в таком случае будет возможно только по mac-адресу. А в локальных сетях принято использовать что-то повыше уровнем, например IPv4. Значит вам нужен TCP/IP стек, пусть и не полный. Всё зависит от ваших требований? Чего вы хотите? Что за прибор, куда будет подключаться, кто будет обмениваться с ним данными?
Рекомендую познакомиться хотя бы бегло с 7-уровневой моделью OSI. Затем почитать про TCP/IP стеки. Я использовал lwip. Прикручиватеся не совсем просто, если нет опыта. У меня ушло недели полторы на адаптацию драйвера MAC+PHY, и портирование стека на свою платформу (LPC4337 + внешний фиттер).
P.S. Судя по вашим постам на форуме, вы методично и последовательно ваяете что-то измерительное с выходом в сеть)))
P.S.S. Логический анализатор вам и здесь может понадобиться. У вас kszшка-то хоть ответила по MDC? Функционал устроства верный  . Это мой дипломный проект, по сути представляет из себя некий измерительный блок, который оцифровывает показания датчика температуры и передает их по ethernet. Вообще задача сформулирована следующим образом: необходимо передать 1000 ethernet пакетов с определенной структурой в секунду. В каждом пакете должны содержаться: значение измеренной температуры, время, дата и еще несколько параметров. Сам блок подключается к компьютеру, к нему никаких обращений не требуется, т.е. она просто гонит данные и все. Читаю про TCP/IP стек, но теория без практики воспринимается сложно. Пытаюсь найти примеры с реализацией lwip. Пробовал пинговать плату при обычной инициализации ethernet (без lwip), результата нет.
Сообщение отредактировал remixx - May 14 2018, 03:37
|
|
|
|
|
May 14 2018, 14:41
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(remixx @ May 14 2018, 06:36)  Функционал устроства верный  . Это мой дипломный проект, по сути представляет из себя некий измерительный блок, который оцифровывает показания датчика температуры и передает их по ethernet. Вообще задача сформулирована следующим образом: необходимо передать 1000 ethernet пакетов с определенной структурой в секунду. В каждом пакете должны содержаться: значение измеренной температуры, время, дата и еще несколько параметров. Сам блок подключается к компьютеру, к нему никаких обращений не требуется, т.е. она просто гонит данные и все. Для справки. Термина "Функционал" в русском техническом языке нет вообще... И вот, чисто по жизни, есть вопрос. "Температура" - она что так быстро меняется? Это что температура плазмы или газовой струи в ракетном сопле? Какова масса объекта, у которого измеряют температуру? А сам датчик, какая у него постоянная времени по температуре? Ну пусть десятая доля секунды... Тогда у Вас что, имеются тысячи датчиков, если в задании "1000 ethernet пакетов в секунду"... Или же это сказано так, для балды? Но ведь сказано, что "блок" находится "рядом", т.е не далее 300 метров, потому как не факт, что такие кадры пройдут по сетевому оборудованию... Вот...
--------------------
www.iosifk.narod.ru
|
|
|
|
Сообщений в этой теме
remixx STM32F107RCT6 + KSZ8721 (ethernet) May 11 2018, 04:24  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 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 remixx В рбщем поговорил с преподавателем, решили т.к. вр... May 22 2018, 16:42 haker_fox QUOTE (remixx @ May 23 2018, 00:42) Но во... May 23 2018, 00:28
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|