2023-02-03 04:24 PM
I have an ADC+DMA read that can performs at 4Mbytes/second.
The conv is 12 bit, clock division is 1_of5. On the callback DMS interrupts
I send half data's to USB using CDC_Transmit_HS.
The ADC buffer is 1K. I Also tried 2, 4, 8, 16k. I played with the clock division for ADC and
conversion cycles to tweak the ADC speed up to the point the . CDC_Transmit_HS returns USB_BUSY. The maximum rate I could achieve was 592896 bytes /second, (no send errors) I guess with division 1 and 3conv_5 cycles. The host was Linux and Windows (same cutt of speed)
My target is 1M bytes/second as the USB can go up to 40Mbits /second -> 3Mbytes/second.
Where I am wrong here ?
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
if(pcdHandle->Instance==USB_OTG_HS)
{
/* USER CODE BEGIN USB_OTG_HS_MspInit 0 */
/* USER CODE END USB_OTG_HS_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Enable USB Voltage detector
*/
HAL_PWREx_EnableUSBVoltageDetector();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**USB_OTG_HS GPIO Configuration
PA8 ------> USB_OTG_HS_SOF
PA9 ------> USB_OTG_HS_VBUS
PA10 ------> USB_OTG_HS_ID
PA11 ------> USB_OTG_HS_DM
PA12 ------> USB_OTG_HS_DP
*/
GPIO_InitStruct.Pin = GPIO_PIN_8|USB_FS_ID_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; // GPIO_SPEED_FREQ_LOW; // mco-
GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_HS;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = USB_FS_VBUS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(USB_FS_VBUS_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = USB_FS_N_Pin|USB_FS_P_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;// GPIO_SPEED_FREQ_LOW; // mco-
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Peripheral clock enable */
__HAL_RCC_USB_OTG_HS_CLK_ENABLE();
/* Peripheral interrupt init */
HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
/* USER CODE BEGIN USB_OTG_HS_MspInit 1 */
/* USER CODE END USB_OTG_HS_MspInit 1 */
}
}
Thank you.
2023-02-04 04:23 AM
> Where I am wrong here ?
so your 0,6MB is quite good.