Заливка скетча из виртуальной машины

anton.tramp
Offline
Зарегистрирован: 11.01.2021

Для начала архитектура:

1. Есть хост машина, на ней установлена Windows 10, установлены драйвера CH341PT, порт виден как COM3. Скетчи с нее заливаются

d:\>"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" "-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM3 -D -Uflash:w:D:\Controller.hex:i

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM3
         Using Programmer              : arduino
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: reading input file "D:\Controller.hex"
avrdude: writing flash (11704 bytes):

Writing | ################################################## | 100% 1.87s

avrdude: 11704 bytes of flash written
avrdude: verifying flash memory against D:\Controller.hex:
avrdude: load data flash data from input file D:\Controller.hex:
avrdude: input file D:\Controller.hex contains 11704 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 1.46s

avrdude: verifying ...
avrdude: 11704 bytes of flash verified

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

2. На ней установлена Hyper-V с виртуальной машиной второго поколения. Гостевая ОС - Windows 10

3. Порт я пробросил через com0com по схеме COM3 -> TCP(7000) -> CNCB0 -> COM4

Хост машина

e:\>"hub4com"  --baud=115200    --create-filter=pin2con --add-filters=0:pin2con     "\\.\COM3" --use-driver=tcp --reconnect=1000 "7000"
COM3 Open("\\.\COM3", baud=115200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM3(0) --> TCP(1)
Route data TCP(1) --> COM3(0)
Route flow control COM3(0) --> TCP(1)
Route flow control TCP(1) --> COM3(0)
Filters:
________
        \->{pin2con.IN}->
COM3(0) |      /
________/<---------------

COM3(0) Event(s) [DSR] will be monitored
Started COM3(0)
Socket(0.0.0.0:7000) = 1fc
Listen(1fc) - OK
Started TCP(1)

Виртуальная машина

c:\Program Files (x86)\com0com>"hub4com"  --baud=115200    --create-filter=pin2con --add-filters=0:pin2con     "\\.\CNCB0" --use-driver=tcp --reconnect=1000 "Server:7000"
CNCB0 Open("\\.\CNCB0", baud=115200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data CNCB0(0) --> TCP(1)
Route data TCP(1) --> CNCB0(0)
Route flow control CNCB0(0) --> TCP(1)
Route flow control TCP(1) --> CNCB0(0)
Filters:
_________
         \->{pin2con.IN}->
CNCB0(0) |      /
_________/<---------------

CNCB0(0) Event(s) [DSR] will be monitored
Started CNCB0(0)
Started TCP(1)

Настройка пары портов

4. При загрузке скетча с виртуальной машины получаю такую картину

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\Anton\AppData\Local\Temp\arduino_build_81138/sketch_jan11a.ino.hex:i 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM4
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xa4
..................
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xa4

avrdude done.  Thank you.

Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload .

При этом команды с платы

Serial.println("Test");

Отлично просматриваются в терминале виртуальной машины.

Чего еще не хватает для счастья?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Экспериментируй с сигналом DTR. Он у тебя не проходит. Я бы еще exclusive mode установил.

anton.tramp
Offline
Зарегистрирован: 11.01.2021

brokly пишет:
Экспериментируй с сигналом DTR. Он у тебя не проходит.
И где его ловить? Вики говорит, что это самая прогрессивная распайка

brokly пишет:
Я бы еще exclusive mode установил.
Не помогло. Как и Use Ports class

anton.tramp
Offline
Зарегистрирован: 11.01.2021

И еще информация: если открыть Монитор порта в виртуалке (просто открыть, команды не посылать), то окно монитора в цикле становится активным/неактивным (где-то с периодом 1 секунда), а в консоли com2tcp начинают сыпаться такие строки

COM3(0) OnCommEvent 4424 [DSR]
Socket(0.0.0.0:0) = 2b8
TCP(1): Connect(2b8, 192.168.0.102:7000) ...
TCP(1): Connected
COM3(0) OnCommEvent 4424 [DSR]
TCP(1): Disconnect(2b8) - OK
TCP(1): Close(2b8) - OK
TCP(1): Disconnected

COM3 это тот из пары портов, который связан с TCP (бывший CNCB0)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я прямо не посоветую, но возможно поможет.

Я линуксоид, про ГиперВ ничего не скажу, у меня на Линухе стоит обычный VirtualBox. Гостевая - вин10, как и у тебя. Я пробрасываю не com, а USB. Вот прям целиком USB устройство, а уж сериал это или осциллограф - пусть уже гостевая винда разбирается! ;)))

sadman41
Offline
Зарегистрирован: 19.10.2016

В Hyper-V не прокидываются напрямую USB/COM/etc

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

sadman41 пишет:
В Hyper-V не прокидываются напрямую USB/COM/etc

мне стало интересно, я уже прочел про это. Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))

Но вас, виндусятников, не понять, это как яблонутые - своя секта... ;)))

sadman41
Offline
Зарегистрирован: 19.10.2016

Нужна в где?

Дома она не особо нужна, в стандартных бизнесах usb нечасто прокидываются с хост-машины. Просто Микрософт зачем-то стал Hyper-V штатно совать в Win10. Может дойдут и до функционала виртуалбокса.

А понимать следует просто - по карману гипервизор выбирается. Hyper-V дешевле, но и проще.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

wdrakula пишет:

Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))

 

корпоративные стандарты /  понты / распилы бабла

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Короче ТС, если ты не обязан по работе использовать Hyper-V, то ставь VirtualBox и будет тебе счастье! Машину - наверняка можно сконвертировать не переставляя из ГиперВ в ВиртБокс.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Короче ТС, если ты не обязан по работе использовать Hyper-V, то ставь VirtualBox и будет тебе счастье! Машину - наверняка можно сконвертировать не переставляя из ГиперВ в ВиртБокс.

только поддержку виртуализации в биосе видимо надо включить? для 10 вроде и не надо, но по моим сервис мануалам генподрядчик требовал включить.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

надо, да

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

wdrakula пишет:

sadman41 пишет:
В Hyper-V не прокидываются напрямую USB/COM/etc

мне стало интересно, я уже прочел про это. Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))

Но вас, виндусятников, не понять, это как яблонутые - своя секта... ;)))

VirtualBox и на винде работает так же как и в других ОС, «прелесть» hyper-v в том, что он работает как служба (демон в линуксе зовётся). А это добавляет много удобств (объяснять не буду каких, кто не пончл - тому это не нужно), в отличии от того же VB, но может я уже отстал от жизни и VB умеет как служба (демон) работать? В линуксе KVM как демон работает, но даёт ли оно тех же «плюшек», что и hyper-v? 
 

В отношении вопроса ТС я бы советовал использовать стороннее ПО. Есть разработки USB over TCP/IP (проброс usb по сети), сейчас вспомнить не могу какие именно, но они есть и 10 лет назад мы использовали для проброса usb-ключа на сервер в виртуалке именно такое ПО. 

sadman41
Offline
Зарегистрирован: 19.10.2016

https://www.fabulatech.com/

Вот от этих парней неплохой софт. Есть триалка на 14 дней / одно устройство.

anton.tramp
Offline
Зарегистрирован: 11.01.2021

Хочу все таки добить тему. Решение где-то рядом.

Итак, упрощаем задачу. Цель создать на реальной машине виртуальный COM порт и работать с ним. Если решится эта задача, то будет решена и исходная.

Загружаем на Ардуину эхо-скетч

void setup() {
    Serial.begin(9600); // устанавливаем последовательное соединение
}
  
void loop() {
    if (Serial.available() > 0) {  //если есть доступные данные
        // считываем байт
        int incomingByte = Serial.read();
 
        // отсылаем то, что получили
        Serial.print("I received: ");
        Serial.println(incomingByte, DEC);
    }
}

Теперь пытаемся создать и работать с виртуальным портом.

com0com выкинул и использую VSPE

Настройки реального порта (настройки не менял, все стоит по умолчанию)

В VSPE создаем сплиттер

Привязываем его к реальному порту и задаем настройки

Все настройки по умолчанию, кроме скорости. После этого подключаемся терминалом на виртуальный COM4 и получаем эхо-ответы.

Скорость по умолчанию была 19200, но с ней в терминал приходил мусор. Если схему чуть усложнить, та порт пробрасывается и на виртуальную машину и также работает. Но пока не усложняем и работаем только с реальной машиной.

К сожалению, по вновь созданному виртуальному порту прошивку залить по прежнему невозможно

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM4
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x48
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x65
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x6c
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x6c
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x6f
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x3a
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x20
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x34
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x38
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x0d

avrdude done.  Thank you.

Произошла ошибка при загрузке скетча

После выделенной 9 строки возникает пауза, секунды на три, а потом все десять попыток пролетают мгновенно. 

Чего еще не хватает?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Чем Вас не устраивает USB over TCP/IP?

Например, http://lostapp.ru/soft/usb-ip

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

brokly пишет:

Экспериментируй с сигналом DTR. Он у тебя не проходит. Я бы еще exclusive mode установил.

Интересно, если я повторю это еще раз ТС это прочтет все же.....

anton.tramp
Offline
Зарегистрирован: 11.01.2021

brokly пишет:
Интересно, если я повторю это еще раз ТС это прочтет все же.....
Прочтет. У ТС сейчас не очень много свободного времени. Но когда оно появится я обязательно вернусь к этому вопросу.

Сейчас есть одна идея по пробросу COM и буду смотреть на USB over TCP/IP.