Здравствуйте. Не могу установить постоянное подключение контроллера(stm32h745) с мышкой. Хронология: 1. На прерывании Port connect detected делаю Port reset 2. ядро устанавливает Port enable 3. В GINTSTS прилетает disconnect и сбрасывается Port enable. и так по кругу с частотой 1-2 гц. Я должен успеть что-то отправить мышке (например get descriptor) или соединение уже должно быть постоянным? Мышь low speed-ная, я вижу это в статусе подключения в HPRT. Я уж и фрейм интервал поставил 1мс (резет валуе 1.25) и частоту PHY 48/8=6 сделал. Может мне D+ D- поменять местами? Пробую отправить get descriptor в момент подключения, в ответ... нифига. В device режиме все работает, скопировал по дескрипторам мышку, жму кнопку - мышь едет.
Притом, с большой вероятностью сработает такая же последовательность действий. Я бы проверил цепи питания, на предмет ненужных пульсаций, всплесков/провалов, помех.
danone78 писал(а):
Может мне D+ D- поменять местами?
Эти слова (если не в шутку сказаны) немного пугают и наводят на всякие мысли... это демо-отладочная плата, или что-то самодельное? если последнее, то к схеме и трассировке USB множество вопросов может быть.
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
Не то чтобы все отвалилось, но далеко я не продвинулся. Все что удалось это отправить get descriptor, получить ACK+XFRC одновременно, потом отправить пустой пакет. Пытаюсь отправить токен IN - или ошибка передачи или STALL. Можно принимать ответы на том же канале на котором отправляю запросы? А то с другими каналами совсем плохо, все зависает по непонятным причинам, размаскировываю канал, отправляю пустой пакет или токен IN(то есть FIFO не трогаю) и зависаю, пытаюсь прочитать и очистить его регистр прерывания, а там нули и сбрасывать нечего, но с прерывания не выйти.
Добавлено after 13 minutes 41 second: В Device режиме можно включить несколько конечных точек одновременно, с каналами видимо, надо выключать канал перед включением другого, хотя они по xfrc должны сами выключатсья, ща залогаю регистр управления каналом гляну что там происходит.
Добавлено after 5 hours 53 minutes 17 seconds: Лед тронулся. Вот уж такую козу я не ожидал. Отправил get descriptor на CH0, получил АСК+XFRC. При отправке токена IN на CH1 выскакивают прерывания конечных точек! В общем я их замаскал и вуаля, получаю первый дескриптор.
Вообще из всей периферии на stm32, USB самая вредная. Все упирается в прерывания и статусный регистр: - Некоторые прерывания просто не маскируются вообще - некоторые маскируются (не срабатывают), но биты в статусном регистре устанавливаются - есть и такие которые не устанавливают бит, но срабатывают. - IEPINT срабатывает в принудительном хост режиме при DAINT=0. Самое веселье начинается, когда переключаешь режим и делаешь core soft reset - карета превращается в ТЫКВУ! Весь этот выпендрешь с On-The-Go приводит к глюкам в работе конечных автоматов.
Вообще из всей периферии на stm32, USB самая вредная. Все упирается в прерывания и статусный регистр: - Некоторые прерывания просто не маскируются вообще - некоторые маскируются (не срабатывают), но биты в статусном регистре устанавливаются
Вообще-то это и правильно. Странно ожидать другого.
- есть и такие которые не устанавливают бит, но срабатывают.
С stm32h745 не работал, но ваял USB-device в STM32Lxxx. Не Кубом, а самостоятельно. И особенных проблем не встретил. Почти всё работало нормально. Единственный косяк, на который наткнулся - неполная поддержка изохронного режима.
Но у меня был только device-режим. Без всяких host или OTG.
Мне повезло, раньше на куб инфы не было вообще, и мне пришлось начинать в Keil. А там есть возможность писать прямо в асме, что меня несказанно радовало. АРМовцы поздно прочухали что такое людям давать нельзя, вся их инфа вместе с архитектурами ядер разлетелась по свету. STM-щики в своих RM-ах гениально обтекают многие нюансы. Мне вообще кажется, что у них наш Сергей Лавров работает на RM-ах.
Добавлено after 28 minutes 4 seconds: У меня уже все работает, но вся эта возня с дескрипторами мне кажется не обязательна. Если я подключаю USB устройство и знаю что это мышь и что она с конечной точки 1 будет слать мне interrupt данные, почему бы просто сразу не открыть ей канал и послать set_configuration, без адресации без ничего? Я например так реализовал микро веб сервер, все htm страницы умещаются в один сегмент 1420 байт, я просто разворачиваю секвенции и отправляю ответы. Все гениально, просто и работает с любого смартфона через вайфай.
мне пришлось начинать в Keil. А там есть возможность писать прямо в асме, что меня несказанно радовало. АРМовцы поздно прочухали что такое людям давать нельзя, вся их инфа вместе с архитектурами ядер разлетелась по свету.
Вообще не понял что тут написано... Как именно ARMовцы мешают вам писать на асме? Что "давать нельзя" и почему?
Мне повезло, раньше на куб инфы не было вообще, и мне пришлось начинать в Keil. А там есть возможность писать прямо в асме, что меня несказанно радовало. АРМовцы поздно прочухали что такое людям давать нельзя, вся их инфа вместе с архитектурами ядер разлетелась по свету. STM-щики в своих RM-ах гениально обтекают многие нюансы. Мне вообще кажется, что у них наш Сергей Лавров работает на RM-ах.
А мужики то не в курсе! Вот пример моего говнокодинга на асме под Eclipse для ARM EABI: Спойлер
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 16 мая 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
jcxz, именно поэтому это и говнокод, была такая проба пера лет 10+ назад. Смысл послания был в том, что асм РУКИ не только никто не запрещает использовать, но и позволяется оформить __NAKED__ процедуры на, собсно, "голом" асме, если вы знаете т.н. "соглашение о вызове" для своего языка программирования.
Ваш код полон таких пар. А какой смысл в них? Зачем???
Профдеформация после MCS80, MCS96 и т.д.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 16 мая 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Ладно давайте вернемся к USB. Мышь работает не очень хорошо, то halt то nack ответит, через пень колоду короче. Запросы отправляю в начале кадра и только по одному запросу. Че за фигня, кто останавливает канал?
Ладно давайте вернемся к USB. Мышь работает не очень хорошо, то halt то nack ответит, через пень колоду короче. Запросы отправляю в начале кадра и только по одному запросу. Че за фигня, кто останавливает канал?
А что за мышка? У меня есть аппаратный USB сниффер, я бы мог записать нормальный обмен как эталон, например. Для примеру записал обмен от беспроводной мышки, файл лога в аттаче. Софт для просмотра можно взять на сайте производителя, он с файлами логов работает и без самого устройства, есть ангельский язык, программа работает без установки. Брал его, кстати, как раз для отладки таких случаев, при реализации USB хоста на STM.
Вложения:
Комментарий к файлу: Скриншот Снимок.PNG [241.6 KiB]
Скачиваний: 26
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 16 мая 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
ваял USB-device в STM32Lxxx. Не Кубом, а самостоятельно. И особенных проблем не встретил. Почти всё работало нормально. Единственный косяк, на который наткнулся - неполная поддержка изохронного режима.
Ну да. Не считая наркоманский EPnR, у которых часть битов read-only, часть read-write, часть можно только стереть, причем нулем, а часть инвертировать, причем единицей. А что за проблема с изохронными точками? У меня аудио-девайс (микрофон + динамик) вполне запустился.
danone78 писал(а):
У меня уже все работает, но вся эта возня с дескрипторами мне кажется не обязательна. Если я подключаю USB устройство и знаю что это мышь
Так а хосту-то об этом откуда узнать? Как узнать сколько кнопок, какое абсолютное смещение соответствует передаваемым данным?
Пробовал на двух мышках, одна Genius вторая Zornwee, одинаково. Разобрался что надо PID чередовать, вот только черный нечетный кадр пробовал менять и разницы не увидел. Получается что раз в милисеунду обязательно на SOF прерывание залетать? И.. я не понял где кнопки? Смещения координат я получаю, а кнопки то куда? Жму кнопку, прилетает пакет с нулями.
Добавлено after 6 minutes 57 seconds: К стати давно хотел спросить, какая разница между периодическими и непериодическими запросами?
Добавлено after 9 minutes 41 second: Единственное отличие в работе мышек, в том что Zornwee переподключается если ей после остановки канала ничего не послать, а Genius нет, просто молчит.
Добавлено after 22 minutes 59 seconds: Простите я наврал, кнопки прилетают.
Ну да. Не считая наркоманский EPnR, у которых часть битов read-only, часть read-write, часть можно только стереть, причем нулем, а часть инвертировать, причем единицей.
А что за проблема с изохронными точками? У меня аудио-девайс (микрофон + динамик) вполне запустился.
Значит у вас размер точек был маленький.
Проблема в том, что размер USB-памяти сильно ограничен. А так как в этой памяти нужно разместить дескрипторы всех точек, а также разместить память для ep0 и по 2 буфера под каждую изохронную точку, то получается, что максимальный размер изохронной точки может быть немного больше 230 байт (если всего одна точка активна).
Для USB-FS размер изохронных точек может быть - до 1023 байт. А значит - и максимальная скорость изохронной передачи ограничена - менее 1/4 от максимально возможной для USB-FS. Получается - STM32L не соответствует даже требованиям USB-FS. Или не полностью соответствует.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения