Jump to content

Низкоуровневая Работа С Usb


kiv.apple
 Share

Recommended Posts

Пытаюсь разобраться с USB у STM32F103 на низком уровне (т.е. без сторонних библиотек) и столкнулся с проблемой.

Мои действия:

1) У меня внешний кварц на 8 МГц. Запускаю PLL на 72 МГц (коэффициент умножения 9, делитель для USB 3). Разумеется, этот процесс состоит из нескольких этапов, однако в результате в регистре RCC->CFGR оказывается значение 0x001DC40A (что помимо прочего обозначает, что PLL успешно выбран как системный источник частоты). Работа USART и SysTick адекватна (частота точно верная).

2) Включаю тактирование USB. Убираю бит PWDN из USB->CNTR. Жду 1 микросекунду (по даташиту нужно для стабилизации источника опорного напряжения), пишу нули в CNTR, BTABLE и ISTR. Разрешаю прерывания USB_FS_WKUP и CAN1_RX0. Пишу в CNTR значение USB_CNTR_RESETM | USB_CNTR_SUSPM | USB_CNTR_WKUPM | USB_CNTR_CTRM.

3) На этом инициализация окончена. Далее приходит прерывание от USB. Причина, определённая из ISTR - RESET. Да, именно это и должно случиться, всё логично. Обнуляю соответствующий флаг прерывания.

4) Настраиваю нулевую конечную точку. В итоге в USB->EP0R оказывается значение 0x3220. По адресу USB_PMA_BASE + 0 оказывается значение 64 (TXADDR для EP0 == 64), по адресу USB_PMA_BASE + 8 оказывается значение 128 (RXADDR для EP0 == 128), по адресу USB_PMA_BASE + 12 оказывается значение 0x8400 (размер буфера приёма для EP0 - 64 байта).

5) Разрешаю работу USB - пишу в USB->DADDR значение 0x80.

6) Выхожу из прерывания.

7) Ожидаю, что мне придёт первый SETUP-пакет, о чём мне скажет прерывание с флагом CTR в регистре ISTR. А оно не приходит. Зато приходит куча прерываний по причине WKUP (я сбрасываю этот флаг, а оно снова приходит). Иногда приходит RESET (у хоста срабатывает таймаут назначения адреса устройству и он устраивает новый сброс), но после него опять куча WKUP. В конце-концов хост забивает на устройство и события прекращаются. Помимо WKUP ещё приходит ESOF.

Моя теория: USB-модуль не запускается должным образом и не способен разобрать, что приходит по шине кроме RESET. Передача данных видится им как событие WKUP (которое по сути вызывается любой активностью на линии).

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

В чём может быть проблема? Аппаратная часть исправна - прошивки с использованием готовых библиотек на этой плате работают нормально.

Edited by kiv.apple
Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Подробнее

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Проблема была в том, что прерывание WKUP приходит всегда вне зависимости от состояния USB - просто по активности на линии. А обработка тонны прерываний WKUP всё стопорила. Решение - запретить WKUP в начале и разрешать только после SUSP. А после прихода WKUP опять запретить его. Также надо отметить, что адрес устанавливать надо после того, как ZLP в ответ на этот SETUP-запрос успешно ушёл (CTR для EP0 IN), не раньше. На это тоже напоролся. Сейчас уже успешно отдаю дескриптор устройства, но дескриптор конфигурации у меня уже не запрашивают. Вероятно, я как-то не правильно завершаю оптравку дескриптора конфигурации, сейчас с этим разбираюсь.

Я работаю с USB на низком уровне не просто так. Я разрабатываю свою библиотеку для контроллеров (причём потенциально не только STM32, но и других, а также Linux-компьютеров) - https://github.com/K...ollerFramework.

Edited by kiv.apple
Link to comment
Share on other sites

Популярные аккумуляторы 18650 с лепестковыми выводами производства EVE Energy в Компэл

На склад КОМПЭЛ поступили популярные литий-ионные аккумуляторы типоразмера 18650 (тип INR) с приваренными лепестковыми выводами повышенной емкостью 3300 и 3500 мА⋅ч от всемирно признанного лидера среди производителей данной продукции – компании EVE Energy. 
Аккумуляторы характеризуются повышенной плотностью энергии и способностью к разряду повышенным током до 3С. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Надежное питание для IoT промышленных систем учета от EVE Energy. Тест ионистора SPC с батарейкой ER

Разберем решение ER + SPC для гибридной энергетики от компании EVE Energy. Для исправной работы IoT-приборов, которым необходим длительный срок службы и большие импульсы тока, важно правильно подобрать источник тока. 

Гибридный источник питания ER + SPC, состоящий из параллельно соединенных литий-тионилхлоридной батарейки (ER) и литий-ионного суперконденсатора (SPC), не подвержен пассивации, просадка напряжения у него отсутствует, а импульсная выходная мощность значительно повышена. В качестве примера рассмотрим тест сборки ER26500 + SPC1520. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А если мне она меня не устраивает по каким-то причинам (вполне техническим)?

Кстати, проблемы уже все решил. Надо отправлять EP0 OUT в NAK при отправке последнего блока сообщения. Теперь буду реализовывать USB CDC.

Link to comment
Share on other sites

Популярные дисковые батарейки типа CR производства EVE Energy уже в Компэл 

На склад КОМПЭЛ поступили популярные литиевые (Li-MnO2) дисковые батарейки типа CR напряжением 3,0 В и от всемирно признанного лидера среди производителей данной продукции – компании EVE Energy. Дисковые батарейки в основном представлены моделями стандартного вида, но также имеются варианты с расширенным температурным диапазоном и возможностью работы с повышенным импульсным током. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...