Проблемы с перечислением USB.

victor_pv
Чт 11 мая 2017 г., 4:49
Теперь, когда я получил доску F4 с USB, благодаря AG, я обнаружил, что доска не перечисляется при сбросе, только если я потянут и подключил USB -кабель.

Я изменил процедуру перечисления, чтобы лучше соответствовать тому, что мы делаем в Libmaple, только заставив подсчет в 3 раза дольше, чем F4 работает намного быстрее, и теперь Правление пересекается правильно каждый раз сброшен.
Код, который я использовал, такого: pinMode(PA12, OUTPUT); digitalWrite(PA12, LOW); //HAL_Delay(1000); for(i=0;i<1512;i++){}; pinMode(PA12, INPUT);

Rogerclark
Чт 11 мая 2017 г., 6:59
Я попробовал с Maple Mini, но в настоящее время у меня возникают проблемы с USB/PID, не соответствующим драйвере STM.

Код Дэниелса, кажется, использует
USB \ vid_0483&PID_5740&Rev_0200&Mi_00

Но использование досок нуклео и т. Д

USB \ vid_0483&PID_374B&Rev_0100&Mi_02


Но это может быть потому, что я ранее установил различные драйверы USB CDCACM для обоих этих, и, возможно, моя система немного испорчена.

Я попробую на другой машине

Даниэфф
Чт 11 мая 2017 г., 7:36 утра
Rogerclark написал:Я попробовал с Maple Mini, но в настоящее время у меня возникают проблемы с USB/PID, не соответствующим драйвере STM.

Код Дэниелса, кажется, использует
USB \ vid_0483&PID_5740&Rev_0200&Mi_00

Но использование досок нуклео и т. Д

USB \ vid_0483&PID_374B&Rev_0100&Mi_02


Но это может быть потому, что я ранее установил различные драйверы USB CDCACM для обоих этих, и, возможно, моя система немного испорчена.

Я попробую на другой машине

AG123
Чт 11 мая 2017 г. 7:37 утра
Привет, Виктор, все

ОТ {
Я немного погрузился в USB, так как я был несколько заинтересован в USB Mass Storage
Ой, USB - это *сложный *, а не сама основная концепция, основная концепция - просто отправлять пакеты и 16 «конечные точки» на одно устройство :)
Но весь стек протоколов или USB «Двигатель» (государственные машины) и необходимость исправить модуль (USB -структура ST), который работает как «обратный вызов». и различия между платформами F1 против F4 (F4 - V -комплекс, потому что он добавляет буферы FIFO и OTG I.эн. F4 может работать как USB -хост - но мы оставили бы это в стороне сейчас)

Я отметил, что Black F407Vet6 не выполняет USB -сброс при сбросе MCU, это, в частности, происходит и в собственном режиме DFU STM также. (я.эн. Установите загрузку 0, О, чтобы сделать инсталляцию эскиза DFU-UTIL на черном VET6, все, что вам нужно сделать, это
1) Установите Boot0 и сделайте сброс (сейчас необходимо отключить и повторно проникать в USB-кабель)
2) Запуск dfu -util -a 0 -s 0x8000000 -d эскиз.бин
Нет ключей, нет UART, нет ST-Link и т. Д., Встроенный загрузчик DFU ST DFU : D
http: // www.STM32duino.com/viewtopic.PHP ... = 10#p26027
}

Я предполагаю, что вы здесь делаете, чтобы вытащить как USB-линии D+, так и D- вниз до 0 в течение 10 мс (однократный конец нулю)
http: // www.USBMADESIMPLE.сопутствующий.Великобритания/UMS_3.htm
Это сбросит USB -автобус и приведет к тому, что хост/ПК снова начнет перечислять, я полагаю.

Тем не менее, я думаю, если мы должны после всех использовать системные вызовы и, возможно, использовать USB -ферипериальные регистры, чтобы сделать USB -сброс вместо этого
в RM0008 STM32F1 RM P629 23.4.2 USB -сброс << Ой Обратите внимание, это для F1
P640 23.5.1 USB Common Registers Регистр управления USB (USB_CNTR)
Смещение адреса: 0x40
Сброс значения: 0x0003
Bit 0 FRES: PIRCE USB RESET
0: Clear USB -сброс.
1: Заставьте сброс периферийного устройства USB, точно так же, как сигнализация сброса на USB. А
USB Peripheral проводится в состоянии сброса, пока программное обеспечение не очистит этот бит. А “USB-Ресете”
сгенерируется прерывание, если включено.
Я думаю, если бы было лучше, если мы напишем 1 в USB CNTR Register Bit 0, чтобы запустить этот USB -сброс

Для F4 нам нужно использовать другой регистр RM0009 P1252 34.5.2 периферийные состояния
Приводное состояние

Мягкое отключение
Состояние питания может быть выведено с помощью программного обеспечения с функцией мягкого отключения. DP тянет-
резистор UP удаляется, установив бит с мягким отключением в регистре управления устройством (SDIS
Бит в OTG_FS_DCTL), в результате чего устройство обнаружения отключения устройства на стороне хоста
Несмотря на то, что USB -кабель не был на самом деле удален из хоста порта.
RM0009 P1306 OTG_FS Регистр управления устройствами (OTG_FS_DCTL)
Смещение адреса: 0x804
Сброс значения: 0x0000 0000
BIT 1 SDIS: мягкое разъединение
Приложение использует этот бит, чтобы сигнализировать о ядре USB OTG для выполнения мягкого отключения. Как
Пока этот бит установлен, хост не видит, что устройство подключено, и устройство
не получает сигналов на USB. Ядро остается в отключенном состоянии до
Приложение очищает этот бит.
0: нормальная работа. Когда этот бит очищается после мягкого отключения, ядро ​​генерирует
Событие устройства подключить к USB -хосту. Когда устройство повторно подключено, USB -хост
Перезагружает перечисление устройств.
1: ядро ​​генерирует событие отключения устройства на USB -хост.
Нам нужно было бы установить сброс битов и подождать 10 мс, чтобы хост запустил повторный разъединение портов USB

Я думаю, что может быть некоторые призывы к API HAL

всего 2 в

AG123
Чт 11 мая 2017 г., 7:55 утра
О, примечание в Linux, я устал отключить и заменять кабели каждый раз между DFU (boot0 = 1) и нормальным запусками Sketch (boot0 = 0)
Я гуглил по Интернету и нашел этот код USBRESET/* usbreset -- send a USB port reset to a USB device */ #include #include #include #include #include #include int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Rogerclark
Чт 11 мая 2017 г., 10:01
Даниэфф написал:Rogerclark написал:Я попробовал с Maple Mini, но в настоящее время у меня возникают проблемы с USB/PID, не соответствующим драйвере STM.

Код Дэниелса, кажется, использует
USB \ vid_0483&PID_5740&Rev_0200&Mi_00

Но использование досок нуклео и т. Д

USB \ vid_0483&PID_374B&Rev_0100&Mi_02


Но это может быть потому, что я ранее установил различные драйверы USB CDCACM для обоих этих, и, возможно, моя система немного испорчена.

Я попробую на другой машине

AG123
Чт 11 мая 2017 г. 11:36
Привет, Роджер, Даниэль,

Я еще не пробовал ядро ​​STM32GENERIER, но я думаю, что проблема на самом деле не связана с VID / PID.
Проблема, как я обнаружил, когда я попробовал ядро ​​Libmaple F4 (на черной ветви Стива), заключается в том, что STM32F4, по -видимому, не выпускает * USB -сброс *, когда нажата кнопка сброса.

Я считаю, что на Maple Mini, кажется, есть дополнительная схема (E.глин. Транзистор на линии USB), который запускает USB -сброс, когда нажимается кнопка сброса на Maple (или Baite) Mini

В то время как для платы F4 (Black Vet6), USB D+ и D-линии просто просто подключены прямо к MCU, а VBU и землю направляются в LDO, никаких специальных цепей не используется.

Когда это произошло, нажатие сброса не генерирует USB -сброс на USB -шине, то, что нужно сделать, это сделать «одиночный конечный ноль» I.эн. Потяните как D+, так и D- (PA11, PA12) Low на 10 мс, чтобы контроллер хоста USB обнаружил, что в качестве USB-сброса и начнет повторное разъединение устройств (я бы подумал, что первый пост Виктора отражает его)

всего 2 цента
---------------------
Ой, моя глупа, я думаю, что на самом деле есть 2 отдельных вопроса, одна - это VID/PID, другой - USB -сброс, они на самом деле независимы.
Казалось, в Linux VID/PID - это «менее проблема», как обычно, это вручную отредактировано в файле конфигурации UDEV, и на самом деле это работает даже без редактирования файлов UDEV.

Но я бы подумал в Windows, он попросил бы «установить драйвер», отсюда и проблема

victor_pv
Чт 11 мая 2017 г. 13:20
@Ag, я не помню наверняка, но я верю, что я попытался «сбросить» периферийные устройства USB через периферийные настройки, пытаясь найти способ повторного выхода на общих досках и не работал. Это заставляет USB-периферийное устройство сбросить себя, но ничего не делает в USB-линиях, чтобы хост не повторно размер De Device, и он просто не работает. Это то, что я помню более года назад, когда мы реализовали текущий метод вытягивания линии вниз.
Вы все равно должны пойти дальше и проверить, чтобы увидеть, работает ли это, моя память может быть неправильной, или, возможно, я не проверял это правильно.

О применении сброса из Windows, которое сбросило бы USB -устройство, но не MCU, поэтому я не думаю, что это поможет вам отключить и заменить плату после загрузки.

@Daniel, я изменил 2 вещи, чтобы заставить его работать в F4, и я думаю, что не должен ничего сломать для другой серии. Я только что послал с ним пиар:
1.- Держать линию немного дольше. Роджер настраивал это до очень короткого импульса, которого было достаточно для F1, но может быть недостаточно для более быстрых MCU (F4 и другие), так как цикл не учитывается фактическое время, так что, чем быстрее, тем быстрее MCU, тем быстрее он работает. Либо мы просто делаем это дольше для всех, либо добавим код, чтобы сделать его более длинным, чем быстрее работает ЦП.
2.- Оставьте штифт USBDP в режиме ввода после вытягивания, поэтому плавающий, а не выходе. Я не думаю, что PIN должен быть в высокой выходе по любой причине. Уже должно быть резюме 1K5, который поднимает линию высоко, так что все, что нам нужно, это то, что он вниз, и SEULEAS.

Я не проверял изменения отдельно, если у вас есть время, иначе я сделаю, как только у меня будет время.

Стивестронг
Чт 11 мая 2017 г. 13:53
AG123 написал: Проблема, как я обнаружил, когда я попробовал ядро ​​Libmaple F4 (на черной ветви Стива), заключается в том, что STM32F4, по -видимому, не выпускает * USB -сброс *, когда нажата кнопка сброса.

AG123
Чт 11 мая 2017 г. 14:08
Спасибо, Стив, Виктор,

Я бы попробовал их, так как я вмешиваюсь с булавками, в основном для загрузки эскизов, я в настоящее время использую эту утилиту Usbreset 'Linux для оборудования для проблем
Я бы подумал, что это возможно с режимом DFU ST, который может не выполнить сброс USB после нажатия кнопки сброса.

Даниэфф
Солнце 14 мая 2017 г. 3:40
Rogerclark написал:Даниэфф написал:Rogerclark написал:Я попробовал с Maple Mini, но в настоящее время у меня возникают проблемы с USB/PID, не соответствующим драйвере STM.

Код Дэниелса, кажется, использует
USB \ vid_0483&PID_5740&Rev_0200&Mi_00

Но использование досок нуклео и т. Д

USB \ vid_0483&PID_374B&Rev_0100&Mi_02


Но это может быть потому, что я ранее установил различные драйверы USB CDCACM для обоих этих, и, возможно, моя система немного испорчена.

Я попробую на другой машине

Rogerclark
Солнце 14 мая 2017 г., 4:27
Даниэль

Да, я установил этот драйвер.

Но когда я подключаю Maple Mini, я получаю 2: STM32 Virtual Comport Comport «устройства» в Windows Drive Manager, но оба показывают восклицательный знак рядом с ними, и во всплывающем окне «Установка программного обеспечения драйвера» оба устройства показывают крест (X) и "нет водителя"

Я думаю, что я, наверное, так запутался, она смущена тем, какой драйвер он должен использовать.

Но я попробую подключить Maple Mini к другой машине и посмотрю, работает ли это

Rogerclark
Солнце 14 мая 2017 г., 4:31
Обновлять

Я попробовал это на компьютере моей жены (также Windows 7), но это все еще не сработало, однако результат был другим

Я вижу 2 другого устройства спрятанного «USB -ввода», а также виртуального COM STM

Но это не загружает драйверов ни на один.

У меня есть ноутбук с Windows 10 для тестирования, поэтому я попробую это позже, и я ожидаю, что он сработает, потому что это звучит так, как это задача USB -композитное устройство в Windows 7