Rogerclark
Солнце 16 июля 2017 г. 1:41
Кажется, что наша серийная функциональность USB отличается от нормального E.G AVR и SAM Функциональность в том смысле, что мы не отправляем данные, если не установлен DTR USB Connection DTR
Я внес изменения в это в филиале Zumspot, чтобы поддержать сообщество Radio Ham, где он не проверяет DTR
Видеть
https: // github.com/rogerclarkmelbourne/ ... Re/Zumspot
Если наша функциональность отличается от нормы, возможно, я должен объединить это изменение в главную ветвь
Редактировать.
Я проверил это, в том числе оставить открытое окно терминала Arduino, и я не вижу никаких негативных последствий изменения IS.
Поэтому я думаю, что обновлю мастер репо, если ни у кого нет никаких возражений
Я внес изменения в это в филиале Zumspot, чтобы поддержать сообщество Radio Ham, где он не проверяет DTR
Видеть
https: // github.com/rogerclarkmelbourne/ ... Re/Zumspot
Если наша функциональность отличается от нормы, возможно, я должен объединить это изменение в главную ветвь
Редактировать.
Я проверил это, в том числе оставить открытое окно терминала Arduino, и я не вижу никаких негативных последствий изменения IS.
Поэтому я думаю, что обновлю мастер репо, если ни у кого нет никаких возражений
Rogerclark
Солнце 16 июля 2017 г., 4:04
На самом деле, кажется, есть побочный эффект этого изменения
Если я закрою окно терминала и подожду некоторое время, эскиз, похоже, останавливается, ожидая, пока USB отправит данные на ПК (как и несколько серийных.Lines Println () в графическом тесте)
Так что, возможно, мы не сможем этого сделать. Ну, нет, если мы не помешаем ему остановиться в сериале.Печать и т. Д. Если хост его недоступен
Я сделаю еще несколько тестирования, чтобы подтвердить это явление
Если я закрою окно терминала и подожду некоторое время, эскиз, похоже, останавливается, ожидая, пока USB отправит данные на ПК (как и несколько серийных.Lines Println () в графическом тесте)
Так что, возможно, мы не сможем этого сделать. Ну, нет, если мы не помешаем ему остановиться в сериале.Печать и т. Д. Если хост его недоступен
Я сделаю еще несколько тестирования, чтобы подтвердить это явление
Стивестронг
Солнце 16 июля 2017 г. 8:02 утра
[Rogerclark - Солнце 16 июля 2017 г., 4:04] - Если я закрою окно терминала и подожду некоторое время, эскиз, похоже, останавливается, ожидая, пока USB отправит данные на ПК (как и несколько серийных.Lines Println () в графическом тесте)Та же проблема в настоящее время для F4 тоже: https: // github.com/rogerclarkmelbourne/ ... Проблемы/306
Проблема в том, что я не знаю горячий, чтобы исправить это, потому что в новой USB Lib (SPL от ST) нет функции "usb_is_connected ()"
Rogerclark
Солнце 16 июля 2017 г. 10:23
У F1 есть эта проблема, только если я удалю чек на DTR
Я посмотрел на то, почему это может происходить, и это похоже на его, потому что буфер TX заполняется и возвращает ноль
https: // github.com/rogerclarkmelbourne/ ... ACM.C#L428
Так что он остается в этом, пока петля
https: // github.com/rogerclarkmelbourne/ ... #L127-L129
Я не знаю, что лучшее для этого. Я предполагаю, что лучший способ справиться с этим - для удаления самого старого элемента в буфере, и просто сохранить самый новый, готовый к тому, что USB -хост будет готов к данным.
Мы, вероятно, можем сделать это, мой модификация кольцевых буферов в USB_CDCACM.в
Я посмотрел на то, почему это может происходить, и это похоже на его, потому что буфер TX заполняется и возвращает ноль
https: // github.com/rogerclarkmelbourne/ ... ACM.C#L428
Так что он остается в этом, пока петля
https: // github.com/rogerclarkmelbourne/ ... #L127-L129
Я не знаю, что лучшее для этого. Я предполагаю, что лучший способ справиться с этим - для удаления самого старого элемента в буфере, и просто сохранить самый новый, готовый к тому, что USB -хост будет готов к данным.
Мы, вероятно, можем сделать это, мой модификация кольцевых буферов в USB_CDCACM.в
Стивестронг
Солнце 17 июня 2018 г., 17:48
[Rogerclark - Солнце 16 июля 2017 г. 10:23] - Я не знаю, что лучшее для этого. Я предполагаю, что лучший способ справиться с этим - для удаления самого старого элемента в буфере, и просто сохранить самый новый, готовый к тому, что USB -хост будет готов к данным.Как это решается для досок AVR и SAM?
Ахулл
Солнце 17 июня 2018 г., 21:50
Вместо того, чтобы просто удалить это, можем ли мы сделать изменение настраиваемым, могут быть времена, когда вы хотите, чтобы эскиз ждал хоста, а не просто сбросить или пропустить данные. Если настраивать, то, я думаю, поведение по умолчанию должно соответствовать «стандартному» поведению Arduino.
Zoomx
Пн 18 июня 2018 г. 8:10
Поскольку в моих соединениях я никогда не использовал управление потоком, и это работает, я считаю, что DTR используется драйвером.
Arduino IDE использует DTR для сброса UNO при открытии серийного монитора. Я не знаю, то же самое с Леонардо, из -за наших досок STM32 и всех других досок, у которых есть родные USB.
Насколько я знаю, DTR никогда не используется во время связи, многие терминальные программы показывают состояния серийной линии, но я могу ошибаться, так как я никогда не исследовал это, я просто предполагал, что DRT никогда не используется.
Если возможно, IMO лучше иметь этот настраиваемый.
Arduino IDE использует DTR для сброса UNO при открытии серийного монитора. Я не знаю, то же самое с Леонардо, из -за наших досок STM32 и всех других досок, у которых есть родные USB.
Насколько я знаю, DTR никогда не используется во время связи, многие терминальные программы показывают состояния серийной линии, но я могу ошибаться, так как я никогда не исследовал это, я просто предполагал, что DRT никогда не используется.
Если возможно, IMO лучше иметь этот настраиваемый.
Сжимать
Пн 18 июня 2018 г., 17:06
DTR - это остаток из Arduino World, чтобы генерировать сброс импульс для функции «AutoReset». Я почти уверен, что нам не нужно играть с DTR в серийной реализации USB.
Zoomx
Пн 18 июня 2018 г., 18:30
[Сжимать - Пн 18 июня 2018 г., 17:06] - DTR - это остаток из Arduino World, чтобы генерировать сброс импульс для функции «AutoReset».Только в Arduino с семейством Atmega328, Леонардо и Due (USB Native Poards) Используйте другой метод с использованием 1200 бодского соединения.
Вассилис
Пн 18 июня 2018 г., 18:33
[Zoomx - Пн 18 июня 2018 г. 8:10] - Поскольку в моих соединениях я никогда не использовал управление потоком, и это работает, я считаю, что DTR используется драйвером.Ардуино Леонардо только открывает последовательное соединение со скоростью 1200 бит / с, а после этого он закрывает соединение. Это происходит перезагрузка в MCU и помещается в режим загрузчика.
Arduino IDE использует DTR для сброса UNO при открытии серийного монитора. Я не знаю, то же самое с Леонардо, из -за наших досок STM32 и всех других досок, у которых есть родные USB.
Насколько я знаю, DTR никогда не используется во время связи, многие терминальные программы показывают состояния серийной линии, но я могу ошибаться, так как я никогда не исследовал это, я просто предполагал, что DRT никогда не используется.
Если возможно, IMO лучше иметь этот настраиваемый.
DTR необходим в случае использования «1EAF» перезагрузить магическую последовательность. Без DTR нужно искать входящие данные, чтобы увидеть, содержит ли он магическую последовательность 1EAF.
В случае DTR данные непрофессионалов будут выполнены только после того, как сигнал DTR InfoMming.
Азарубкин
Пт 24 августа 2018 г. 14:03
ОК, тогда низкое состояние DTR используется в качестве флага для изучения входящих данных; Но почему мы не можем отправить, пока DTR низкий?
Я думаю, что могу изменить USB_CDCACM_TX Функция перезаписать самые старые данные в кольцевом буфере TX. Если вы можете придумать ситуацию, когда она может привести к потере данных, я могу сделать новое поведение настраиваемым, причем старое поведение - по умолчанию.
Или, как другой предлог, я могу изменить size_t usbeserial :: write (const uint8 *buf, uint32 len). В настоящее время он всегда возвращает 0, если я не ошибаюсь (https: // github.com/rogerclarkmelbourne/ ... л.CPP#L119) потому что не переменная никогда не изменяется. Давайте сделаем эту функцию вернуть фактическое количество написанных байтов и позволим пользователю повторить передачу позже, если он хочет. Кроме того, настраиваемое время -аут TX может быть добавлен в эту функцию, чтобы она не застряла в цикле вечно.
Тогда мы можем удалить чек на DTR из Usbeserial :: operator bool ().
Как другая мысль, Википедия говорит это Во многих операционных системах, включая Windows, линия DTR удерживается низкой, в то время как последовательный порт не используется и не контролируется какими -либо приложениями. Затем мы можем сделать эту проверку для настраиваемой DTR - если DTR низкий, то порт, вероятно, закрыт, но если пользователь все еще хочет что -то отправить, он может. Я, например, нуждался в отправке, в то время как DTR низкий, потому что я использовал STM32 в качестве моста USB-сериала для чипа ESP32, а его загрузчик накладывает DTR, и ему требуется двунаправленный обмен данными.
Я думаю, что могу изменить USB_CDCACM_TX Функция перезаписать самые старые данные в кольцевом буфере TX. Если вы можете придумать ситуацию, когда она может привести к потере данных, я могу сделать новое поведение настраиваемым, причем старое поведение - по умолчанию.
Или, как другой предлог, я могу изменить size_t usbeserial :: write (const uint8 *buf, uint32 len). В настоящее время он всегда возвращает 0, если я не ошибаюсь (https: // github.com/rogerclarkmelbourne/ ... л.CPP#L119) потому что не переменная никогда не изменяется. Давайте сделаем эту функцию вернуть фактическое количество написанных байтов и позволим пользователю повторить передачу позже, если он хочет. Кроме того, настраиваемое время -аут TX может быть добавлен в эту функцию, чтобы она не застряла в цикле вечно.
Тогда мы можем удалить чек на DTR из Usbeserial :: operator bool ().
Как другая мысль, Википедия говорит это Во многих операционных системах, включая Windows, линия DTR удерживается низкой, в то время как последовательный порт не используется и не контролируется какими -либо приложениями. Затем мы можем сделать эту проверку для настраиваемой DTR - если DTR низкий, то порт, вероятно, закрыт, но если пользователь все еще хочет что -то отправить, он может. Я, например, нуждался в отправке, в то время как DTR низкий, потому что я использовал STM32 в качестве моста USB-сериала для чипа ESP32, а его загрузчик накладывает DTR, и ему требуется двунаправленный обмен данными.