Заливка скетча из виртуальной машины
- Войдите на сайт для отправки комментариев
Пнд, 11/01/2021 - 12:46
Для начала архитектура:
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");
Отлично просматриваются в терминале виртуальной машины.
Чего еще не хватает для счастья?
Экспериментируй с сигналом DTR. Он у тебя не проходит. Я бы еще exclusive mode установил.
И еще информация: если открыть Монитор порта в виртуалке (просто открыть, команды не посылать), то окно монитора в цикле становится активным/неактивным (где-то с периодом 1 секунда), а в консоли com2tcp начинают сыпаться такие строки
COM3 это тот из пары портов, который связан с TCP (бывший CNCB0)
Я прямо не посоветую, но возможно поможет.
Я линуксоид, про ГиперВ ничего не скажу, у меня на Линухе стоит обычный VirtualBox. Гостевая - вин10, как и у тебя. Я пробрасываю не com, а USB. Вот прям целиком USB устройство, а уж сериал это или осциллограф - пусть уже гостевая винда разбирается! ;)))
В Hyper-V не прокидываются напрямую USB/COM/etc
мне стало интересно, я уже прочел про это. Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))
Но вас, виндусятников, не понять, это как яблонутые - своя секта... ;)))
Нужна в где?
Дома она не особо нужна, в стандартных бизнесах usb нечасто прокидываются с хост-машины. Просто Микрософт зачем-то стал Hyper-V штатно совать в Win10. Может дойдут и до функционала виртуалбокса.
А понимать следует просто - по карману гипервизор выбирается. Hyper-V дешевле, но и проще.
Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))
корпоративные стандарты / понты / распилы бабла
Короче ТС, если ты не обязан по работе использовать Hyper-V, то ставь VirtualBox и будет тебе счастье! Машину - наверняка можно сконвертировать не переставляя из ГиперВ в ВиртБокс.
Короче ТС, если ты не обязан по работе использовать Hyper-V, то ставь VirtualBox и будет тебе счастье! Машину - наверняка можно сконвертировать не переставляя из ГиперВ в ВиртБокс.
только поддержку виртуализации в биосе видимо надо включить? для 10 вроде и не надо, но по моим сервис мануалам генподрядчик требовал включить.
надо, да
мне стало интересно, я уже прочел про это. Вопрос тогда: а зачем она нужна, если во всем хуже VirtualBox и обе системы бесплатны? ;)))
Но вас, виндусятников, не понять, это как яблонутые - своя секта... ;)))
VirtualBox и на винде работает так же как и в других ОС, «прелесть» hyper-v в том, что он работает как служба (демон в линуксе зовётся). А это добавляет много удобств (объяснять не буду каких, кто не пончл - тому это не нужно), в отличии от того же VB, но может я уже отстал от жизни и VB умеет как служба (демон) работать? В линуксе KVM как демон работает, но даёт ли оно тех же «плюшек», что и hyper-v?
В отношении вопроса ТС я бы советовал использовать стороннее ПО. Есть разработки USB over TCP/IP (проброс usb по сети), сейчас вспомнить не могу какие именно, но они есть и 10 лет назад мы использовали для проброса usb-ключа на сервер в виртуалке именно такое ПО.
https://www.fabulatech.com/
Вот от этих парней неплохой софт. Есть триалка на 14 дней / одно устройство.
Хочу все таки добить тему. Решение где-то рядом.
Итак, упрощаем задачу. Цель создать на реальной машине виртуальный 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 строки возникает пауза, секунды на три, а потом все десять попыток пролетают мгновенно.
Чего еще не хватает?
Чем Вас не устраивает USB over TCP/IP?
Например, http://lostapp.ru/soft/usb-ip
Экспериментируй с сигналом DTR. Он у тебя не проходит. Я бы еще exclusive mode установил.
Интересно, если я повторю это еще раз ТС это прочтет все же.....
Сейчас есть одна идея по пробросу COM и буду смотреть на USB over TCP/IP.