Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 USB_FS HAL
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
razrab83
Не могу поднять usb device на stm32f401 с помощью CubeMX.

Сделал в Cube простенький проект. Подключил только JTAG, USB-Device и указал VCP. настроил клоки. На USB 48 МГц, на шину AHB 24 MГц. Vbus - Разрешил.
Сгенерировал проект (IAR) запустил. подключил к ПК. На этом этапе я должен увидеть в диспетчере устройств свой девайс (STM32 Virtual ComPort).
В реале вижу Unknown device. Стал дебажить.
все прерывания от USB вызывают один обработчик в котором ведётся разбор.
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd);

Код
/**
  * @brief  Handles PCD interrupt request.
  * @param  hpcd: PCD handle
  * @retval HAL status
  */
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
  USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
  uint32_t i = 0U, ep_intr = 0U, epint = 0U, epnum = 0U;
  uint32_t fifoemptymsk = 0U, temp = 0U;
  USB_OTG_EPTypeDef *ep;
  uint32_t hclk = 180000000;


Первое, что мне не понравилось, это uint32_t hclk = 180000000; это частота hclk на AHB. Почему в коде 180 МГц? Исправил на 24.
Всё равно вижу Unknown device. Что-то идет не так.

поставил точки останова в разборе прерываний от усб. Прерывания поступают в следующем порядке

1) Handle Connection event Interrupt
2) Handle Suspend Interrupt
3) Handle Reset Interrupt
4) Handle Enumeration done Interrupt

всё! в другие ветки обработчика прерывания не попадаю. ПК не может вычитать PID/VID.

В инете полно статей по быстрому запуску USB. Они не рассматривают все внутренние механизмы USB, а только поверхностно настройка в CubeMX. Но чегото пошло не так... Аппаратно плата рабочая. Есть прошивка для этой платы, с которой усб работает.

Кто сталкивался с подобной проблемой? Куда копать?




aaarrr
Цитата(razrab83 @ Oct 11 2017, 08:56) *
...Но чегото пошло не так...

Например, нулевой уровень на ID даст такую картину, если нет обработчика ID line status change interrupt.
Genadi Zawidowski
Сталкивался. Что-то сломали в st cube. Сгенерите под гцц будет работать.
razrab83
Цитата(aaarrr @ Oct 11 2017, 07:33) *
Например, нулевой уровень на ID даст такую картину, если нет обработчика ID line status change interrupt.

что-то в кубе не донастроил? как исправить?

Цитата(Genadi Zawidowski @ Oct 11 2017, 07:45) *
Сталкивался. Что-то сломали в st cube. Сгенерите под гцц будет работать.
как в кубе генерить ггц проекты?
aaarrr
Цитата(razrab83 @ Oct 11 2017, 11:26) *
что-то в кубе не донастроил? как исправить?

Проверьте состояние вывода ID. Про куб ничего не подскажу, не использовал никогда.
razrab83
Цитата(aaarrr @ Oct 11 2017, 09:30) *
Проверьте состояние вывода ID. Про куб ничего не подскажу, не использовал никогда.

что такое вывод ID?
aaarrr
Цитата(razrab83 @ Oct 11 2017, 13:19) *
что такое вывод ID?

Вывод процессора, подключенный к одноименному сигналу в USB разъеме.
razrab83
Цитата(aaarrr @ Oct 11 2017, 10:24) *
Вывод процессора, подключенный к одноименному сигналу в USB разъеме.

не понимаю..... "Вывод процессора" можно понять как "Вывод процессора в консоль. Т.е. информацию, которую процессор выводит куда-то...", или вывод процессора - это ножка(pin) процессора?
если это ножка процессора - то что за ножка? в разъеме USB есть 4 сигнала (даже 2 сигнала + 2 контакта питания) +5V, DP, DM, GND (+ экран). Какой из этих сигналов является ID?
jcxz
Цитата(razrab83 @ Oct 11 2017, 13:41) *
если это ножка процессора - то что за ножка? в разъеме USB есть 4 сигнала (даже 2 сигнала + 2 контакта питания) +5V, DP, DM, GND (+ экран). Какой из этих сигналов является ID?

Если не можете отличить ногу процессора от "вывода в консоль", то хотя-бы научитесь пользоваться гуглом!
https://ru.wikipedia.org/wiki/USB#USB_3.0
aaarrr
Цитата(razrab83 @ Oct 11 2017, 13:41) *
не понимаю..... "Вывод процессора" можно понять как "Вывод процессора в консоль. Т.е. информацию, которую процессор выводит куда-то...", или вывод процессора - это ножка(pin) процессора?

Если подключается к линии разъема, то уж наверное речь идет о выводе в смысле pin.

Цитата(razrab83 @ Oct 11 2017, 13:41) *
если это ножка процессора - то что за ножка? в разъеме USB есть 4 сигнала (даже 2 сигнала + 2 контакта питания) +5V, DP, DM, GND (+ экран). Какой из этих сигналов является ID?

У OTG их пять - к перечисленным добавляется ID. У процессора есть соответствующий вывод. Если на нем лог. 0, то USB перейдет в режим хоста.

Хотя в этом случае Unknown device не должен бы появляться, так что вряд ли оно.
razrab83
нашел ID пин, нужен для OTG. PA10 в моём процессоре. У меня only usb-device. ID не задействована. Да и куб её не задействует

Цитата(jcxz @ Oct 11 2017, 10:44) *
Если не можете отличить ногу процессора от "вывода в консоль", то хотя-бы научитесь пользоваться гуглом!
https://ru.wikipedia.org/wiki/USB#USB_3.0

чтобы искать что-то в гугле, нужно знать что искать. "вывод процессора" нельзя истолковать однозначно, "пин(нога) процессора" можно. Забавно, что тычут носом "учитесь гуглить" и при этом не учат гуглить, и не дают ссылку типа такой, а дают на уже найденную информацию. Причем не на конкретный пин ID, а на исторический 4-х томник, в котором аж сказано "Первые спецификации для USB 1.0 были представлены в 1994—1995 годах".
jcxz
Цитата(razrab83 @ Oct 11 2017, 14:25) *
чтобы искать что-то в гугле, нужно знать что искать. "вывод процессора" нельзя истолковать однозначно, "пин(нога) процессора" можно.

Вы - единственный уникум на этом форуме, который так понимает "вывод процессора". Наверняка найдётся и другой уникум, который "ногу процессора" поймёт по своему. laughing.gif

Цитата(razrab83 @ Oct 11 2017, 14:25) *
при этом не учат гуглить

Здесь вроде форум разработчиков, а не бабушек, осваивающих комп. Приведённая ссылка гуглится по "USB". Вот в случае бабушки ещё можно понять если она не знает как найти информацию по USB...
aaarrr
Цитата(razrab83 @ Oct 11 2017, 14:25) *
У меня only usb-device. ID не задействована. Да и куб её не задействует

Не знаю, как в 401, а в 407 выбор режима Peripheral only (т.е. установка бита FDMOD в регистре OTG_FS_GUSBCFG) никак не мешает USB пребрасываться в режим хоста по состоянию ID, хотя мануал и обещает обратное.
razrab83
Цитата(jcxz @ Oct 11 2017, 12:03) *
Здесь вроде форум разработчиков, а не бабушек.... Приведённая ссылка гуглится по "USB"....
Так вы походу бабушка и есть, раз "Вывод процессора" гуглите по "USB" и даете ссылки не по теме... а на какие-то исторические справки развития электроники. Если помочь не можете, если по теме не чего сказать, так хоть холивар не устраивайте, проходите мимо.
ps так ещё и ссылка не просто на USB, а на USB 3.0. При чем тут 3.0?

Цитата
никак не мешает USB пребрасываться в режим хоста по состоянию ID
нога id у меня работает как выход GPIO который управляет светодиодом.
похоже придётся отказаться от куба и опять писать свой драйвер.

И примеров то нет.... для stmf4 сгенерированный проект из куба.... есть куча примеров у st для другой переферии.... для USB не могу найти
juvf
Цитата(razrab83 @ Oct 11 2017, 15:19) *
что такое вывод ID?
Согласен. Не совсем понятно что за вывод айди. Вроде речь о USB-Device, там ID не задействован.

2razrab83
столкнулся с подобной проблемой. Свой драйвер (сделанный из stm usb host library) работает, а кубовский нет.
aaarrr
Цитата(juvf @ Oct 11 2017, 15:36) *
Согласен. Не совсем понятно что за вывод айди. Вроде речь о USB-Device, там ID не задействован.

А мне вот кажется, что надо представлять себе устройство интерфейса и соответствующего периферийного блока процессора, если уж предполагается работать с ним на достаточно низком уровне. Тогда и вопросов не будет.

"Незадействованность" этого вывода весьма условная, см. сообщение выше.
juvf
Цитата(aaarrr @ Oct 11 2017, 17:43) *
А мне вот кажется, что надо представлять себе устройство интерфейса и соответствующего периферийного блока процессора, если уж предполагается работать с ним на достаточно низком уровне. Тогда и вопросов не будет.

Я писал свой драйвер для разных процессоров), на низком уровне. выводов id для усб-девайс-онли не встречал. А вот всякие id (identification number) вшитые в чипы - это сплошь и рядом. и "вывод id" не совсем понятно.... пояснили, что это ножка, так ножка.
razrab83
2aaarrr если будет время/желание.... соберите под 407 кубовский проект там делов на 5 минут. Интересно, заработает или нет
A.Lex
Примеры есть. Вот http://www.mcu.by/старт-arm-поднимаем-usb-cdc/
aaarrr
Цитата(juvf @ Oct 11 2017, 15:54) *
"вывод id" не совсем понятно.... пояснили, что это ножка, так ножка.

Сообщение №2: "нулевой уровень на ID". Господа, вы издеваетесь?
razrab83
Цитата(A.Lex @ Oct 11 2017, 13:01) *

по вашей ссылке
Цитата
Не найдено

По данному адресу ничего не найдено.


нашел, спс
aaarrr
Цитата(razrab83 @ Oct 11 2017, 15:58) *
2aaarrr если будет время/желание.... соберите под 407 кубовский проект там делов на 5 минут. Интересно, заработает или нет

Собрать вряд ли, а вот прошить и посмотреть работу могу.
ivan24190
razrab83, попробуйте увеличить размер стека и кучи в ассемблерном файле.
Генерил как-то usb-device (виртуальный com-порт) для f407 discovery, тоже
не заработало, а потом на одном из форумов посоветовали увеличить размер стека и кучи - все заработало.
Плюс ко всему надо было "правильно" устанавливать драйвер от ST, так он сначала извлекается в целевую папку,
а устанавливать его уже вручную приходилось в зависимости от разрядности винды.
EmbedElektrik
а че за борда то? пулл-ап включается куда надо?
razrab83
Цитата(ivan24190 @ Oct 11 2017, 16:43) *
Плюс ко всему надо было "правильно" устанавливать драйвер от ST, так он сначала извлекается в целевую папку,
а устанавливать его уже вручную приходилось в зависимости от разрядности винды.
Спасибо за совет про стек и кучу, попробую. Про драйвер.... винда берёться за драйвер только после того, как pid/vid считает. У меня этого не происходит.


Цитата
а че за борда то? пулл-ап включается куда надо?
самодельная. аппаратная часть отлажена и с самописным драйвером работает.

Цитата
Собрать вряд ли, а вот прошить и посмотреть работу могу.
Хорошо, соберу. Какой процессор (все буковки)? Какой кварц/генератор на HSE? Сделаю hex. Могу проект для иара.
aaarrr
Цитата(razrab83 @ Oct 12 2017, 07:17) *
Хорошо, соберу. Какой процессор (все буковки)? Какой кварц/генератор на HSE? Сделаю hex. Могу проект для иара.

F407VET6, кварц 25MHz
razrab83
Цитата(aaarrr @ Oct 12 2017, 08:50) *
F407VET6, кварц 25MHz

aaarrr
Определяется:
Цитата
Bus 001 Device 006: ID 0483:5740 STMicroelectronics STM32F407

razrab83
Цитата(aaarrr @ Oct 12 2017, 13:29) *
Определяется:

Да ладно!!! А что за борда?

не понятно.... почему в исходниках для 407 в прерывании усб
uint32_t hclk = 180000000U;

Спасибо за тест.... возможно всё таки не правильно аппаратная часть. буду перепроверять.
razrab83
взал для испытаний кит дискавери на 401-ом. сгенерил для дискавери 401.
залил - анкноун девайс. пробовал стек увеличить (стек с00, куча а00) - анкноун девайс, пробовал vcp и hid - unknown device!!!

странно...
aaarrr
Цитата(razrab83 @ Oct 13 2017, 06:50) *
Да ладно!!! А что за борда?

Просто одно из моих изделий. Никаких особенностей, относящихся к USB, не имеет, все штатно.
esaulenka
Цитата(aaarrr @ Oct 11 2017, 15:06) *
Не знаю, как в 401, а в 407 выбор режима Peripheral only (т.е. установка бита FDMOD в регистре OTG_FS_GUSBCFG) никак не мешает USB пребрасываться в режим хоста по состоянию ID, хотя мануал и обещает обратное.

Риторический вопрос, но для ясности задам.
Ремап этой ноги указывает на что-то, отличное от USB OTG ?
aaarrr
Цитата(esaulenka @ Oct 16 2017, 15:09) *
Ремап этой ноги указывает на что-то, отличное от USB OTG ?

Нет: PA10 AF10, т.е. OTG_FS_ID.
dimone
USBD_MAX_STR_DESC_SIZ если 256 поменяйте на 512
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.