Заливка скетча из виртуальной машины
- Войдите на сайт для отправки комментариев
Пнд, 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 порт и работать с ним. Если решится эта задача, то будет решена и исходная.
Загружаем на Ардуину эхо-скетч
Теперь пытаемся создать и работать с виртуальным портом.
com0com выкинул и использую VSPE
Настройки реального порта (настройки не менял, все стоит по умолчанию)
В VSPE создаем сплиттер
Привязываем его к реальному порту и задаем настройки
Все настройки по умолчанию, кроме скорости. После этого подключаемся терминалом на виртуальный COM4 и получаем эхо-ответы.
Скорость по умолчанию была 19200, но с ней в терминал приходил мусор. Если схему чуть усложнить, та порт пробрасывается и на виртуальную машину и также работает. Но пока не усложняем и работаем только с реальной машиной.
К сожалению, по вновь созданному виртуальному порту прошивку залить по прежнему невозможно
После выделенной 9 строки возникает пауза, секунды на три, а потом все десять попыток пролетают мгновенно.
Чего еще не хватает?
Чем Вас не устраивает USB over TCP/IP?
Например, http://lostapp.ru/soft/usb-ip
Экспериментируй с сигналом DTR. Он у тебя не проходит. Я бы еще exclusive mode установил.
Интересно, если я повторю это еще раз ТС это прочтет все же.....
Сейчас есть одна идея по пробросу COM и буду смотреть на USB over TCP/IP.