|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
|
вопрос по теории обмена USB17.09.2014, 10:59. Показов 6713. Ответов 11
Метки нет (Все метки)
разжуйте, кто может, пожалуйста..
обмен на USB происходит по фреймам. Т.е пришло прерывание SOF( начало фрейма). т.е раз в 1мс. Если смотреть по примерам STM, то смотрим, не залежалось ли что на выдачу в комп, и если чего есть, то раскладываем очередные порции по буферам конечных точек EPn_IN, и выставляем STAT_TX в USB_EPnR в состояние VOTID Никак не могу понять, в какой момент хост забирает эту порцию? Если смотреть обработку прерывания USB_Istr(), то видим, что( предположим , что прерывания разрешены) сначала смотрим флаг SOF и синхронизируемся с хостом. А так же просматриваем залежавшиеся выдачи к хосту. Потом смотрим флаг CTR-успешное завершение передачи. И при наличии его, уходим на вызов коллбэка по наиболее приоритетной точке и там, опять же, как и в SOF, заносим очередную порцию в буфер точки. т.е, насколько понимаю, та порция, которую в буфер положили при обработке SOF, уже хостом забрана и как раз об этом и говорит бит успешной передачи CTR. И когда она была хостом из буфера взята? Ведь это же не просто линию уровнем придавить с требованием запроса, а целый пакет двоичный по кабелю должен пройти...
0
|
|
| 17.09.2014, 10:59 | |
|
Ответы с готовыми решениями:
11
Arduino как host usb, написание своего драйвера для обмена информацией с stm32 по usb Организация обмена данными usb-usb Вопрос по теории |
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
| 17.09.2014, 14:33 | |
|
Так там большая логика на уровне железа реализована. Не с проста же вы эти буферы объявляете в специальной области ROM. Когда периферия видит флаг готовности пакета, она без обращения к ядру ждёт следующего IN пакета и отвечает данными.
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
||
| 17.09.2014, 16:19 | ||
Но допустим, что где-то, на каких-то триггерах, лежат 4 байта для передачи в хост. Флаг готовности- это то самое, что выставляется вызовом SetEPTxVotyd(ENDPn);?
0
|
||
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
|
| 17.09.2014, 16:42 | |
|
и вот по распределению времени на шине USB..
1. Пришел раз в 1 мс SOF 2. в обработке его прерывания выяснили, что надо еще сто байт выпихнуть на хост через EP1 3. записываем то, что влезает, в буфер EP1_TXADDR . Ставим флаг готовности\наличия инфы 4. выходим из обработки SOF потратив 100 мкс Далее, судя по тексту USB_Istr(), 5.проверяем наличие других выставленных флагов прерываний, в том числе и CTR, которого еще, скорее всего нет, т.к содержимое буфера EP1_TXADDR еще никуда не успело уйти. 6. выходим из обработки прерывания и ждем следующего через 1 мс минус 100мкс Т.е фактически, получается, что вся выдача инфы в хост идет в основном по SOF? а в EP1_IN_Callback попадаешь только, если в SOF выдается маленький пакетик и он успевает уйти к хосту за время выхода из обработки SOF? Или я что-то конкретно не так понимаю?
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
|
| 17.09.2014, 17:05 | |
|
вот, кажется, нашла https://my.st.com/public/STe2esommuniti ... iews=7795#{EF60E56B-C2F8-4119-A795-32F7A8620571}
"Device prepares packet data on the bulk IN endpoint buffer, in advance. When host initiates an IN transaction, the divice USB engine (SIE) returns the data on the buffer in this IN transaction. If the endpoint buffer is empty, SIE returns NAK (not ready) to the IN transaction. NAK is also a normal response, which consists USB hardware flow control. Receiving NAK, PC host controller repeats IN transaction after short interval. In this way, host controller repeatedly polls bulk IN endpoint, while the endpoint is NAKymk. Youll see 30-40 IN-NAK transactions per frami." вольный перевод( вдруг кому так легче будет) " Устройство подготавливает пакетированные данные в IN буфере конечной точки типа bulk. Когда хост сынициализирует IN-транзакцию, ядро USB устройства (SIE) возвращает данные в этой IN-транзакции. Если буфер пуст, то SIE возвращает NAK( неготовность) для IN-транзакции....Получив NAK, хост повторяет IN-транзакцию через короткий интервал. таким образом, хост "пихает" конечную точку bulk-типа, пока она находится в NAkе. Возможны 30-40 IN-транзакций за один фрейм"
0
|
|
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|
| 17.09.2014, 17:09 | |
|
Хост - он на то и хост, чтобы инициализировать транзакции.
Вы что хотите узнать-то?
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
||
| 17.09.2014, 17:48 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|||||||||||||||||
| 17.09.2014, 18:03 | |||||||||||||||||
Обычно люди используют
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
||
| 17.09.2014, 18:35 | ||
|
а посмотрите в STM32_USB-FS-Device_lib_v3.4.4 проект Virtual_COV_Port. Там в EP1_IN _Callback() и в SOF_Callback() - одно и то же написано. Только в одном случае прямо текстом, а в другом- через вызов подпрограммы. Вставить сюда не могу - у меня на инете отдельная машина
0
|
||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
||||||||||||||||||||||||||
| 17.09.2014, 22:03 | ||||||||||||||||||||||||||
|
Вот и добрался я до кода....
Обработчик
В SOF_Callback начинается передача, а всё остальное передаётся через EP1_IN_Callback.
0
|
||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 183
|
|||
| 18.09.2014, 00:08 | |||
Всем спасибо, ситуацию я для себя прояснила
0
|
|||
| 18.09.2014, 00:08 | |
|
Помогаю со студенческими работами здесь
12
Вопрос по теории Вопрос по теории Вопрос по теории языка. Вопрос из области теории... Класс- вопрос по теории Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|