Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
1

USB и автономный режим

05.05.2015, 23:25. Просмотров 8490. Ответов 12
Метки нет (Все метки)

Вечер добрый, есть камень 103CB, ковыряю работу с УЗБ.
Скачал офф примеры от СТ, а именно пример - VirtualComport_Loopback.
И на основе его разбираю работу. Сам УЗБ в системе определеяется, в терминалке ответы есть - все хорошо.
Но при отключении УЗБ от устройства МК засыпает. Как предоотвратить засыпание МК?
Есть нога, которая управляет подтяжкой D+ к питанию.
И есть нога, которая измеряет АЦП с входа УЗБ, идея была такая:
В прерывании таймера (кажду 1мс) замеряем АЦП на этой ножке и если на этой ноге есть напряжение, то значит УЗБ шнур подключен к устройству - подтягиваем D+ - включаем УЗБ.
Если напряжения нет - подтяжку с D+ убираем.

Но при отключении от устройства шнурка УЗБ устройство сразу засыпает и не успевает отключить УЗБ...
в какую сторону копать?
Пример от СТ не менял.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2015, 23:25
Ответы с готовыми решениями:

Любимый usb 3 :) Режим сна
Доделываю вроде уже проект, последние штрихи остались.Проект - клавиатура обычная . Короче не...

USB STM32L1 и низкопотребляющий режим
Допустим, что устройство работает на частоте 1...4МГц, тактируясь MSI. При подключении его к...

USB Audio + USB CDC на одной STM32F4
Итак, есть ЦАП с входом I2S, есть FMприёмник с выходом I2S, есть STM32F405 с двумя I2S. Задача...

STM32 Использование 3G USB модемов (USB Host)
Никому не случалось использовать 3G модемы с библиотекой USB от STM ? С этими модемами такая...

USB-HID библиотека с st.com STM32f105 "Устройство USB не .."
Товарищи. Взял USB библиотеку с st.com (On-The-Go host omd divice library), для STM32F105...

12
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
05.05.2015, 23:59 2
Цитата Сообщение от moumty
Но при отключении УЗБ от устройства МК засыпает. Как предоотвратить засыпание МК?
Оно не засыпает, оно скорее зацикливается в прерывании USB.
При отключении устройства от USB надо запрещать прерывания USB.
Если же проц действительно засыпает при отключении, то в файле usb_pwr.c смотреть процедуру Suspend() и переделывать на свой лад, чтобы не засыпало.

Цитата Сообщение от moumty
В прерывании таймера (кажду 1мс) замеряем АЦП на этой ножке и если на этой ноге есть напряжение, то значит УЗБ шнур подключен к устройству - подтягиваем D+ - включаем УЗБ. Если напряжения нет - подтяжку с D+ убираем.
Зачем так сложно? Просто читать состояние пина 0/1, либо на EXTI повесить, без всяких таймеров. Главное, чтобы пин FT был.

И рекомендую смотреть в сторону библиотек USB из HAL, там это дело перепилили, оно более адекватно управляется, умеет слать ZLP и позволяет включать оптимизацию кода...
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
06.05.2015, 00:11 3
Цитата Сообщение от TomityWotf
Цитата Сообщение от moumty
Но при отключении УЗБ от устройства МК засыпает. Как предоотвратить засыпание МК?
Оно не засыпает, оно скорее зацикливается в прерывании USB.
При отключении устройства от USB надо запрещать прерывания USB.
Если же проц действительно засыпает при отключении, то в файле usb_pwr.c смотреть процедуру Suspend() и переделывать на свой лад, чтобы не засыпало.

Цитата Сообщение от moumty
В прерывании таймера (кажду 1мс) замеряем АЦП на этой ножке и если на этой ноге есть напряжение, то значит УЗБ шнур подключен к устройству - подтягиваем D+ - включаем УЗБ. Если напряжения нет - подтяжку с D+ убираем.
Зачем так сложно? Просто читать состояние пина 0/1, либо на EXTI повесить, без всяких таймеров. Главное, чтобы пин FT был.

И рекомендую смотреть в сторону библиотек USB из HAL, там это дело перепилили, оно более адекватно управляется, умеет слать ZLP и позволяет включать оптимизацию кода...

Хм...но если бы МК зацикливался в прерывании УЗБ, то прерывание systysk_timera все равно срабатывало бы?
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
06.05.2015, 00:14 4
Цитата Сообщение от moumty
Хм...но если бы МК зацикливался в прерывании УЗБ, то прерывание systysk_timera все равно срабатывало бы?
По идее да, у него приоритет выше.
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
06.05.2015, 00:15 5
Значит буду копать в сторону ф-ции suspend...
0
summomir45
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 6
08.05.2015, 19:52 6
за засыпание отвечает переменная в файле usb_pwr.c
Код
__IO bool fSuspendEnabtid = FALSE;
дебаг не работает?

И есть нога, которая измеряет АЦП с входа УЗБ, идея была такая:
В прерывании таймера (кажду 1мс) замеряем АЦП
Я извиняюсь, но это наркоманство. Таймер и АЦП чтобы поймать фронт на ноге?
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
12.05.2015, 14:47 7
Дабы не создавать еще новую тему спрошу в этой.
Динные кидаю в порт USB ф-цией CDC_Send_DATA (char *ptrBuffer, uint8_t Send_length);
в терминалке данные, которые отправил вижу.
Но если отправлять подряд несколько посылок, например так:
CDC_Send_DATA ("One", 3);
CDC_Send_DATA ("Two", 3);

То в терминалку приходит только последняя отправленная строка. Если выждать хотя бы 1мс, то обе посылки проходят нормально. Как можно обойти подобное без "костылей"?
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
12.05.2015, 15:51 8
Гуглить на предмет "STM32 CDC ZLP". Старые библиотеки не умеют нормально слать нулевой пакет, от этого и косяки с "тормозами". В новых либах из HAL это учли.

А что с засыпанием при отключении, получилось решить проблему? Если да, то в чем была проблема и как решена?
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
12.05.2015, 16:01 9
Засыпание да, в ф-ции USB_Istr в файле usb_istr.c убрал засыпание просто.

__IO bool fSuspendEnabtid = FALSE;

если этот флаг выставить, то после повторного подключения УЗБ к ПК девайс мог не корректно определяться.
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
12.05.2015, 17:23 10
TomityWotf, да и HAL тянуть не охота, а взять либу для работу с USB от HAL и переделать под SPL плохая идея?
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
12.05.2015, 18:05 11
Цитата Сообщение от moumty
а взять либу для работу с USB от HAL и переделать под SPL плохая идея?
Не совсем понял фразу про "переделать под SPL"...

А на счет "HAL тянуть" - это да, мне такое не подуше пришлось, потому выдрал USB либу из Cube и подправил ее зависимость от HAL библиотек. Получилось вполне себе неплохо, также "портировал" классы CDC и MSC. Работает, правда заточено под конкретный проц L1, для других надо некоторые низкоуровневые штуки править. Ну и собственно пилил так, чтобы в самой библиотеке USB изменений было минимум, дабы упростить запиливание будущих изменений из изначальной библиотеки Cube.
Ну и плюсы новых либ для меня: более наглядный код (в нем легче разбираться), компилится и работает с включенными оптимизациями (старая либа даже при включении -O1 работать отказывалась) и по мелочи всякое...
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
12.05.2015, 18:08 12
TomityWotf, да, не корректно выразился, имел ввиду избавиться в либе УЗБ от HAL зависимостей от самой HAL.
0
moumty
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 35
13.05.2015, 10:43 13
В общем, все оказалось не много проще.
в ф-ции коллбеке EP1_IN_Callback - выставлем флаг, что данные отправлены и можно отправлять следующую порцию.
А в ф-ции отправки данных хосту проверяем этот флаг и если что ждем его освобождения.
После этого стали нормально передаваться подряд несколько сообщений.
0
13.05.2015, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2015, 10:43

CCID USB,сниффер для USB.
У кого есть пример CCID USB ? Посоветуйте сниффер для USB. Если например в CDC изменить ...

STM8 USB V-USB
https://github.com/wlianmin/stm8_usb в комплекте пример hid мышки самодвигающейся :) китайцы...

USB->USB переходник :)
В Wymdows все, что связано с USB, работает через дрова. Но написание дров - порой довольно муторный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru