Максимальная последовательная скорость CH340

С платой типа Arduino, использующей последовательный чип CH340 USB Serial, я хотел бы как можно быстрее отправлять текстовые строки на Raspberry Pi через USB с помощью функции Serial.println(). Проблема в том, что когда я устанавливаю последовательную скорость на значения выше 230 400 с помощью функции Serial.begin(speed), происходит сбой консоли Arduino, и программа C на Rapsberry Pi отображает мусор в своей консоли, даже если я установил ту же последовательную скорость.

Краткие примеры:

Serial.begin(230400);
Serial.println("Test !"); // Работает отлично.

Serial.begin(250000);     // Или любая скорость выше 250 000.
Serial.println("Test !"); // Совсем не работает.

В этом ответе на вопрос говорится, что возможна скорость 2 Мбод, поэтому я немного растерялся.

Консоль Arduino IDE предлагает различные скорости от 300 до 2 000 000 бод, так почему же не работают скорости выше 230 400?

, 👍5

Обсуждение

Какой тип Уно? Клон? Проверьте, какой USB-мост используется на вашей плате., @Mikael Patel

Дешевый китайский клон. Чип вроде бы CH340G., @Thesaurus Rex

CH340G не поддерживает скорость 250 Кбит/с. См. стр. 5, https://www.insidegadgets.com/wp-content/uploads/2016/12/ch340g-datasheet.pdf., @Mikael Patel

Спасибо за даташит и эту информацию. Но согласно документу должны работать скорости вроде 460 800 бод и 2 000 000 бод, так почему же это не так с моей платой?, @Thesaurus Rex

Добавьте строку «пока (!Serial);» после «Serial.begin()» или просто задержку. Квитирование USB может занять некоторое время, и первый символ будет потерян., @Mikael Patel

Пожалуйста, помните, что скорость передачи не является скоростью передачи USB. Он находится между MCU и мостом USB. Кроме того, максимальная поддерживаемая скорость передачи данных составляет прибл. 100-200 Кбит/с с реализацией Arduino HardwareSerial., @Mikael Patel

Спасибо за вашу помощь и напоминание. Мой _print()_ находится в цикле _while_, и это не проблема, если я пропущу несколько символов в начале. Что такое реализация HarwareSerial? Я вижу, что это пользовательская версия _Serial_, но для чего она нужна?, @Thesaurus Rex

Класс HardwareSerial — это реализация класса Arduino Serial, которая использует MCU/AVR UART (аппаратный последовательный порт). Класс (внутренние) управляется прерываниями и использует кольцевые буферы для хранения входящих и исходящих символов., @Mikael Patel


2 ответа


Лучший ответ:

8

CHG340 поддерживает стандартные скорости передачи: 50, 75, 100, 110, 134,5, 150, 300, 600, 900, 1200, 1800, 2400, 3600, 4800, 9600, 14400, 19200, 28800, 3360. 0, 38400, 56000 , 57600, 76800, 115200, 128000, 153600, 230400, 460800, 921600, 1500000, 2000000 бод.

250 000 бод не поддерживается этой микросхемой.

Шаг в бодах составляет 200 % или 150 % от предыдущего значения (есть исключения).

Протестированные и рабочие скорости передачи данных.

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

SpeedTest.ino

// Скорость последовательного порта:
// const int Speed = 115200;
// const int Speed = 128000;
// const int Speed = 153600;
// const int Speed = 230400;
// const int Speed = 460800;
// const int Speed = 921600;
// const int Speed = 1500000;
const int Speed = 2000000;

void setup() {
  // Инициализировать последовательный порт:
  Serial.begin(Speed);

  // Инициализировать цифровой вывод LED_BUILTIN как выход.
  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
  Serial.print("Speed :  ");
  Serial.println(Speed);
}
,

Это помогло мне, спасибо! На самом деле, я обнаружил, что моя проблема связана с последовательной задержкой, но мне все же удалось установить связь на скорости 1 Мбод., @Thesaurus Rex

Я проверил 3000000, которые работали для меня. См. также https://www.eevblog.com/forum/microcontrollers/ch340-usb-uart-speed-tests/, @Adam Baxter

драйвер винды идет только на 128000, @Miguel Silva

Я видел, что скорость выше 115200 «нестабильна» как в Windows, так и в Linux., @MatsK


-1

Возможно, существует обходной путь, позволяющий этому адаптеру работать со скоростью 250 000 бод (по крайней мере, в Raspberry Pi). Автор этой статьи: http://dmxpi.blogspot.com/ 2014/04/dmx-on-raspberry-pi-start-here.html изменил драйвер Linux и утверждает, что он работает. Надеюсь, это поможет.

,

Пожалуйста, отредактируйте свой ответ, чтобы включить метод/шаги, используемые в ссылке. Если ссылка умрет, ваш ответ будет не таким полезным, как мог бы быть., @Greenonline

я согласен с @Greenonline, @Miguel Silva