реклама на сайте
подробности

 
 
> STM32F107RCT6 + KSZ8721 (ethernet)
remixx
сообщение May 11 2018, 04:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - remixx   В рбщем поговорил с преподавателем, решили т.к. вр...   May 22 2018, 16:42
- - haker_fox   QUOTE (remixx @ May 23 2018, 00:42) Но во...   May 23 2018, 00:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th April 2024 - 22:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016