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

 
 
10 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> STM32 USB FS OTG
aaarrr
сообщение Nov 7 2015, 21:15
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(prottoss @ Nov 7 2015, 23:37) *
...если прикрутить DMA, то, в принципе, сносно должно получится.

Вот не уверен. Вручную запрягать и обслуживать M2M на каждый чих может оказаться накладнее, чем быстренько выгрузить данные программно.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 12:26
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Поднял на собственном стеке HID с двумя INT точками. Сделал эхо. Все прекрасно работает. Производительность не измерял пока.
Есть непонимание по одному вопросу: Есть регистры, задающие размерность FIFO для IN конечных точек. Это OTG_FS_DIEPTXF0 для контрольной точки и OTG_FS_DIEPTXFx для рабочих точек.
С полем INEPTXFD все понятно. В мануале прямо про них написано:
Цитата
Bits 31:16INEPTXFD:IN endpoint TxFIFO depth
This value is in terms of 32-bit words.
Minimum value is 16
The power-on reset value of this register is specified as the largest IN endpoint FIFO
number depth.

С полем INEPTXSA, у меня, полного понимания нет. Описание в доке:
Цитата
INEPTXSA:IN endpoint FIFOx transmit RAM start address
This field contains the memory start address for IN endpoint transmit FIFOx. The address
must be aligned with a 32-bit memory location.
Т.е. вроде как исчисление в этом поле в байтах, но число должно быть выровнено на 32 бита.
Посмотрел примеры от ST. Там берется, к примеру, размер буфера в 32-бит словах (как и нужно), и это значение используется для вычисления адреса следующего буфера... Т.е. значение не делится на 4 для получения смещения в байтах...
Посмотрел в отладчике состояние этих регистров по умолчанию после инициализации OTG - там, судя по дефолтным значениям полей, происходит то же самое. Правда, для последних регистров, в итоге, занчение адреса вылезает за пределы максимального размера памяти OTG... Хоть в байтах, хоть в 32-бит словах. Опять веселье (С)aaarrr

Извините, может немного сумбурно объяснил вопрос.


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2015, 13:09
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(prottoss @ Nov 20 2015, 15:26) *
Т.е. вроде как исчисление в этом поле в байтах, но число должно быть выровнено на 32 бита.

Нет, все в словах исчисляется. FIFO у них иной адресации и не имеет.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 20 2015, 13:28
Сообщение #64


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(prottoss @ Nov 8 2015, 00:37) *
Мне сейчас интересно посмотреть, какая будет производительность у это OTG_FS ядра. Вижу, что ни о каком двойном буферировании BULK точек в мануале речи не идет - надеюсь оно там есть на уровне ядра? Криво, конечно, что OUT буфер один общий и его нужно обязательно вычитывать сразу, но если прикрутить DMA, то, в принципе, сносно должно получится.


Расскажите дилетанту для чего в USB нужен DMA пожалуйста. Ведь если посылать полные пакеты по 64 байта, то уже вроде как железо заполнит само буфер и вызовет одно прерывание на принятых 64 байта. Или речь идет о коротких пакетах? Вероятно я не вижу подводных камней.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 13:45
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(aaarrr @ Nov 20 2015, 19:09) *
Нет, все в словах исчисляется. FIFO у них иной адресации и не имеет.
Зачем тогда написано, что в поле адреса должно быть загружено значение, выровненное на 32 бита? Как можно не выровнять то, что уже выровнено?


Цитата(Tarbal @ Nov 20 2015, 19:28) *
Расскажите дилетанту для чего в USB нужен DMA пожалуйста. Ведь если посылать полные пакеты по 64 байта, то уже вроде как железо заполнит само буфер и вызовет одно прерывание на принятых 64 байта. Или речь идет о коротких пакетах? Вероятно я не вижу подводных камней.
Ну хотя бы для того чтобы переслать данные из памяти USB в порт, минуя копирование данных в память. Вроде как в stm32 otg это можно сделать, хотя, я еще не пробовал. За выходные вечера хочу попробовать. Организация FIFO, на мой взгляд, позволяет это сделать. При запуске трансфера настроить точку и канал, и по прерываниям по приему стартовать канал DMA.


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2015, 13:46
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Tarbal @ Nov 20 2015, 16:28) *
Ведь если посылать полные пакеты по 64 байта, то уже вроде как железо заполнит само буфер и вызовет одно прерывание на принятых 64 байта.

Именно что буфер FIFO заполнит, а не буфер в памяти процессора.

Цитата(prottoss @ Nov 20 2015, 16:37) *
Зачем тогда написано, что в поле адреса должно быть загружено значение, выровненное на 32 бита? Как можно не выровнять то, что уже выровнено?

Загадка-с. Выразились неудачно, CCCV и тому подобное.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 13:47
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Ну и по передаче так же.

Цитата(aaarrr @ Nov 20 2015, 19:46) *
Загадка-с. Выразились неудачно, CCCV и тому подобное.
Что такое CCCV? sm.gif


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2015, 13:48
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(prottoss @ Nov 20 2015, 16:45) *
При запуске трансфера настроить точку и канал, и по прерываниям по приему стартовать канал DMA.

64 байта пакета - это всего 16 слов, возможность выигрыша в такой конфигурации представляется сомнительной.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 13:48
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(aaarrr @ Nov 20 2015, 19:46) *
Выразились неудачно
Т.е. Вы уверены, что поле адреса - это 32-бит значения?


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2015, 13:50
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(prottoss @ Nov 20 2015, 16:47) *
Что такое CCCV? sm.gif

Ctrl-C Ctrl-V, copy-paste sm.gif

Цитата(prottoss @ Nov 20 2015, 16:48) *
Т.е. Вы уверены, что поле адреса - это 32-бит значения?

Честно скажу, не проверял. Но логика организации FIFO не позволяет думать иначе.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 20 2015, 13:51
Сообщение #71


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(prottoss @ Nov 20 2015, 17:45) *
Ну хотя бы для того чтобы переслать данные из памяти USB в порт, минуя копирование данных в память. Вроде как в stm32 otg это можно сделать, хотя, я еще не пробовал. За выходные вечера хочу попробовать. Организация FIFO, на мой взгляд, позволяет это сделать. При запуске трансфера настроить точку и канал, и по прерываниям по приему стартовать канал DMA.


Спасибо. Значит я все правильно понял.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 13:55
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(aaarrr @ Nov 20 2015, 19:48) *
64 байта пакета - это всего 16 слов, возможность выигрыша в такой конфигурации представляется сомнительной.
Согласен. Я не пробовал еще DMA, но, может быть есть возможность быстро его стартануть...


Цитата(aaarrr @ Nov 20 2015, 19:50) *
Честно скажу, не проверял. Но логика организации FIFO не позволяет думать иначе.
Хм. Логика понятна - доступ только 32 бит ИО, по этому размер задается в словах. Но смещение то не обязательно должно задаваться словами...


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2015, 13:55
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(aaarrr @ Nov 20 2015, 16:50) *
Честно скажу, не проверял. Но логика организации FIFO не позволяет думать иначе.

Поясню: я исходил из адресации в словах, в программе задействован не один буфер, каких-либо проблем и накладок не обнаружено.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 20 2015, 13:57
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Размер трансфера данных задается все таки в байтах

Цитата(aaarrr @ Nov 20 2015, 19:55) *
Поясню: я исходил из адресации в словах, в программе задействован не один буфер, каких-либо проблем и накладок не обнаружено.
Я тоже, в своей программе задал буфера так, что они в любом случае, не пересекаются. Значит буду пробовать делать крэш.


--------------------
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 20 2015, 15:45
Сообщение #75


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(aaarrr @ Nov 8 2015, 01:15) *
Вот не уверен. Вручную запрягать и обслуживать M2M на каждый чих может оказаться накладнее, чем быстренько выгрузить данные программно.


Или просто переставить указатель на буфер, а этот буфер в обработку. Хотя M2M надо тоже переставить указатели и стартануть -- не так много действий.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:22
Рейтинг@Mail.ru


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