Серийная скорость USB ?

Rogerclark
Пн 17 августа 2015 г. 12:21
Кто -нибудь знает, какой Speed ​​Serial USB способен работать в ?

Мне интересно, можно ли пропустить ESP8266 через STM32, используя серийный USB.

я.e Создать прозрачный мост.

Причина, по которой я заинтересован в этом, вместо того, чтобы просто использовать глупые USB для серийного преобразователя, заключается в том, что я видел концепцию для использования Attiny85 для переключения сброса и загрузки линий на ESP8266, когда он видит трафик загрузки на Серийные линии идут в ESP8266 от USB в серийный конвертер.

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

Мне нужно просмотреть код Attiny, чтобы увидеть, что он ищет с точки зрения загрузки, так как я не уверен, сколько времени необходимо между получением данных о загрузке и сбросом ESP и т. Д., И независимо от того, практично ли это вообще.

Редактировать

Просто чтобы частично ответить на мой собственный вопрос

Я использовал мегамультирующий пример, чтобы сделать USB для серийного моста для серийного 1 и попытаться загрузить в ESP8266 на 115200, но, похоже, он проходит через движения. Эскиз в ESP8266 не был обновлен.

Я также попробовал 57600, и это было то же самое.

Так что потребуется дальнейшее расследование, чтобы выяснить, что происходит.

Но, к сожалению, просто использование простого серийного моста по какой -то причине не работает.

Martinayotte
Пн 17 августа 2015 г., 14:44
Это должно быть выполнено ...
Когда вы попробовали простой серийный мост, я предполагаю, что он был двунаправленным, потому что Esptool много занимается рукопожатием.
Вы поняли, почему это не сработало ?

Rogerclark
Пн 17 августа 2015 г., 21:11
Мартин

Да. Мост был двунаправленным.

Инструмент загрузки ESP, по -видимому, работает так, как обычно, и мост также передал отладку от моего эскиза тестирования веб -сервера.

Но если я внес изменения в эскиз ESP, они не попали в код на ESP.

Мне придется попробовать еще раз, еще один день и сохранить многословные выводы от загрузок через STM32 и один через обычный USB в сериал. Затем сравните их рядом, чтобы увидеть, смогу ли я заметить какую -либо разницу в сообщениях.

Rogerclark
Чт 22 октября 2015 г., 4:43
Матрин,

Я наконец -то пришел к этому, и похоже, что серийные USB -куча Chars Chars, когда ESP8266 отправляет обратные всплески текста.

Я также не могу заставить его загрузить в ESP8266 через STM32 на 115200

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

Даже с USB -серийным адаптером, он иногда, кажется, не загружается, но я, кажется, не получаю никакого уведомления, что его не удалось

Я не уверен, является ли это проблемой с тем, как USB -сериал работает в ядре Libmaple или что -то, присущее виртуальному серийному драйвере.

У меня есть соблазн выкопать Arduino Pro Micro, который я где -то пинал, поскольку они используют Atmega32u4, который имеет USB на чипе, так что в нем есть бесплатный аппаратный серийный порт.
Так что я должен быть в состоянии запустить ту же программу на этой.

В качестве альтернативы, я могу просто приклеить Pro Mini к задней части одного из моих существующих USB к серийным адаптерам и использовать код Attiny

https: // github.com/esp8266/arduino/проблемы/480

На самом деле :ржу не могу: :ржу не могу: У меня есть куча ведра GD32, поэтому я использую один из них, но не для его серийного USB, а только для его аппаратного сериала

Ну, снова теперь я думаю об этом. Возможно, 120 МГц GD32 может перенести в 115200 на свой USB -сериал. Наверное, стоит попробовать !

Mrburnette
Чт 22 октября 2015 г. 12:29
В качестве альтернативы я могу Просто приклейте Pro Mini к задней части одного из моих существующих USB к серийным адаптерам и используйте код Attiny Картинки! Картинки!

У меня есть нагрузка на ведра устройств PSOC 4100 ... Я обнаружил, что отрывочная плата серийного USB делает хороший адаптер, если можно жить без сигналов рукопожатия, только TX и RX, похоже, доступны, но Cypress не выпустил исходный код, который они работают на PSOC 5.

Луча

Martinayotte
Чт 22 октября 2015 г. 15:17
Rogerclark написал:Похоже, что серийные USB падают множество Chars, когда ESP8266 отправляет всплески текста обратно.

Rogerclark
Чт 22 октября 2015 г., 19:32
Мартин

Я не пробовал это на моей машине Linux, но я сделаю шанс.

Неясно, почему загрузки терпят неудачу, но после попытки загрузить через Maple Mini, код не смог запустить, и я, казалось, получил какой -то дамп стека, выплюнул через сериал, а затем ESP8266 перезагрузился (снова и снова).

Используя Maple Mini, он, казалось, отбросил большие части текста дампа стека, что я мог ясно видеть, когда я использую USB -для последовательного адаптера.

Мне, вероятно, нужно написать простую программу, чтобы отправить 512 chars of Text, Out через сериал, на 115200 и посмотреть, что прибывает на ПК через Maple Mini

Затем попробуйте меньшие пакеты, если это не удается

Fredbox
Сб 24 октября 2015 г., 2:58
Сегодня на Hackaday был пост об использовании ESP8266 в качестве моста для загрузки в Arduino или Arm. Статья указывает на сайт Jeelabs GitHub https: // github.com/jeelabs/esp-link Это выглядит так, как будто есть варианты для установки скорости передачи с 57600 по 460800.

Rogerclark
Сб 24 октября 2015 г., 5:22
Спасибо @fredbox

Я на самом деле наткнулся на это на днях, когда ищу что -то совершенно другое.

Теперь я думаю о другом подходе, вероятно, использую STM32F103C8 в качестве зонда черной магии, чтобы я мог прошить ESP, используя OpenOCD, однако я не уверен, что ребята из ESP8266.Com Forum заставил OpenOCD работать с ESP

Martinayotte
Солнце 25 октября 2015 г. 14:05
Для прошивки ESP, поскольку у MCU есть собственный загрузчик, нет необходимости в OpenOcd.
Для отладки, хотя я еще не пробовал, есть новый GDBStub:

https: // github.com/esp8266/arduino/tree ... ES/GDBStub

Rogerclark
Солнце 25 октября 2015 г. 20:17
Привет, Мартин

Спасибо за ссылку.

Я думаю, что мне также нужно взглянуть на обновления OTA, так как в настоящее время я обнаружил, что время загрузки через сериал на 115200, является довольно большим успехом в разработке, тем более что не каждая загрузка, кажется, преуспевает в.

В настоящее время я пытаюсь отладить некоторые последовательные коммунальные связи между ESP и другим устройством, поэтому я подумываю подумать об использовании Maple Mini в качестве платформы DEV, просто чтобы запустить этот код, и я могу поставить его обратно на ESP, когда это работает.

Загрузка на Maple Mini через DFU, по -видимому, существенно быстрее, чем в ESP через сериал, но, конечно.


Я также думаю о том, чтобы взглянуть на Visual Micro для ESP8266, но я думаю, что это может быть только Windows.

Примат
Пн, 09 ноября 2015 г., 4:49
У меня похожая проблема. Я пытаюсь построить небольшой USB -ключ, который вроде как автобусный пират, но намного меньше и написан в Arduino на оборудовании STM32. Из того, что я могу собрать, скорость передачи, которую вы устанавливаете на компьютере, кажется неактуальной при использовании сериала Maple CDC. Похоже, что он отправляет полную скорость USB или, по крайней мере, намного быстрее, чем набор Baudrate, на STM32. Это не проблема при отправке небольших объемов данных, потому что буфер может справиться с ним. Однако, сделав серийный мост, прочитав USB -серийный и записывающий в аппаратный сериал, данные поставляются на полной скорости и выходят только с установленной скоростью бода, который не находится рядом с скоростью USB. Это делает буфер переполнением. Например, при использовании его для программирования ESP8266 байты постоянно сбрасываются из -за этого переполнения и большого количества отправленных данных, не говоря уже о том, чтобы он остановился.

Я планирую либо изменить серийный код CDC CDC Maple, либо сделать другую библиотеку для обработки с этим по -разному (возможно, класс с именем Serialusb, как исходное имя). Я не получил достаточного взгляда на код USB CDC, но это явно требует некоторых улучшений для такого поведения. Это даже говорит в примечаниях в коде. Я думаю, что текущий код всегда отправляет сигнал CTS, поэтому USB -порт всегда отправляет данные на полной скорости. Один из способов улучшить это - контролировать буфер и выключить сигнал CTS, когда буфер заполнен.

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

Я также хочу добавить много функций, которые возвращают скорость передачи с компьютером и могут установить контакты управления потоком внешне.

Примат
Пн, 09 ноября 2015 г., 4:55 утра
Я также хочу встроить функцию, изложенную здесь. http: // Leaflabs.com/docs/lang/api/serialusb.HTML в нижней части страницы. Существует большая задержка, когда вы делаете Serial Serial, и на другой стороне не открыт компонент. Я использую следующую функцию во всем моем коде STM32.
// Record the ADC data read from the Sensors into the FIFO // Sampling of 8 ADC with 71taps fir filtering takes 285usecs p->value1 = analogRead(PA0); p->value2 = analogRead(PA1); p->value3 = analogRead(PA2); /* p->value4 = analogRead(PA3); p->value5 = analogRead(PA4); p->value6 = analogRead(PA5); p->value7 = analogRead(PA6); p->value8 = analogRead(PA7); */ SampleFilter_put(&f[0], (int) p->value1); p->value1 = SampleFilter_get(&f[0]); SampleFilter_put(&f[1], (int) p->value2); p->value2 = SampleFilter_get(&f[1]); SampleFilter_put(&f[2], (int) p->value3); p->value3 = SampleFilter_get(&f[2]); SampleFilter_put(&f[3], (int) p->value4); /* p->value4 = SampleFilter_get(&f[3]); SampleFilter_put(&f[4], (int) p->value5); p->value5 = SampleFilter_get(&f[4]); SampleFilter_put(&f[5], (int) p->value6); p->value6 = SampleFilter_get(&f[5]); SampleFilter_put(&f[6], (int) p->value7); p->value7 = SampleFilter_get(&f[6]); SampleFilter_put(&f[7], (int) p->value8); p->value8 = SampleFilter_get(&f[7]); */ // Record the FIFO overruns for this sample p->errors = overrunerrors; overrunerrors = 0; // clear for the next sample

Rogerclark
Пн, 09 ноября 2015 г., 5:09
@primateio

Интересный...

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

Некоторые из файлов USB, похоже, датируются 2008 год !!!! (Что намного раньше, чем когда Leaflabs изначально писал Libmaple)

Похоже, есть новый код (из STM), который мы можем использовать для обновления текущего USB_CORE.C, USB_INIT USB_MEM и USB_REGS

Возможно от

https: // github.com/oculusvr/riftdk1/tre ... tm_usb/src

Или более официальный канал.

Однако я сомневаюсь, что это исправят проблему, если клиент USB должен уведомить хост, когда его буферы полны.

На оригинальном форуме Leaflabs была ветка

http: // форумы.Leaflabs.com/тема.PHP?ID = 13641

который может дать некоторую подсказку о том, как это исправить

JCW
Пн, 09 ноября 2015 г., 11:22
Я использовал libopencm3 в качестве серийного драйвера USB, и он до сих пор работает очень хорошо в серийном загрузке USB, с которым я экспериментирую - см. В этом потоке: http: // www.STM32duino.com/viewtopic.PHP ... 0&начало = 40

Код LiboPencm3 используется во многих проектах, включая некоторые очень тяжелые переводы и высокие скорости: https: // github.com/libopencm3/libopencm3

Примат
Пн, 09 ноября 2015 г., 13:47
Пол с Teensy запустил кучу тестов на досках с USB, включая Maple. Понятно, что клен нуждается в некоторых улучшениях по сравнению с его результатами.

https: // www.PJRC.com/teensy/bender_u ... ceive.HTML

У него есть код для теста, я планирую использовать его, чтобы попытаться приблизить скорость USB к Teensy 3.0 уровней.

Mrburnette
Пн, 09 ноября 2015 г., 13:55
Примат писал:Пол с Teensy запустил кучу тестов на досках с USB, включая Maple. Понятно, что клен нуждается в некоторых улучшениях по сравнению с его результатами.

https: // www.PJRC.com/teensy/bender_u ... ceive.HTML

Ахулл
Пн, 09 ноября 2015 г., 14:35
Примат писал:Я также хочу встроить функцию, изложенную здесь. http: // Leaflabs.com/docs/lang/api/serialusb.HTML в нижней части страницы. Существует большая задержка, когда вы делаете Serial Serial, и на другой стороне не открыт компонент. Я использую следующую функцию во всем моем коде STM32.
//#define Serial Serial1 // TX A2 byte nodeID = 10; byte packetNum = 11; float C = 42.611; float F = 42.611; float H = 42.6; float vBatt = 3.14; int packetLoss = 10; int packetTotal = 10000; void printData() { Serial.print(nodeID); Serial.print(","); Serial.print(packetNum); Serial.print(","); Serial.print(C); Serial.print(","); Serial.print(F); Serial.print(","); Serial.print(H); Serial.print(","); Serial.print(vBatt,3); Serial.print(","); Serial.print(packetLoss); Serial.print(","); Serial.println(packetTotal); } void setup() { Serial.begin(57600); delay(3000); unsigned long start = micros(); printData(); unsigned long end = micros(); Serial.println(end - start); } void loop() { }

Rogerclark
Пн, 09 ноября 2015 г., 21:16
Я не думаю, что есть какое -либо управление потоком.


Что смешно, так это то, как он кажется даже медленнее, чем клен ;-)

Примат
Пт 13 ноября 2015 г. 1:57
Я добился некоторого прогресса в улучшенной библиотеке USB-серии. Не разрушается изменений, поэтому мы должны быть в состоянии добавить его в ядро, когда я закончу, если вы, ребята, хотите после того, как выливали USB -код, я не думаю, что это проблема переполнения буфера, которая отбрасывает биты. Я полагаю, что это вопрос паритета/биты данных/стоп -биты. Я попытался выяснить, какие последовательные настройки используются для программирования ESP8266, но не повезло. У кого -нибудь есть идеи?

Что у меня есть:
Захват бод, установленную на хосте и соответственно изменить аппаратный серийный бод.
Захватить USB DTR и состояние RTS и иметь соответствующее реагирование физического штифта.
Захват паритет, биты данных и остановки битов, установленных хостом.

Чего у меня нет работы:
Установка паритета, биты данных и остановить биты на аппаратном сериале. Я заметил, что Роджер положил заметку о неспособности установить эти настройки в жесткой.CPP -код.
#define SerialOUT Serial1 // TX A2 byte nodeID = 10; byte packetNum = 11; float C = 42.611; float F = 42.611; float H = 42.6; float vBatt = 3.14; int packetLoss = 10; int packetTotal = 10000; void printData() { SerialOUT.print(nodeID); SerialOUT.print(","); SerialOUT.print(packetNum); SerialOUT.print(","); SerialOUT.print(C); SerialOUT.print(","); SerialOUT.print(F); SerialOUT.print(","); SerialOUT.print(H); SerialOUT.print(","); SerialOUT.print(vBatt,3); SerialOUT.print(","); SerialOUT.print(packetLoss); SerialOUT.print(","); SerialOUT.println(packetTotal); } void setup() { Serial.begin(57600); //SerialOUT.begin(300); } void loop() { unsigned int Baudrates[]= {300,1200,2400,4800,9600,19200,38400,57600,115200}; unsigned long start; unsigned long end; for ( int ind =0 ; ind < 9; ind++ ){ Serial.print("AT Baudrate it Tates: -"); Serial.print(Baudrates[ind]); Serial.print(" , "); SerialOUT.begin(Baudrates[ind]); start = micros(); printData(); unsigned long end = micros(); Serial.print(end - start); Serial.print("uS. To send 1 char it should take uS :"); Serial.println((10000000/Baudrates[ind])); delay(3000); SerialOUT.end(); } }

STM32 осциллограф