|
|
  |
STM32F4, DCMI и USB |
|
|
|
Mar 20 2015, 06:46
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Коллеги, хочу передавать изображения с камеры OV7670 (640x480) на комп. В распоряжении есть плата STM32F4Discovery, камера с ебея уже пересекает китайскую границу, проект использующий аппаратный DCMI и DMА я нашел. Пока суровые китайские таможенники оформляют пересечение камерой границы, хочу хотя бы проэмулировать передачу данных, то есть искусственно заполнять буфер, куда DMA кидает данные тестовой картинкой и принимать ее на компе.
Оговорюсь сразу - задача специфическая, и большого FPS не потребует, 3 кадра в секунду меня устроят.Получается скорость должна составлять около 2 мбайт сек. И что-то я в растерянности. Единственный мой опыт - USB HID на STM32F103, пакетами по 64 байта. Отсюда первый вопрос - в орежиме USB HID какая максимально возможная скорость? 2 мбайт / сек потянет?
Далее -я пытался ковырятьс в примерах - есть там пример, который из платы дисковери делает мышку на акселерометре. Вроде бы это USB HID, но почему-то в тексте программы я встречал упоминание USB OTG. Насколько я знаю, USB HID является ведомым по отношению к компу, а комп - это всегда хост. Вроде бы, если я правильно понял - USB OTG - это разновидность USB Host, плата при этом сама становится "компом" и к ней можно подключать флешку например. Зачем для мышки USB OTG?
В общем, подскажите, что мне нужно для решения задачи?
|
|
|
|
|
Mar 20 2015, 10:48
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата USB OTG - это разновидность USB Host OTG - это и Host и Device. В зависимости от того зажат специальный контакт или нет. То есть это USB которое само определяет куда оно подключилось, если к девайсу, становиться хостом, если к хосту становиться девайсом. То есть OTG не означает что оно использовалось как хост, просто факт возможности Цитата В общем, подскажите, что мне нужно для решения задачи? А для решения задачи вам надо еще драйвер на стороне Windows, есть встроенный HID и практически встроенный CDC. Остальные драйверы надо писать самому, и потому обмен через другие интерфейсы вам создаст дополнительных проблем. Наверное идеологически правильно использовать все же CDC, но в целом можно конечно картинку представить как HID input report, и через interrupt точку гнать данные. Частота пакетов в HID если не ошибаюсь 1 КГц, размер пакета 64 байта максимальный по спецификации для HS, FS и 8 для LS. так что через HID вы продавите 64 Кбайтай/сек - край... Потому смотрите в сторону CDC там скорости повыше
|
|
|
|
|
Mar 20 2015, 17:58
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Установил я virtual comport driver версия 1.4, скачал с самого сайта ST. Все установилось без проблем. Но появляющийся com-порт со значком ошибки - для устройства не установлены драйверы. Хотя номер порту присваивается. При попытке вручную что-то сделать выдается сообщение "Неправильная секция установки службы в этом ini файле" Прошивку качал отсюда http://ctrl-v.biz/blog/7Что я делаю не так? Ini файл прикладываю
Сообщение отредактировал zheka - Mar 20 2015, 18:03
|
|
|
|
|
Mar 21 2015, 14:28
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(zheka @ Mar 21 2015, 15:15)  Объясните мне феномен - как ни переключаю скорость COM-порта в Terminal - данные идут правильные и на высокой скорости. Это как? Так и есть. В USB данные будут ходить с той скоростью, сколько USB позволит. То, что вы устанавливаете, это фактически настройки для реального COM порта, который может торчать с другой стороны USB. Они уходят отдельными командами и могут быть использованы, если нужно. Например можно сделать конвертер USB-COM и по переданным параметрам устанавливать нужную скорость UART.
--------------------
Пасу котов...
|
|
|
|
|
Mar 22 2015, 05:37
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Нашел что надо прописать. Компилится, линкуется. Но вываливается в Hard Fault.. Ставлю брейкпоинт на самую первую строку - брейкпоинт не срабатывает. В чем моежт быть дело? Файл, выложенный выше, обновил. ///////////////// Прошелся отладчиком пошагово : Код IMPORT __main
LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP доходит до BX R0 и вылетает в hard_fault Стартап я правда взял от примеров от ST для дискавери4, потому как в примере для Eclipse он как будто на другом языке написан.
Сообщение отредактировал zheka - Mar 22 2015, 07:30
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|