проблема с STM32WB55 USB Custom Hid с использованием пакета встроенного ПО версии V1.11.1

#c #usb #stm32 #hid #stm32cubemx

Вопрос:

как у тебя дела? Надеюсь, с вами все в порядке =)

Мое приложение было разработано с использованием пакета прошивки версии V. 10.1 . Мне было предложено обновить прошивку для использования пакета прошивки V1.11.1. Когда я обновился, несколько вещей испортились, включая пользовательский идентификатор.

Вот что происходит:

В функции CUSTOM_HID_OutEvent_FS мое устройство распознает полученный пакет с помощью

USBD_CUSTOM_HID_SendReport. Это отлично работало с версией V1.10.1. Теперь, когда я обновил, весь мой USB-комм испортился после первого отправленного подтверждения. После первого отправленного пакета мое приложение не может ни получить, ни отправить данные через USB . Если я удалю отправку ACK, я смогу непрерывно получать данные.

Что я заметил после обновления:

Библиотеки печатных плат и USB LL были изменены. После долгой отладки я заметил, что эта конкретная функция все испортила: PCD_EP_ISR_Handler.

Эта функция изменилась с обновления V1.10.1 на V1.11.1. Я изучил эту функцию и поток USB-кода и обнаружил изменение, которое вернуло мой USB-комм к работе. Это последние строки функции EP_ISR_Handler:

         if ((ep->type == EP_TYPE_BULK) amp;amp; ((wEPVal amp; USB_EP_KIND) == 0U))
        {
          /* multi-packet on the NON control IN endpoint */
          TxByteNbre = (uint16_t)PCD_GET_EP_TX_CNT(hpcd->Instance, ep->num);

          if (ep->xfer_len > TxByteNbre)
          {
            ep->xfer_len -= TxByteNbre;
          }
          else
          {
            ep->xfer_len = 0U;
          }

          /* Zero Length Packet? */
          if (ep->xfer_len == 0U)
          {
            /* TX COMPLETE */
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
            hpcd->DataInStageCallback(hpcd, ep->num);
#else
            HAL_PCD_DataInStageCallback(hpcd, ep->num);
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
          }
          else
          {
            /* Transfer is not yet Done */
            ep->xfer_buff  = TxByteNbre;
            ep->xfer_count  = TxByteNbre;
            (void)USB_EPStartXfer(hpcd->Instance, ep);
          }
        }
        /* Double Buffer Iso/bulk IN (bulk transfer Len > Ep_Mps) */
        else
        {
          (void)HAL_PCD_EP_DB_Transmit(hpcd, ep, wEPVal);
        }
      }
 

Что вернуло мой USB-комм к работе, так это изменение HAL_PCD_EP_DB_Transmit на HAL_PCD_EP_Transmit в последних строках приведенного выше фрагмента кода.

Я далек от того, чтобы быть экспертом по USB, и, честно говоря, я не знаю, как именно влияет это изменение функции на поток USB. Что я знаю, так это то, что я не должен изменять драйверы ST для работы моего приложения.

Мой пользовательский HID уже работал, следуя учебнику, доступному на YouTube-канале ST. Я использую настройки usb точно так, как описано в руководстве для 64-байтовых пакетов.

Вещи, которые я уже пробовал:

-> Created a project with V1.11.1 only using CUSTOM Hid. Got the same behaviour.

-> Tried to use V1.11.0. Got the same behaviour.

All that explained, does someone could give me a hint of what should i do? I NEED to update the firmware pack to a newest version.