Высокоскоростной компьютерный интерфейс с Arduino

10

Я планирую проект с Arduino, который включает в себя обработку большого количества запросов от главного компьютера, и стандартная максимальная скорость 115200 бод по последовательному каналу не достаточна. Я хотел бы иметь возможность получить 1 Мбит / с в полном дуплексе, если это возможно, но 400 Кбит / с + полный дуплекс будет приемлемым. Я использую Arduino Due, поэтому он должен иметь возможность обрабатывать значительно более высокие скорости связи.

Есть ли способ значительно увеличить скорость передачи по сравнению с последовательным интерфейсом, или есть второй вариант, который я могу использовать в плане взаимодействия с компьютером на более высоких скоростях?

многочлен
источник
FTDI FT232 устройства могут без проблем работать на скорости до 3 Мбит / с, так что если у вас есть USB-последовательный преобразователь на основе FTDI, это будет простой вариант. Я действительно хотел бы, чтобы люди Arduino оставались с ними, а не ATmega16U2.
Коннор Вольф
Возможно, UART будет поддерживать битрейт 1 Мбит / с, но вам также нужен микроконтроллер, который передает данные. Это можно сделать, но вы достигнете максимума довольно легко.
Джиппи
Если вы запускаете AVR с «большим количеством запросов» на скорости 400 кбит / с, я был бы удивлен, если бы у него было достаточно свободного времени, чтобы что-то использовать.
Ник Т

Ответы:

8

Определенно возможно подняться в диапазоне Мбит / с с Arduino, особенно с вашим Due. Последовательный монитор поддерживает только скорости до 115200 бод, но вы можете использовать отдельное окно терминала, которое позволяет вам устанавливать все, что вам нравится.

Немного больше информации смотрите в этой теме на форуме Arduino.

С точки зрения настройки, на Arduino это так же просто, как Serial.begin(1000000);и до такой степени. Это все о настройке устройства, с которым вы хотите общаться, и о том, что он может обрабатывать.

Джей Греко
источник
Поддерживает ли стандартный драйвер последовательного интерфейса через USB такие скорости? Я буду говорить с ним через скрипт, а не через последовательный монитор в IDE.
Полином
Я верю, что это так. Если вы используете сценарий, вы должны быть в хорошей форме. Аппаратное обеспечение UART на Arduino Due такое же, как в UNO; он использует ATmega16U для взаимодействия с последовательным интерфейсом, который способен по крайней мере 1 Мбит / с. Драйвер serial over USB также должен поддерживать эту скорость.
Джей Греко
Чтобы проверить, вы всегда можете создать эскиз быстрого теста. Установите скорость передачи выше, чем по умолчанию, и используйте терминал, настроенный на ту же скорость. Если данные поступают, вы знаете, что Arduino хорош для этого бода.
Джей Греко
Технически, на самом деле не имеет значения, что запрашивает хост-компьютер с точки зрения скорости передачи, а скорее только то, что 16U и основной процессор Arduino согласны - фактическая сторона USB работает намного быстрее, чем скорость последовательной передачи в любом случае, и все ПК действительно говорит 16U, на какой скорости запустить его последовательный интерфейс. Кроме того, если вы посмотрите на неточности в бодовых делителях, помните, что на самом деле важно то, что они совпадают между двумя чипами на вашей плате, а не совпадают с какой-то традиционной целью. Полное использование этого по максимуму может потребовать кастомной прошивки для 16U.
Крис Страттон
1

Я бы посмотрел на написание кастомной прошивки для Atmega16u2, которая выполняет интерфейс USB. Эта микросхема может говорить по полной скорости USB (скорость сигнала до 12 Мбит), и выходной порт SPI этого чипа удобно доступен в заголовке ICSP. Подключите это к входу SPI в Arduino (также доступно в его заголовке ICSP), и вы можете запустить SPI со скоростью 4 Мбит / с (4 тактовых такта на бит).

Atmegas на мега (16u2 и 128) может работать со своим последовательным портом до 2 Мбит / с. Если вы пишете специальную прошивку для 16u2, вы также можете использовать уже существующий асинхронный последовательный USART.

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

В проекте LUFA есть много примеров программ и полезных библиотек для реального разговора USB на чипе Atmega. libusb - это удобная библиотека для непосредственного общения с USB-устройствами, вместо того, чтобы полагаться на последовательную эмуляцию.

Джон Ватт
источник
0

Есть некоторые результаты, которые могут быть полезны здесь .

Эрик Ганнерсон
источник