Чи можете ви запрограмувати мікроконтролер без комп’ютера?


16

Скажімо, у вас був досить простий і невеликий мікроконтролер і не було ні взаємозв’язку, ні комп’ютера, ні налагоджувача, компілятора чи асемблера. Чи можете ви написати код у зборі, перетворити його (вручну) в машинний код, а потім застосувати живлення до відповідних штифтів, використовуючи джерело напруги?

Я розумію, що вам потрібні відповідні введення-виведення та пам'ять, щоб дійсно щось робити , але якби ви були настільки схильні і мали час, чи могли б ви це зробити? Я здогадуюсь історично, як це було зроблено, коли для початку не було комп’ютера / компілятора / асемблера? Не соромтеся зв’язати мене із зовнішнім ресурсом. Спасибі! :)


3
Погляньте на Altair 1. Перемикачі на передній панелі та ручне машинне програмування були єдиним способом її використання.
pjc50

@ pj50 Він запитав про мікроконтролер, а не про мікропроцесор. Мікроконтролери управляють своїм кодом наш спалах, який недоступний без якогось інтерфейсу.
tcrosley

Скільки запрограмованих підрозділів вам потрібно? Багато виробників постачають свої мікрофони заздалегідь запрограмовані з вашим кодом; однак це не практично, якщо вам потрібно менше, ніж повний барабан.
Олег Мазуров

2
Ще в 70-х ви побудували б панель тумблерів і світильників, щоб ви могли ввійти в програму. Я ніколи не працював з одним з ранніх мікроконтролерів, але працював з декількома різними мікропроцесорами, і ось так ви це зробили, за замовчуванням. І не було принципової різниці між ранніми мікроконтролерами та мікропроцесорами, окрім можливостей вводу / виводу, та деякими деталями налаштування пам'яті програми.
Гарячі лизання

Я залишу це як коментар, оскільки я не можу знайти джерело для цієї історії. Я пам’ятаю деякий час назад розповідь про дитину, яка сконструювала та побудувала свій власний комп’ютер (справді лише процесор) із транзисторів для наукового ярмарку, виходячи з його розуміння цифрової логіки. У той час він не міг дозволити собі комп’ютер і програмував своє створення за допомогою перемикачів (я думаю, що я пам'ятаю, щоб годинник був просто кнопкою). Один із суддів був настільки вражений, що купив дитині комп’ютер.
slebetman

Відповіді:


37

Чи можете ви написати код у зборі, перетворити його (вручну) в машинний код,

Так!
За бажанням код може бути записаний "з голови" у двійковій формі.
Давно (дуже давно) тому я почав використовувати (тоді) мікропроцесори.
Я та друзі писали б код мовою складання, компілювали його вручну до машинного коду (те, що ви можете зробити "за допомогою перевірки" після певної практики), а потім вводити його в процесор різними способами. В одній з побудованих нами систем ми встановили адресу на бінарних (вимкнених) комутаторах або використали функцію автоматичного збільшення процесора, ввели 8 бітів даних на двійкові комутатори, а потім натисніть перемикач «тактовий час» для введення даних у пам’ять.

Еквівалентну функціональність можна досягти за рахунок ще меншої кількості комутаторів сучасного мікроконтролера за допомогою послідовного програмування SPI - див. Нижче.

... а потім застосувати живлення до відповідних штифтів, використовуючи джерело напруги?

Так!
Але це було б неймовірно повільно!
Багато сучасних мікроконтролерів дозволяють використовувати інтерфейс "SPI" для програмування.
Зазвичай це складається з вхідних та вихідних ліній даних та "тактової" лінії та, як правило, лінії скидання.

Багато процесорів дозволяють годиннику та даних SPI бути "статичними", а це означає, що немає обмеження в тому, як довго ви можете встановити дані між бітами. Ви можете запрограмувати такий процесор, використовуючи лінію передачі даних та тактову лінію, що управляється комутаторами вручну. Лінія годинника повинна бути "відмовкою" - вам потрібно мати можливість встановити її високою або низькою за один перехід за операцію - тому мінімальний інтерфейс може потребувати включення затвора Шмітта. Ви можете "уникнути" просто затримкою RC та перемикачем кнопки, але введення, що спрацьовує Шміттом, безпечніше. Рядок даних не повинен бути відмовним, оскільки його стан читається лише на краю годинника.

Деякі інтерфейси є інтерактивними - дані виводяться процесором під час програмування (наприклад, дані вихід = MISO = Master In Serial Out на AVR-процесорах). Щоб прочитати це, вам потрібно буде додати, наприклад, світлодіод та резистор (а може бути, буфер або транзистор, якщо можливість приводу дійсно низька).


MC6800:

Від напівзагасаючої пам'яті (майже 40 років!)

LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $ 2734. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...


1
+1 за згадування статичної конструкції, що дозволяє годиннику пройти весь шлях до постійного струму.
перицинтіон

2
Це повертає спогади. Я фактично навчився вводити код Z80 за допомогою кнопок ще в школі. Це було близько 1990 року. Мій вчитель наполягав на тому, що навчитися програмуванню важкий шлях. Через 25 років я маю погодитися.
Нільс Піпенбрінк

@NilsPipenbrinck Я в цей момент пишу С-код і застосовую уроки, які я вперше засвоїв з Fortran :-) !!! - і які потім були відточені вбудованими системами та мовою складання. Ці уроки зменшують ймовірність помилок, застосовуючи розумове введення тексту до змінних та портів, які в іншому випадку можуть робити дозволені, але не бажані або корисні речі. Асемблер - це найвища гостра зброя - меч подвійного кінця без ручної охорони. Після цього мови "вищого рівня" здаються менш гострими :-). Введення кнопок Z80 діє аналогічно на ваш досвід навчання ;-).
Рассел Макмахон

@Erbureth Дякую :-). Так, ffff для 1111 р. Було очевидно, що мозок зникає. ... було просто "ви зрозумієте ідею", але завершення рядка не зашкодить.
Рассел Макмахон

Так, у мене виникла ідея, але коли я був на ній ... :)
Ербурет говорить, що повертається Моніка

10

Спочатку в програмованих машинах програми вручну пробивали паперову стрічку або картки. Пізніше вони використовували якусь машинку для штампування, а ще пізніше все-таки комп'ютери (як вони стали відомі до того часу) могли пробивати власну паперову стрічку.

Було, буквально, сидіти там з картою і вручну робити в ній дірки.

enter image description here

Кожен стовпець - це інструкція або біт даних, що інтерпретується державним апаратом процесора для виконання завдань.

Тепер, якщо звичайно, це вся флеш-пам’ять, і так, для введення даних в першу чергу зазвичай для цього потрібен комп'ютер. Але це не зовсім 100% вірно.

Зрештою, що робить комп'ютерний та апаратний програміст, але встановити стан штифтів IO в потрібний час? Отже, якщо ви справді достатньо мазохістські, ви можете побудувати систему, яка дозволяє надсилати правильні вказівки на штифти програмування мікроконтролера правильним чином, щоб встановити деякі інструкції у флеш-пам'ять для виконання.

Можливо, щось, що включає багато комутаторів, деякі регістри зсуву, тактовий генератор тощо.

Пам’ятаю, в коледжі у нас була нова система програмування на основі Z80 - одиниця розміру валізи з Z80, деяка невелика кількість оперативної пам’яті, купа 7-сегментних світлодіодних дисплеїв та великий ряд комутаторів. Програмуйте його, завантажуючи інструкції в оперативну пам'ять вручну за допомогою перемикачів.


Z80 не є дійсним прикладом. Він запитав про мікроконтролер, а не про мікропроцесор. Мікроконтролери управляють своїм кодом наш спалах, який недоступний без якогось інтерфейсу. Принаймні, ви згадали про спалах та інтерфейс програмування в іншому місці.
tcrosley

@tcrosley Z80 був скоріше для анекдотичних цілей - ілюструючи, як комп’ютери, які раніше програмувалися, перш ніж Visual Studio забрав усі навички.
Маєнко

Хоча я не знаю про будь-які машини, побудовані для цього, було б не важко додати деяку схему до картридера для програмування мікроконтролера з кодом, збереженим на послідовності карт. Хоча паперова стрічка може бути і більш практичною.
supercat

2
Я в них рубав отвори вручну. Це можливо лише в екстремальних обставинах (10 вечора, термінові документи, що мають бути завтра завтра, один запуск мейнфрейму вліво, дама, яка пробила номер, залишилася на день). Програмування того ж мейнфрейму з передньої панелі (через пару років) було насправді швидше.
Олег Мазуров

1
@Majenko - Я бачив реконструкцію машини Беббіджа, і вона точно не була зроблена з телефонного обладнання. Безумовно, шумно.
Гарячі лизання

7

Ви сказали, що "невеликий мікроконтролер і не мав взаємозв'язку, ані комп'ютера, ані налагоджувача, компілятора чи асемблера". Ну ви можете обійтись без комп’ютера, налагоджувача, компілятора чи асемблера, але для того, щоб завантажити програму, ви повинні мати якийсь інтерфейс для підключення до мікроконтролера.

Перш за все, забудьте про будь-які мови високого рівня, такі як C. Тоді найпростіший спосіб - написати програму мовою складання, але не використовуйте асемблер для перекладу її на машинний код. Замість цього шукайте кожну інструкцію по збірці в посібнику з програмування, знайдіть їх еквівалентне шістнадцяткове кодування та запишіть це.

Вам доведеться виділити власні змінні, щоб ви могли заповнити відповідні адреси в частині операнду інструкцій. Також забудьте про використання стека і купи, занадто багато роботи. Після закінчення роботи у вас з’явиться машинна програма, яку можна завантажувати безпосередньо у флеш-пам’ять мікроконтролера - також не потрібен жоден лінкер.

Через відсутність зовнішньої адреси та шини даних майже на всіх мікроконтролерах (оскільки вони займуть занадто багато контактів, необхідних портам вводу / виводу та периферійних пристроїв), практично всі мікроконтролери програмуються через спеціальний інтерфейс, як це:

enter image description here

Зазвичай "програміст" зліва підключається до ПК, який завантажує машинний файл, сформований компілятором / лінкером.

Однак якщо у програміста є клавіатура, як наведена нижче:

enter image description here

тоді ви можете ввести шістнадцяткові коди програми, створеної вручну, прямо в програміст, і запрограмувати пристрій, не потребуючи компілятора, лінкера чи ПК, про що ви питали. (Клавіатура також використовується для редагування шістнадцяткових файлів та генерації контрольних сум.)

Зазначимо, що дуже мало програмістів мають такі клавіатури. Цей не підходить для любителів, оскільки, ймовірно, коштує пару тисяч доларів.

Цей конкретний програміст програмує деталі перед тим, як їх поставити на дошку; Інтерфейси та розетки доступні для декількох PIC, а також Atmel AVR серед інших.


5
Ви прокоментували різні інші відповіді щодо їх недійсності, але ця відповідь, мабуть, менш достовірна, ніж більшість з яких ви прокоментували. Він сказав: "... ні взаємозв'язку, ні комп'ютера, ...". Як мінімум ваше рішення - «комп’ютер». Що означає "відсутність взаємодії" - це суперечка. Але, використовуйте кілька розблокованих комутаторів на інтерфейсі SPI, і, можливо, у вас є рішення.
Рассел Макмахон

1
@RussellMcMahon Хто каже, що у програміста є комп'ютер? Багато з них просто використовують FPGA (які можуть бути замінені дискретною логікою.) Як ви збираєтеся програмувати мікроконтролер через інтерфейс SPI, якщо він не має завантажувача? Якщо так, як ви програмуєте завантажувач?
tcrosley

3
По суті, безкоштовний стандартний інтерфейс послідовного програмування низького напруги для багатьох (можливо, більшості) мікроконтролерів використовує кілька ліній в основному послідовному інтерфейсі. MOSI MCLK (Vdd Gnd Reset) є максимальним MISO, якщо є взаємодія. 3 вимикача (лише один з яких) повинен бути відмовним) і світлодіод для MISO і "ви вимкнені". Дуже-дуже-дуже повільно. Якщо FPGA дозволено не вважати "комп'ютером", то впровадження багатьох систем на базі процесорів було б проблемою. Я підозрюю, що "жодна комбінаторна логіка" не відповідала б духу його прохання.
Рассел Макмахон

Я мушу сказати, феєрверк - це неправильний фон для роботи з електронікою :)
Анонімний Пінгвін

6

З практичної точки зору, щось на зразок перемикання шпильок JTAG вручну було б дуже схильним до помилок. Для введення програми будь-якого пристойного розміру знадобиться тисяча перемикань. Але теоретично це можливо.

Якщо вам дозволено заздалегідь підготувати мікроконтролер (або написати для нього завантажувальний ROM), ви можете легко реалізувати щось на зразок зовнішніх комутаторів, що використовуються на ранніх мейнфреймах. Якщо ви допускаєте зовнішню логіку, ви навіть можете скористатися шістнадцятковою клавіатурою для прискорення роботи.

Нарешті, хоча це не так часто в наші дні, ви можете придбати мікроконтроллер на основі ПЗУ із спеціальним кодом. Вам доведеться запропонувати трохи грошей заздалегідь і гарантувати певний обсяг, але я бачив, що клієнти роблять це, щоб заощадити гроші на високому обсязі виробництва. У цьому випадку зовнішніх сигналів, необхідних для програмування мікроконтролера, взагалі не було б. Код буде вбудований у фізичну компоновку чіпа.

Звичайно, ви також можете використовувати мікроконтролер, який запускає код із зовнішнього інтерфейсу пам'яті, але це обман. :-)


2
Насправді я створив «клон» Imsai 8800 у 1976/77 рр. І звичайно програмував би його у двійковій формі за допомогою тумблерів. У мене була послідовність завантаження завантаження, яка складала близько 40- чи 60-ти байтів (це було все життя тому!), Який би прочитав паперову стрічку з мого телевізора ASR-33 і завів мене на монітор клавіатури. До того, як телетайп запрацював, я запрограмував би 8085 (одна з відмінностей між моїм «клоном» та Імсаєм) суворо у бінарному форматі. Але це було паралельно, з рядом вимикачів. Я використовував телеграфний ключ, щоб зробити послідовне кодування, і це дійсно схильний до помилок, як сказав Адам.
користувач6297

3

Абсолютно. Насправді перший курс мікропроцесора, який я взяв (приблизно 87), використовував плату Motorola 68000. Ми будемо відпрацьовувати код у зборі, шукати шістнадцятковий для складання та вводити шестигранник у термінал для програмування плати. Якщо ви редагували, вам слід було переконатися, що введений вами код коротший від коду, який ви замінювали, а потім залиште буфер за допомогою решти NOP. Якби coDE було довше, вам доведеться все повторно вводити! Ми навчилися додавати багато НОПів.


68000 не був мікроконтролером. Він запитав про мікроконтролер, а не про мікропроцесор. Мікроконтролери управляють своїм кодом наш спалах, який недоступний без якогось інтерфейсу.
tcrosley

5
@tcrosley Це не зовсім так. Існують мікроконтролери, які потребують зовнішнього ПЗУ, оскільки вони не мають жодного ПЗУ чи Flash-карти. Що робить їх мікроконтролером не вбудований в оперативну пам’ять або ПЗУ, а вбудований в периферійні пристрої (порти IO, UART тощо).
Majenko

Хоча дуже мало - через периферійні пристрої вводу / виводу, про які ви згадали, дуже мало мають зовнішні адреси та шини даних, оскільки їм потрібно два багато контактів.
tcrosley

2

Абсолютно. Коли у вас є двійковий формат фактичних інструкцій (це легко зробити для чітко визначених наборів інструкцій), все, що вам потрібно, це реалізувати протокол програмування.

Наприклад, візьміть щось невелике, як AVR Tiny 4 . Розділ 14 детально описує інтерфейс програмування, включаючи протокол та фізичний рівень. Це порівняно просто, і вам потрібно лише декілька кнопок і резисторів підтягування / вниз, щоб надіслати / отримати 1 або 0. Якщо ви почуваєтеся амбітними, додайте кілька світлодіодів, щоб прочитати вихід.

Останнє питання, що залишається, якщо ви можете зробити це досить швидко, яке, на щастя * для AVR Tiny 4 (розділ 16), не має мінімальної частоти, коли мова йде про його програмування.

* Примітка: наскільки вказує лист. Це може відрізнятися в реальності ... Сумніваюсь, хтось намагався програмувати його на тактовій частоті мГц.

Не соромтеся автоматизувати його скільки завгодно / мало процесу. Це те, що робить більшість програмних пристроїв у будь-якому разі: автоматизувати процес.


2

За допомогою будь-якого засобу ви вводите програму в uC, ви "взаємодієте" з нею, тому що це означає, що взаємодія. Навіть купа перемикачів, які ви перемикаєте вручну, є "інтерфейсом".

Тож я буду ставитись до цього питання як "як я можу взаємодіяти з комп'ютером з значною мірою механічним (на відміну від електронного) апаратного забезпечення для взаємодії та якомога крутішим способом?"

На що моя відповідь, введіть програму як фортепіано. Форма фортепіано «трекерна смуга» від фортепіано програвача в основному дає вам щонайменше 65 (залежно від формату) біт, які ви можете вмикати та вимикати самостійно, виходячи з перфорацій у папері. Решта - вимоглива робота з точильним ножем. Але принаймні ваша програма, щойно запущена, (дещо) постійно зберігається (на відміну від підходу-перемикача-вручну).


2

Не тільки можливо запрограмувати мікроконтролер без комп’ютера, але ви можете фактично придбати комп’ютер, який спеціально розроблений для програмування за допомогою апаратних комутаторів. Набір називається членською карткою , і це відтворення комп'ютера COSMAC Elf з 1970-х. Набір був описаний в недавній статті журналу IEEE Spectrum . Також можна запрограмувати новіші версії членської картки з ПК.


2

Добре. Як щодо цього: ви пишете програму в асемблері і самі шукаєте опкоди, як було запропоновано раніше. Як дістати його в комп’ютер: візьміть старий програвач магнітофона, вийміть головку відтворення, але залиште капстан і прищіпте валик. Це буде ваш транспорт. Якщо у вас є плеєр з котушкою до барабана, ви можете залишити голову відтворення на місці.

Потім візьміть довгу і вузьку смужку паперу, а ще краще, прозору стрічку. Тут ви кодуєте свою програму. Ви використовуєте стільки треків, скільки у вас є шпильки для програмування. На одній доріжці ви ставите чорні точки через рівні проміжки часу; це ваш годинник. На інших треках ви ставите чорні точки або смужки і залишаєте пробіли відповідно до даних та сигналів. Ви світите світло в цілому і виявляєте його за допомогою маленьких фототранзисторів (або світите один світлодіод на стрічці і детектуєте світло з іншими, подібними) і керуєте годинниковими та сигнальними лініями транзисторами. Це займе трохи місця на програвачі магнітоли, тому вам може знадобитися зняти головку відтворення.

Звичайно, ви також можете кодувати сигнали як звукові, але дешифрувати дещо складніше. Або ви можете виявити відбитий замість пропущеного світла. Або ви можете пробити отвори темною стрічкою або паперовою стрічкою, замість того, щоб робити чорні сліди на прозорій стрічці. Що б там не було. Програвач стрічки рухає стрічку з постійною швидкістю, тому ви можете ввести сигнал тактового сигналу без комп'ютера.


1

Так. Основна проблема може бути взаємодія з інтерфейсом програмування. Якщо у вас є звичайна адреса та шина даних, все трохи простіше. Чи бачили ви коли-небудь справді ранні комп’ютери? Програми вводяться по одній інструкції по черзі в ОЗУ з перемикачами на передній панелі.


Він запитав про мікроконтролер, а не про мікропроцесор. Мікроконтролери управляють своїм кодом наш спалах, який недоступний без якогось інтерфейсу.
tcrosley

4
@tcrosley - Ранні UC не спалахнули. Вони або мали оперативну пам’ять або ROM для зберігання програм.
Гарячі лизання

@HotLicks Правильно. І за кількома винятками, це все були мікропроцесори, а не мікроконтролери. Це був мій погляд, а не в тому, чи зберігається програма Flash, чи ROM, чи PROM, або EPROM, або EEPROM. Справа полягала в тому, чи зберігається програма на мікросхемі (мікроконтролер) чи ні (мікропроцесор). Навіть у 8048 році, перший мікроконтроллер Intel, представлений у 1977 році, був внутрішній ПЗУ.
tcrosley

3
@Tcrosley Хто ти? А що ви зробили із звичайно корисним та об’єктивним ткрослі? :-) | Його першим зауваженням було те, що ви можете взаємодіяти з інтерфейсом програмування - що часто, але не завжди буде дійсним. Повторна адреса та шина даних "IF" - це IF. Це стосується деяких великих та прикордонних гібридних мікроконтролерів, але його оригінальний ІЧ був досить чудовим (хоч і жорстким і повільним).
Рассел Макмахон

3
Намагання зберегти чітке розмежування між мікропроцесором та мікроконтролером є скоріше педантичним, ніж корисним, особливо коли це коментується до кожної відповіді.
pjc50

1

Міні- комп'ютери PDP-8 цифрового обладнання 40+ років тому не мали можливості автоматичного завантаження. Програми зазвичай завантажували з перфорованих паперових стрічок, але навантажувач для завантаження паперових стрічок потрібно було вручну вводити на перемикачі передньої панелі.

введіть тут опис зображення

На сайтах користувачів Digital та PDP-8, таких як OEM-виробники, які використовували їх як вбудовані контролери дня, користувачі не запам’ятовували запам'ятовування завантажувачів та змагалися між собою за найшвидший час, необхідний для входу у завантаження. завантажувач в машину. Машини використовували магнітно-стрижневі спогади (нанизані руками у віддалені частини світу, дами з крихітними пальцями, використовуючи голки та тонкий дріт для волосся).

введіть тут опис зображення

Оскільки вміст магнітної пам’яті є енергонезалежним, завантажувачі завантажилися після вимкнення живлення, а введення вручну було необхідне лише після первинної збірки, навантажувач був видалений програмною помилкою або програмою, необхідною для використання простору навантажувача.


Багато років тому, коли нам доводилося ходити до школи босоніж по снігу в гору обома способами, PDP-8 у нашій середній школі повинен був бути завантажений, включаючи завантажувач з передньої панелі, як ви описуєте. Ніхто з викладачів не знав багато про комп’ютер, включаючи той, який відповідав за нього. Він придумав 0 і 1 знизився, тому ніколи не міг перемикати завантажувач. Я б домовився, щоб комп'ютер вийшов з ладу, коли я був на уроці англійської мови, тому мене закликали перезавантажити комп'ютер. Я ніколи не розповідав йому про його неправильне уявлення проти - це було дуже корисно для мене.
Олін Латроп

Мені сподобалось PDP-8. Я мав єдиний доступ до одного близько трьох років - так це було як мати персональний комп'ютер задовго до того, як був винайдений термін ПК. Дивовижне, що могло б вписатись у 4К пам'яті. Впевнений, пройшов багато паперової стрічки (не мав DECtape), а також паперу телетайпу.
tcrosley

0

Відповідь " так" , ви можете запрограмувати мікроконтролер без комп’ютера, налагоджувача тощо. Що вам потрібно було б забезпечити різні напруги, дані, годинник та програмувальні послідовності, визначені виробником UC (не легка робота).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.