Качете код на Arduino на виртуален сериен порт чрез Arduino IDE

Изтеглих няколко софтуера, които предоставят виртуални COM портове. Тези COM портове се показват в Диспечер на устройства и могат да бъдат избрани за качване от менюто на Arduino IDE Инструменти -> Сериен порт -> COM3. Започва да качва и достига 90% и след това или изтича, или просто не прави нищо.

Искам да кача във виртуалния COM порт, за да мога след това да прочета изходните файлове на компилацията в друга програма. Изобщо не искам да използвам моя Arduino и не искам ръчно да получавам подробните изходни файлове при качване. Този проблем не се случва, когато качвам на истинското Arduino.

Приложението трябва да работи на всички платформи. Тази задача изглежда лесна за Linux и аз се сблъсквам с посочения проблем в Windows и всяка помощ с Mac също би била полезна.

Приложението ще бъде образователен инструмент за хардуерна симулация и визуализация, опитвайки се да предостави по-практическо изживяване на потребителите в сравнение с други симулатори на пазара. Така че може би това ще ви даде представа защо искам да го направя.

Как мога да започна?


person Ebtessam Zoheir    schedule 03.04.2013    source източник
comment
Ако искате да вземете компилираната програма (т.е. необработен машинен код), защо просто не погледнете генерирания Intel Hex файл?   -  person    schedule 03.04.2013
comment
Две причини, на първо място би било по-добро потребителско изживяване, ако отворите IDE и качите код, както бихте направили с действителния Arduino. Второ, от това, което разбрах, пътят на .hex файла се променя, така че няма да е лесно да го използвам в моето приложение.   -  person Ebtessam Zoheir    schedule 03.04.2013


Отговори (1)


Мисля, че може да приемете, че качването на код в Arduino е еднопосочна комуникация: това би било като да поставите ягоди в блендер и Daquiri излиза. Ако това беше вярно, можете просто да вземете всичко, което IDE изхвърля към серийния порт, да го запишете във файл и имате двоичен файл на Arduino. (Преминете към TL;DR, ако не се интересувате от подробности. Краен резултат: това предположение не е правилно).

Предположението за еднопосочна комуникация не е напълно правилно: има програма на Arduino (наречена "bootloader"), който отговаря за комуникацията с програмиста ("програмист": програма, която програмира Arduino, приемете, че това е Arduino IDE засега). В най-"естественото" им състояние процесорите Arduino не могат да бъдат програмирани през серийни линии. По-скоро тези чипове се програмират или чрез системно програмиране (ISP) или чрез JTAG протокол. Буутлоудърът е програма, която работи на Arduino CPU и зарежда скици/програми през серийния порт. Тази програма се изпълнява при стартиране и търси команди за програмиране през серийния порт.

Ако открие, че програмист се опитва да комуникира програмна информация, той ще прочете компилирания двоичен файл на Arduino, идващ по серийната връзка, ще го съхрани във флаш памет, ще го изпрати обратно по серийната връзка за проверка и ако всичко е успешно, ще излезе и стартирайте съхранената скица. Ако на серийния порт не се появи информация за програмиране, тоест никой програмист не се опитва да напише нова скица, тогава буутлоудърът просто излиза и стартира програмата, която вече е съхранена във флаш.

TL;DR: За да внедрите псевдо-Arduino на вашия сериен порт, трябва да напишете програма, някакъв код, който симулира Arduino (бутлоудър) на другия край на вашия виртуален сериен порт. Така че, когато програмист/IDE каже на Arduino "там ли си?" вашата програма ще отговори с "да!", точно както Arduino би отговорил.

Буутлоудърът на Arduino по подразбиране е съвместим със STK-500: това означава, че прилага Команди STK-500 – справката за които може да бъде намерена тук. Ако решите да направите това, тогава най-лесното нещо може да бъде да започнете със съществуващ буутлоудър, като например Arduino или AdaFruit (има други също) и го модифицирайте. Такъв буутлоудър би имал всички команди, които вече са внедрени, и тъй като е написан на C (не бих избрал асемблиран буутлоудър за модифициране :), трябва да е достатъчно лесен за модифициране.

Като алтернатива може да решите, че STK-500 е твърде труден за изпълнение. Ако случаят е такъв, можете да използвате всеки програмен протокол, който Avrdude поддържа: Avrdude е програма за програма ming AVR чипове и Arduino IDE използва Avrdude вътрешно за изпращане на скицата към Ардуино. Ако направите това, тогава ще трябва да промените настройките в Arduino IDE за програматора, който използвате.

Лично аз смятам, че съвместимостта със STK-500 е най-добрият вариант за това, но YMMV.

person angelatlarge    schedule 03.04.2013
comment
Благодаря много, това е много полезно и проницателно. - person Ebtessam Zoheir; 05.04.2013