Jump to content

    
Sign in to follow this  
iiv

DMA USB Host<->USB Device на двух IMXRT1062

Recommended Posts

Добрый день,

 

имею две Teensy 4.1 https://www.pjrc.com/store/teensy41.html  , с процессором  IMXRT1062

В каждой борде есть USB Host и USB Slave, я хочу (слышал что можно) соединить Хост в Слейв и напрямую коммуницироваться, но совершенно не понимаю как сделать это через какой-то быстрый интерфейс. Идеально я хотел бы посылать с одной борды на другую пакеты по 16-64К данных и очень хотелось бы, чтобы это шло через DMA не затрагивая основной процессор.

 

Тыкните, пожалуйста, в какой-то пример как это делают! Я уже спросил у производителя на форуме https://forum.pjrc.com/threads/69191-2xT4-1-USB-Host-lt-gt-Usb-Devie-with-DMA , но там как-то почему-то мой вопрос пока еще проигнорировали.

 

Спасибо!

 

ИИВ

Share this post


Link to post
Share on other sites
15 часов назад, iiv сказал:

но совершенно не понимаю как сделать это через какой-то быстрый интерфейс. Идеально я хотел бы посылать с одной борды на другую пакеты по 16-64К данных и очень хотелось бы, чтобы это шло через DMA не затрагивая основной процессор.

Видимо это можно сделать посредством bulk-передач. Что это такое - см.описание USB.

Share this post


Link to post
Share on other sites
4 hours ago, jcxz said:

Видимо это можно сделать посредством bulk-передач. Что это такое - см.описание USB.

Спасибо большое, за ключевое слово. Почитал доку на процессор, в ней это слово много раз встречается, но так быстро и ничего не понял, то есть понятно, что bulk надо делать, но хочется с DMA, и как-то в доке я не смог быстро об этом найти, да и разбросано оно все по 3000 страницам доки как-то очень непредсказуемо.

 

Скажите, пожалуйста, а примерчика подходящего под рукой уВас не найдется, чтобы было с чего начинать, а то я эти процессоры только несколько недель назад начал пользовать, и, пока играюсь только в teensy оболочке и до этого с семейством NXP не сталкивался.

 

Спасибо!

Share this post


Link to post
Share on other sites
52 минуты назад, iiv сказал:

Скажите, пожалуйста, а примерчика подходящего под рукой уВас не найдется, чтобы было с чего начинать, а то я эти процессоры только несколько недель назад начал пользовать,

Так я с этими МК вообще не работал, а периферия во всех разная.

Обычно в USB-периферии имеется некоторый объём памяти (FIFO). Когда хотите произвести транзакцию через какую-то EP (endpoint): заполняете FIFO-память, принадлежащую этой EP и потом запускаете транзакцию (например bulk-передачу). Вот заполнение FIFO-памяти данными передаваемого пакета можно делать или силами CPU (через соотв.регистры) или посредством DMA. Но как это всё программируется в вашем МК - это в мануале должно быть.

 

PS: В IAR-е есть хорошие примеры USB-стеков для некоторых семейств NXP (точно есть для LPC17xx). Насчёт вашего - не знаю. Но я эти примеры и на другие платформы переносил - портировал на XMC4xxx например.

И USB-хост - он будет многократно сложнее чем USB-device. Будьте готовы.

Share this post


Link to post
Share on other sites

Ну если закладываться, что к хосту будет подключен только один (!) USB-device, то реализация самодельного хоста не должна быть сложной, ИМХО.

Кстати. А так ли необходимо тащить все эти USB-хосты и девайсы (с классами и т.д.), когда можно попробовать поднять raw-взаимодействие через EP?

Быстро и без плясок с бубном вокруг хоста (например, когда он обслуживает еще какие-то девайсы на шине и делит общую скорость).

Share this post


Link to post
Share on other sites

Спасибо большое, jcxz и Arlleex за советы!!!

 

Да, у меня только один процессор на другой соединяются. Я бы по SPI данные перетаскивал (DMA на SPI у меня получается и очень даже шустро), но свободного SPI нет да и скорость 50МБит/с совсем для SPI на пределе, у меня по DMA по SPI только 40МБит/с получалась. А эти коннекторы у этих борд стоят свободные, вот и хотелось их задействовать.

 

Скажите, пожалуйста, а USB RAW HID - это то, или надо голый USB RAW искать? (Простите, пожалуйста, за ламерские вопросы, я до этого с USB ни разу не работал).

 

Спасибо!

Share this post


Link to post
Share on other sites
9 минут назад, iiv сказал:

Скажите, пожалуйста, а USB RAW HID - это то, или надо голый USB RAW искать? (Простите, пожалуйста, за ламерские вопросы, я до этого с USB ни разу не работал).

Лучше голые эндпоинты конечно. Зачем эти надстройки? Лишние тормоза только.

Share this post


Link to post
Share on other sites

Как правильно заметил Arlleex, так как у вас - проприетарное решение и только между 2-я девайсами, то можно вообще выкинуть всю кухню стандартного USB-стека (энумерации, назначение адреса и т.п.). Сразу назначить фиксированные адреса (или просто работать всегда через адрес 0), сконфигурить один-два эндпоинта и алга!

Так будет раз в 100 проще, чем полноценный USB-хост поднимать.

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