Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 и USB (практика)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб мар 06, 2021 14:42:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 293 ]     ... , , , 13, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вс сен 17, 2017 19:45:13 
Встал на лапы

Зарегистрирован: Ср мар 22, 2017 09:52:52
Сообщений: 81
Рейтинг сообщения: 0
Отключение отладочной информации не помогает, если конечно я её правильно отключаю (убираю галку в Flash/Configure Flash Tools/Output с Debug Information). Без неё, кстати, на Level 0 также не работает, причём на любой частоте, но это уже не важно...

Ставлю настройки PLL, как на картинке из Куба, которую oleg110592 прислал:
На частоте 168MHz, при PLL_P = 2 ничего не работает. Стоит только поменять на PLL_P = 4, что соответствует частоте 84MHz, так тут же USB запускается.
Не связано ли это с тем что где-нибудь глубоко в функциях работы USB используются временные задержки реализованные по типу for(i=0; i<delay; i++){......} ?

Вот, кстати, нашёл в файле usb_bsp.c одну какую-то подобную:
Код:
void USB_OTG_BSP_uDelay (const uint32_t usec)
{
  __IO uint32_t count = 0;
  const uint32_t utime = (120 * usec / 7);
  do
  {
    if ( ++count > utime )
    {
      return ;
    }
  }
  while (1);

}

Не знаю, влияет ли она на работу USB, но она точно зависит от системной частоты МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн сен 18, 2017 06:22:18 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 451
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3654
Рейтинг сообщения: 0
да туповатая задержка - в файле usb_core.c есть вызовы такой задержки:
USB_OTG_BSP_uDelay(3);
Посмотрел - в родных либах присутствует такое же. Индусы четко под 84МГц писали что ли?


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн июл 27, 2020 15:15:04 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Доброго времени суток.
Пытаюсь запустить USB в режиме девайс на STM32F107 и что-то конкретно завис (я завис).

Вот такая отладочная плата.

Стартап для серии Connectivity берет кварц на 25МГц, на плате 8. Поправил. На выходе MCO частота 72МГц +0.0003 . Кстати, странная какая-то форма сигнала, я думал там должен быть прямоугольные импульсы. Если до 8МГц еще что-то похоже, то далее, чем выше частота, тем больше постоянная составляющая и меньше размах сигнала. Так например, если частота 40МГц, то размах меньше вольта при постоянной составляющей 1.7В.
А если на выход MCO пустить все 72МГц, то при той же постоянной составляющей размах всего-лишь 400мВ (но тут ладно, выше 50МГц и не должно работать).
Странно как-то, но частота 72МГц есть. Ну можно будет еще какой-нибудь ШИМ с таймера пустить на выход, но вроде как и так 72МГц, что еще проверять.

//----------

Теперь что касается USB.
Инициализирую так.

При подключении шнурка вклчается подтягивающий резистор на линии DP и ловлю резет.


Далее я должен поймать запрос дескриптора, хост этот запрос шлет, вижу я его лог. анализатором. Но никаких флагов установленных я не вижу, в том числе не вижу флага SOF.
С меня, за помощь, огромное спасибо. :)

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн июл 27, 2020 15:21:16 
Это не хвост, это антенна

Карма: 20
Рейтинг сообщений: 218
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 1332
Рейтинг сообщения: 0
VBUS подключен?


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн июл 27, 2020 15:37:00 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ага, без него pullup не включается, даже при установке бита force device mode.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн июл 27, 2020 16:20:20 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 3
Из рабочего проекта.

Код:
static inline void Init()
{
  otg_device()->DCTL = USB_OTG_DCTL_SDIS; //Отключиться от линии

  otg_global()->GAHBCFG = USB_OTG_GAHBCFG_GINT;
  otg_global()->GUSBCFG = USB_OTG_GUSBCFG_FDMOD | _VAL2FLD(USB_OTG_GUSBCFG_TRDT,6) | USB_OTG_GUSBCFG_PHYSEL;
  otg_global()->GINTMSK =  USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTSTS_RXFLVL;
  otg_global()->GCCFG = USB_OTG_GCCFG_PWRDWN | USB_OTG_GCCFG_VBUSBSEN;
  *otg_pcgcctl() = 0;
  //Задать конфигурацию FIFO
  otg_global()->GRXFSIZ = RX_FIFO_SIZE>>2;
  otg_global()->DIEPTXF0_HNPTXFSIZ = ((TX_EP0_FIFO_SIZE<<14)&0xFFFF0000) | RX_FIFO_SIZE;
  otg_global()->DIEPTXF[0] = ((TX_EP1_FIFO_SIZE<<14)&0xFFFF0000) | (RX_FIFO_SIZE+TX_EP0_FIFO_SIZE);
  otg_global()->DIEPTXF[1] = ((TX_EP2_FIFO_SIZE<<14)&0xFFFF0000) | (RX_FIFO_SIZE+TX_EP0_FIFO_SIZE+TX_EP1_FIFO_SIZE);
  otg_global()->DIEPTXF[2] = ((TX_EP3_FIFO_SIZE<<14)&0xFFFF0000) | (RX_FIFO_SIZE+TX_EP0_FIFO_SIZE+TX_EP1_FIFO_SIZE+TX_EP2_FIFO_SIZE);

  otg_outep<0>()->DOEPTSIZ = _VAL2FLD(USB_OTG_DOEPTSIZ_STUPCNT,3) | _VAL2FLD(USB_OTG_DOEPTSIZ_PKTCNT,1) | _VAL2FLD(USB_OTG_DOEPTSIZ_XFRSIZ,64);
  //Разрешить прерывания от USB   
  if (PUSB_BASE == USB_OTG_FS_PERIPH_BASE) NVIC_EnableIRQ(OTG_FS_IRQn);
#ifdef USB_OTG_HS_PERIPH_BASE
  if (PUSB_BASE == USB_OTG_HS_PERIPH_BASE) NVIC_EnableIRQ(OTG_HS_IRQn);
#endif
     
 otg_device()->DCTL &= ~USB_OTG_DCTL_SDIS;  // Подключиться
}


static inline void Enumerate_Reset()      // Обработчик прерывания RESET
{
  //Разрешить прерывания для EP0 и EP1
  otg_device()->DAINTMSK = _VAL2FLD(USB_OTG_DAINTMSK_IEPM,3) | _VAL2FLD(USB_OTG_DAINTMSK_OEPM,3);
  otg_device()->DOEPMSK  = USB_OTG_DOEPMSK_STUPM | USB_OTG_DOEPMSK_XFRCM;
  otg_device()->DIEPMSK  = USB_OTG_DIEPMSK_XFRCM;
  //Сбросить все TXFIFO
  otg_global()->GRSTCTL = USB_OTG_GRSTCTL_TXFFLSH | USB_OTG_GRSTCTL_TXFNUM_ALL;
  while (otg_global()->GRSTCTL & USB_OTG_GRSTCTL_TXFFLSH);
  //Сбросить RXFIFO
  otg_global()->GRSTCTL = USB_OTG_GRSTCTL_RXFFLSH;
  while (otg_global()->GRSTCTL & USB_OTG_GRSTCTL_RXFFLSH);
  //До энумерации адррес = 0
  otg_device()->DCFG  = _VAL2FLD(USB_OTG_DCFG_DAD,0) | USB_OTG_DCFG_DSPD_FSPEED;
}


Дальше ловить прерывания. Там "нежданчик" правда будет.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн июл 27, 2020 18:57:58 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вот жеж.
Бит CCFG_PWRDWN 0 означает активирован.
Спасибо. Буду дальше потихоньку копать. В буфер что-то упало.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 19:37:23 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Добрый вечер.
Пытаюсь запустить USB на stm32f103c8 и столкнулся со следующей проблемой: после того, как я получаю запрос дескриптора устройства (0x8006_0100_0000_4000), не могу передать сам дескриптор хосту. Долго не мог понять в чём заключается дело, пока не стал проверять значения регистра COUNTn_TX и буфера данных передачи. Как оказалось значения там не во всех случаях такие, которые я пытаюсь туда поместить. Например, если я пишу по адресу 0x6000_4000 + 0*16 + 4 (COUNTn_TX для нулевой точки, btable = 0) значение 0xffff_f1ff, то прочитав этот адрес, в дебаггере получаю значение 0x0000_f1ff (вроде бы всё как и должно быть, поскольку только два первых байта записываются), а вот если я пытаюсь записать туда размер передаваемого дескриптора (0x0000_0012), то получаю в консоле только 3 байта - 0x00, 0x00, 0x00. Возможно это проблема самособранного дебаггера (uart + xxd), но раньше с таким не встречался. Или я плохо разобрался с адресацией PMA, хотя, опять же, получение данных работает корректно. Проверил на двух контроллерах, результат один, значит где-то в софте косяки. Не подскажете, в каком направлении начать искать ошибки? Спасибо


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 21:36:35 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
У f103 PMA "дырявый". Писать надо 32-битными словами, но значащих только 16 бит. В отладчике будешь видеть пакеты в виде: два байта - два нуля - два байта - два нуля и т.д.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 21:52:15 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Ну я так и делаю. Если я пишу по адресу 0x4000_6000 (адрес буфера передачи нулевой точки при btable = 0) значение 0x0000_00040, то потом могу его так же просто считать оттуда и получу свои 0x0040. Если я проделаю ту же самую операцию, но уже для регистра 0x4000_6000 + 4 со значением, например, 0x0000_fff1, потом значение регистра перешлю побайтово через usart, то получу ожидаемый результат - 0x00, 0x00, 0xff, 0xf1. Но если я пытаюсь записать туда размер передаваемых данных (0x0000_0012), то по uart мне приходит уже не 4 байта, как раньше, а почему-то только 3, причем все равны 0. Какие-то проблемы с настройкой интерфейса может быть?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 22:38:03 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Kellya писал(а):
Или я плохо разобрался с адресацией PMA
Тут картинка интуитивно понятная.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 22:49:32 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Kellya писал(а):
Или я плохо разобрался с адресацией PMA
Тут картинка интуитивно понятная.


Не, не. Это понял все. С адресом 0x4000_6000 проблем не возникает. А когда я делаю все тоже самое, но с 0x4000_6004, то какая-то ерунда получается


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:02:27 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Не уверен, по-моему USB_COUNTn_TX уменьшается по мере отправки данных, или я это "с прямым углом перепутал".
Kellya писал(а):
то по uart мне приходит уже не 4 байта, как раньше, а почему-то только 3
Возможно тут вопрос к коду для УАРТ.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:09:13 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Но если я пытаюсь записать туда размер передаваемых данных (0x0000_0012)
Зачем? "Войну и мир" туда ещё запишите, польза будет такая же.
то по uart мне приходит уже не 4 байта, как раньше, а почему-то только 3, причем все равны 0.
Может для начала с uart разобраться? Рановато с такими скилами за USB браться.
Какие-то проблемы с настройкой интерфейса может быть?
Какого интерфейса хоть?

PS: Наводящий вопрос. Где лежат дескрипторы буферов приёма/передачи?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:19:18 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Не уверен, по-моему USB_COUNTn_TX уменьшается по мере отправки данных, или я это "с прямым углом перепутал".
Kellya писал(а):
то по uart мне приходит уже не 4 байта, как раньше, а почему-то только 3
Возможно тут вопрос к коду для УАРТ.


Да я тоже на него думаю, просто странно, что он до этого отрабатывал хорошо, а тут вот такое поведение проявилось.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:20:25 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Наводящий вопрос. Где лежат дескрипторы буферов приёма/передачи? И как они заполнены?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:28:59 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Но если я пытаюсь записать туда размер передаваемых данных (0x0000_0012)
Зачем? "Войну и мир" туда ещё запишите, польза будет такая же.

Если Вы про лишние нули, то это я просто так, для полноты картины сюда написал.

то по uart мне приходит уже не 4 байта, как раньше, а почему-то только 3, причем все равны 0.
Может для начала с uart разобраться? Рановато с такими скилами за USB браться.

Да просто проблем с ним не возникало до этого, данные пересылал без каких-либо нареканий.

Какие-то проблемы с настройкой интерфейса может быть?
Какого интерфейса хоть?

Uart

PS: Наводящий вопрос. Где лежат дескрипторы буферов приёма/передачи?

Ну если я указал btable = 0, то для нулевой точки: 0x4000_6000 - адрес буфера передачи, 0x4000_6004 - размер передаваемых данных, 0x4000_6008 - адрес буфера приема, 0x4000_600С - размер буфера приема + размер принятых данных. Если я правильно понял Ваш вопрос


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн авг 24, 2020 23:49:44 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Да просто проблем с ним не возникало до этого, данные пересылал без каких-либо нареканий.
Однако, они есть. Отделяем мух от котлет. Для отладки USB не нужен UART, там всё отладчиком видно.
Ну если я указал btable = 0, то для нулевой точки: 0x4000_6000 - адрес буфера передачи, 0x4000_6004 - размер передаваемых данных, 0x4000_6008 - адрес буфера приема, 0x4000_600С - размер буфера приема + размер принятых данных. Если я правильно понял Ваш вопрос
Хорошо, тогда пишите "Войну и мир" в буфер передачи и давайте команду на его отправку. Следующая грабля лежит в регистре управления конечной точкой. Там биты статуса меняются операцией XOR.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт авг 25, 2020 00:03:09 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Да просто проблем с ним не возникало до этого, данные пересылал без каких-либо нареканий.
Однако, они есть. Отделяем мух от котлет. Для отладки USB не нужен UART, там всё отладчиком видно.
Ну если я указал btable = 0, то для нулевой точки: 0x4000_6000 - адрес буфера передачи, 0x4000_6004 - размер передаваемых данных, 0x4000_6008 - адрес буфера приема, 0x4000_600С - размер буфера приема + размер принятых данных. Если я правильно понял Ваш вопрос
Хорошо, тогда пишите "Войну и мир" в буфер передачи и давайте команду на его отправку. Следующая грабля лежит в регистре управления конечной точкой. Там биты статуса меняются операцией XOR.


Вот я сейчас как раз на этом моменте и застрял. Я записываю необходимые данные в буфер передачи, но почему-то данные не записываются. В руководстве к контроллеру в разделе USB я ничего такого не нашел, но может есть какие-то ограничения на запись/чтение PMA? Потому что работу с памятью отдельно я, в общем-то, не изучал


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт авг 25, 2020 09:35:11 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Вот я сейчас как раз на этом моменте и застрял.
Записываем количество передаваемых данных в дескриптор буфера, сами данные в буфер и ставим статус TX_VALID в регистре управления конечной точкой. После чего ловим прерывания успешной передачи и следом следующий запрос (Set address).

Добавлено after 9 hours 9 minutes 20 seconds:
Вчера спросонья перепутал последовательность. Сначала в буфер кладём, а затем размер указываем.



Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 293 ]     ... , , , 13, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Kelistraza и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y