Перейти к содержанию
    

STM32F429 discovery, USB OTG_FS

Приветствую!

История началась с того, что на целевом устройстве на базе STM32F429 через определённое время перестаёт работать BULK OUT.

Раскопки привели к тому, что после программного сброса модуля OTG_FS и его инициализации, содержимое некоторых установленных регистров оказыватся испорченным.

Теперь конкретика. Я взял STM32F429 discovery, IDE IAR. Из STM32Cube_FW_F4_V1.13.0 пример UART_TwoBoards_ComPolling.

В main.c после установки системной частоты SystemClock_Config() я добавил такие строки:

  __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
  
  USB_OTG_FS->GRSTCTL |= USB_OTG_GRSTCTL_CSRST;

  while (USB_OTG_FS->GRSTCTL & USB_OTG_GRSTCTL_CSRST);

  {
    volatile unsigned int i;

    for (i = 0; i < 50000; i++); // ~2.8 ms delay (datasheet: at least 3 PHY clocks delay)
  }

  USB_OTG_FS->DIEPTXF0_HNPTXFSIZ = 0x03FF03FF;

  BSP_LED_On(LED3);

  while (USB_OTG_FS->DIEPTXF0_HNPTXFSIZ == 0x03FF03FF);

  BSP_LED_Off(LED3);

  while (1);

 

Записываю в Host non-periodic transmit FIFO size register значение 0x03FF03FF

Между BSP_LED_On(LED3); и BSP_LED_Off(LED3); проходит 58.4 мс, регистр оказывается наполовину сброшенным,

т.е. поле RAM start address остаётся 0x3FF, а поле TxFIFO depth сбрасывается в 0x200.

 

Перечитал 34 главу скудного Reference manual (DM00031020), но не смог найти объяснения такому поведению...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...