реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> STM32F4, DCMI и USB
zheka
сообщение Mar 20 2015, 06:46
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 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?

В общем, подскажите, что мне нужно для решения задачи?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 20 2015, 08:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(zheka @ Mar 20 2015, 09:46) *
В общем, подскажите, что мне нужно для решения задачи?

Проще всего переделать CDC на BULK.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 20 2015, 09:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Dr.Alex @ Mar 20 2015, 11:20) *
Проще всего переделать CDC на BULK.

Максимум 980кБайт/сек на USB-FS.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 20 2015, 09:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(adnega @ Mar 20 2015, 12:29) *
Максимум 980кБайт/сек на USB-FS.

Зачем ФС? ХС надо. О скорости я недавно отчитывался.
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 20 2015, 10:40
Сообщение #5


Гуру
******

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



Цитата(Dr.Alex @ Mar 20 2015, 12:37) *
Зачем ФС? ХС надо. О скорости я недавно отчитывался.


можно ссылку на отчет?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 20 2015, 10:41
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(zheka @ Mar 20 2015, 13:40) *
можно ссылку на отчет?

http://electronix.ru/forum/index.php?showtopic=126651
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 20 2015, 10:48
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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 там скорости повыше
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 20 2015, 15:29
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Mar 20 2015, 13:48) *
А для решения задачи вам надо еще драйвер на стороне Windows, есть встроенный HID и практически встроенный CDC. Остальные драйверы надо писать самому, и потому обмен через другие интерфейсы вам создаст дополнительных проблем.


Так-то есть еще usb video class, по которому работают камеры в винде, он стандартный, но на стороне мк реализовать сложнее.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 20 2015, 16:57
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Так-то есть еще usb video class,

это видать что-то новое появилось... правда я так давно этим USB последний раз занимался, что оно может быть вполне и староеsm.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 20 2015, 17:58
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 21 2015, 12:15
Сообщение #11


Гуру
******

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



Много бубнов разбил, но установил все-таки этот драйвер.
Объясните мне феномен - как ни переключаю скорость COM-порта в Terminal - данные идут правильные и на высокой скорости. Это как?
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 21 2015, 14:28
Сообщение #12


Знающий
****

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



Цитата(zheka @ Mar 21 2015, 15:15) *
Объясните мне феномен - как ни переключаю скорость COM-порта в Terminal - данные идут правильные и на высокой скорости. Это как?

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


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 21 2015, 14:36
Сообщение #13


Гуру
******

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



А из DMA тогда как в USB писать?
Что записывать в DMA_InitStructure.DMA_Memory0BaseAddr ???
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 21 2015, 17:36
Сообщение #14


Гуру
******

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



ох... у меня голова уже опухла..
Вот здесь в конце есть ссылка на якобы рабочий проект для Eclipse. http://ctrl-v.biz/blog/7
Пытаюсь переделать под Keil. Все добавил, все прописал, все пути к include тоже вбил. Не компилится и все тут.
Если кому не трудно, гляньте в аттаче...

Сообщение отредактировал zheka - Mar 22 2015, 06:25
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 22 2015, 05:37
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 06:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016