Jump to content

    
Sign in to follow this  
zheka

STM32F4, DCMI и USB

Recommended Posts

Коллеги, хочу передавать изображения с камеры 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?

 

В общем, подскажите, что мне нужно для решения задачи?

Share this post


Link to post
Share on other sites
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 там скорости повыше

Share this post


Link to post
Share on other sites
А для решения задачи вам надо еще драйвер на стороне Windows, есть встроенный HID и практически встроенный CDC. Остальные драйверы надо писать самому, и потому обмен через другие интерфейсы вам создаст дополнительных проблем.

 

Так-то есть еще usb video class, по которому работают камеры в винде, он стандартный, но на стороне мк реализовать сложнее.

Share this post


Link to post
Share on other sites
Так-то есть еще usb video class,

это видать что-то новое появилось... правда я так давно этим USB последний раз занимался, что оно может быть вполне и старое:)

Share this post


Link to post
Share on other sites

Установил я virtual comport driver версия 1.4, скачал с самого сайта ST.

Все установилось без проблем.

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

При попытке вручную что-то сделать выдается сообщение "Неправильная секция установки службы в этом ini файле"

 

Прошивку качал отсюда http://ctrl-v.biz/blog/7

 

Что я делаю не так? Ini файл прикладываю

Edited by zheka

Share this post


Link to post
Share on other sites

Много бубнов разбил, но установил все-таки этот драйвер.

Объясните мне феномен - как ни переключаю скорость COM-порта в Terminal - данные идут правильные и на высокой скорости. Это как?

Share this post


Link to post
Share on other sites
Объясните мне феномен - как ни переключаю скорость COM-порта в Terminal - данные идут правильные и на высокой скорости. Это как?

Так и есть. В USB данные будут ходить с той скоростью, сколько USB позволит.

То, что вы устанавливаете, это фактически настройки для реального COM порта, который может торчать с другой стороны USB. Они уходят отдельными командами и могут быть использованы, если нужно. Например можно сделать конвертер USB-COM и по переданным параметрам устанавливать нужную скорость UART.

Share this post


Link to post
Share on other sites

ох... у меня голова уже опухла..

Вот здесь в конце есть ссылка на якобы рабочий проект для Eclipse. http://ctrl-v.biz/blog/7

Пытаюсь переделать под Keil. Все добавил, все прописал, все пути к include тоже вбил. Не компилится и все тут.

Если кому не трудно, гляньте в аттаче...

Edited by zheka

Share this post


Link to post
Share on other sites

Нашел что надо прописать.

Компилится, линкуется. Но вываливается в Hard Fault..

Ставлю брейкпоинт на самую первую строку - брейкпоинт не срабатывает.

В чем моежт быть дело?

Файл, выложенный выше, обновил.

/////////////////

 

Прошелся отладчиком пошагово :

        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

 

доходит до BX R0 и вылетает в hard_fault

Стартап я правда взял от примеров от ST для дискавери4, потому как в примере для Eclipse он как будто на другом языке написан.

Edited by zheka

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this