Не могли бы вы запрограммировать микроконтроллер без компьютера?

16

Допустим, у вас был довольно простой и небольшой микроконтроллер, и у вас не было интерфейса, компьютера, отладчика, компилятора или ассемблера. Не могли бы вы написать свой код в сборке, преобразовать его (вручную) в машинный код, а затем подать питание на соответствующие контакты с помощью источника напряжения?

Я понимаю, что вам нужны соответствующие устройства ввода-вывода и память, чтобы действительно что- то делать , но если бы вы были настолько склонны и имели время, могли бы вы сделать это? Я думаю, исторически, как это было сделано, когда не было компьютера / компилятора / ассемблера для начала? Не стесняйтесь связать меня с внешним ресурсом. Благодарность! :)

idle_engineer
источник
3
Взгляните на Altair 1. Выключатели на передней панели и ручное программирование станка были единственным способом его использования.
pjc50
@ pj50 Он спросил о микроконтроллере, а не о микропроцессоре. Микроконтроллеры запускают свой код нашей флэш-памяти, который недоступен без какого-либо интерфейса.
tcrosley
Сколько запрограммированных единиц вам нужно? Многие производители поставляют свои микросхемы, предварительно запрограммированные с вашим кодом; однако, это не практично, если вам нужно меньше полной катушки.
Олег Мазуров
2
Еще в 70-х вы бы создали панель тумблеров и лампочек, чтобы вы могли войти в программу. Я никогда не работал с одним из ранних микроконтроллеров, но работал с несколькими различными микропроцессорами, и именно так вы сделали это по умолчанию. И между ранними микроконтроллерами и микропроцессорами не было принципиальной разницы, кроме возможностей ввода-вывода и некоторых деталей конфигурации памяти программ.
Hot Licks
Я оставлю это как комментарий, потому что я не могу найти источник для этой истории. Я помню некоторое время назад историю ребенка, который спроектировал и построил свой собственный компьютер (на самом деле, только процессор) из транзисторов для научной ярмарки, основываясь исключительно на своем понимании цифровой логики. В то время он не мог позволить себе компьютер и программировал свое творение с помощью тумблеров (кажется, я помню, что часы были просто кнопкой). Один из судей был настолько впечатлен, что купил ребенку компьютер.
Slebetman

Ответы:

37

Не могли бы вы написать свой код в сборке, преобразовать его (вручную) в машинный код,

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

Эквивалентная функциональность может быть достигнута с помощью еще меньшего числа переключателей на современном микроконтроллере, использующем последовательное программирование SPI - см. Ниже.

... а затем подать питание на соответствующие контакты с помощью источника напряжения?

Да!
Но это было бы невероятно медленно!
Многие современные микроконтроллеры позволяют использовать интерфейс "SPI" для программирования.
Как правило, он состоит из строк входных и выходных данных и линии «часов», и обычно это строка сброса.

Многие процессоры допускают, чтобы тактовая частота и данные SPI были «статичными», что означает, что нет никаких ограничений на то, сколько времени вы можете установить между битами. Вы можете запрограммировать такой процессор, используя линию данных и тактовую линию, которые управляются переключателями, управляемыми вручную. Линия синхронизации должна быть «без скачков» - вы должны иметь возможность устанавливать ее на высоком или низком уровне за один переход на одну операцию - поэтому минимальный интерфейс может потребовать включения триггера Шмитта. Вы можете «сойти с рук» только с задержкой RC и кнопочным переключателем, но срабатывание по Шмитту безопаснее. Строка данных не должна быть отказов, так как ее состояние читается только на границе часов.

Некоторые интерфейсы являются интерактивными - данные выводятся процессором во время программирования (например, data out = 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 за упоминание статического дизайна, позволяющего часам пройти весь путь до DC.
перицинтион
2
Это возвращает воспоминания. Я действительно научился вводить код Z80 с помощью кнопок еще в школе. Это было примерно в 1990 году. Мой учитель настаивал на том, что изучение программирования трудным путем является ценным 25 лет спустя я должен согласиться.
Нильс Пипенбринк
@ NilsPipenbrinck Я сейчас пишу код на C и применяю уроки, которые я впервые выучил на Fortran :-) !!! - и которые были затем отточены со встроенными системами и языком ассемблера. Эти уроки уменьшают вероятность ошибок, применяя умственную типизацию к переменным и портовым доступам, которые в противном случае могли бы делать вещи, которые разрешены, но не желательны или полезны. Ассемблер - это ультрасовременное острое оружие - меч с двумя концами без защитников. После этого языки «более высокого уровня» кажутся менее острыми :-). Кнопка ввода Z80 действует аналогично вашему опыту обучения ;-).
Рассел МакМэхон
@ Erbureth Спасибо :-). Да FFFF для 1111 был очевидным исчезновение мозга. ... было просто "вы поняли", но завершение строки не повредит.
Рассел МакМэхон
Да, у меня появилась идея, но когда я был у нее ... :)
Эрбурет говорит восстановить монику
10

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

Он буквально сидел там с картой и делал в ней отверстия.

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

Каждый столбец представляет собой команду или бит данных, которые интерпретируются конечным автоматом ЦП для выполнения задач.

Теперь, если, конечно, все это флэш-память, и да, для получения данных там, как правило, нужен компьютер для этого. Но это не совсем на 100% верно.

В конце концов, что делает компьютерный и аппаратный программист, но устанавливает правильное состояние выводов ввода-вывода? Таким образом, если вы действительно достаточно мазохистки, вы можете создать систему, которая позволит вам правильно отправлять правильные инструкции на контакты программирования микроконтроллера и устанавливать некоторые инструкции во флэш-память для выполнения.

Может быть, что-то, включающее множество переключателей, несколько регистров сдвига, тактовый генератор и т. Д.

Я помню, что в колледже у нас была новая система программирования на базе Z80 - размером с чемодан с Z80, небольшим объемом оперативной памяти, кучей 7-сегментных светодиодных дисплеев и большим рядом переключателей. Запрограммируйте его, вручную загрузив инструкции в оперативную память с помощью переключателей.

Majenko
источник
Z80 не является допустимым примером. Он спросил о микроконтроллере, а не о микропроцессоре. Микроконтроллеры запускают свой код нашей флэш-памяти, который недоступен без какого-либо интерфейса. По крайней мере, в ответе вы упоминали flash и программный интерфейс.
tcrosley
@tcrosley Z80 был больше для неподходящих целей - иллюстрирующий, как компьютеры программировались до того, как Visual Studio отняла все навыки.
Majenko
Хотя мне неизвестно о каких-либо машинах, созданных для этого, было бы нетрудно добавить некоторые схемы в кард-ридер для программирования микроконтроллера с кодом, хранящимся в последовательности карт. Однако, бумажная лента может быть более практичной.
суперкат
2
Я использовал, чтобы вырезать отверстия вручную в тех. Это возможно только в экстремальных обстоятельствах (10 вечера, курсовые работы, которые должны быть сданы завтра, один прогон мэйнфрейма влево, леди в перфорированной комнате на день). Программирование того же базового блока с передней панели (пару лет спустя) было на самом деле быстрее.
Олег Мазуров
1
@Majenko - Я видел реконструкцию машины Бэббиджа, и она определенно не была сделана из телефонного оборудования. Определенно шумно, хотя.
Hot Licks
7

Вы сказали «маленький микроконтроллер и у него нет интерфейса, нет компьютера, нет отладчика, компилятора или ассемблера». Ну, вы можете обойтись без компьютера, отладчика, компилятора или ассемблера, но для загрузки программы у вас должен быть какой-то интерфейс для соединения с микроконтроллером.

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

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

Из-за отсутствия внешних адресов и шин данных почти на всех микроконтроллерах (поскольку они занимают слишком много выводов, необходимых для портов ввода-вывода и периферийных устройств), практически все микроконтроллеры программируются через специальный интерфейс, подобный следующему:

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

Обычно «программист» слева подключается к ПК, который загружает машинный файл, созданный компилятором / компоновщиком.

Однако, если у программиста есть клавиатура, как показано ниже:

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

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

Конечно, очень немногие программисты имеют такие клавиатуры. Этот не подходит для любителей, так как он, вероятно, стоит пару тысяч долларов.

Этот конкретный программист программирует детали до того, как они помещаются на плату; интерфейсы и сокеты доступны для нескольких PIC, а также для Atmel AVR.

tcrosley
источник
5
Вы прокомментировали различные другие ответы относительно их недействительности, но этот ответ, возможно, менее действителен, чем большинство из ваших комментариев. Он сказал: «... нет связи, нет компьютера, ...». Как минимум, ваше решение - «компьютер». То, что означает "отсутствие взаимодействия", является спорным. Но используйте некоторые неисправные переключатели на интерфейсе SPI, и у вас, возможно, есть решение.
Рассел МакМэхон
1
@RussellMcMahon Кто сказал, что в программаторе есть компьютер? Многие из них просто используют FPGA (которые могут быть заменены дискретной логикой.) Как вы собираетесь программировать микроконтроллер через интерфейс SPI, если у него нет загрузчика? Если так, как вы программируете загрузчик?
tcrosley
3
Стандартный, по сути, свободный от загрузчика стандартный интерфейс последовательного программирования низкого напряжения на многих (возможно, большинстве) микроконтроллерах использует несколько строк в основном последовательном интерфейсе. MOSI MCLK (Vdd Gnd Reset) - минимальный MISO, если есть взаимодействие. 3 переключателя (только один из которых) должен быть без скачков) и светодиод для MISO и «вы выключены». Очень очень очень медленно. Если разрешить ПЛИС не считать «компьютером», то не будет проблем с реализацией многих систем на базе процессоров. Я подозреваю, что «никакая комбинаторная логика» не соответствует духу его просьбы.
Рассел МакМэхон
Я должен сказать, что фейерверк - неправильный фон для работы с электронным оборудованием :)
Anonymous Penguin
6

С практической точки зрения, что-то вроде переключения контактов JTAG вручную было бы очень подвержено ошибкам. Для ввода программы любого приличного размера потребуются тысячи переключателей. Но теоретически это возможно.

Если вам разрешено заранее подготовить микроконтроллер (или написать для него загрузочное ПЗУ), вы можете легко реализовать что-то вроде внешних тумблеров, используемых на ранних мэйнфреймах. Если вы разрешите внешнюю логику, вы можете даже использовать шестигранную клавиатуру, чтобы ускорить процесс.

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

Конечно, вы также можете использовать микроконтроллер, который выполняет код из интерфейса внешней памяти, но это обман. :-)

Адам Хаун
источник
2
Фактически, я создал Imsai 8800 «клон» в 1976/77 году и обычно программировал его в двоичном виде с помощью тумблеров. У меня была последовательность загрузки-загрузки, которая составляла около 40 или 60 с лишним байтов (это было целую жизнь назад!), Которая считывала бумажную ленту из моего телетайпа ASR-33 и доставляла меня в монитор клавиатуры. До того, как телетайп сработал, я запрограммировал 8085 (одно из различий между моим «клоном» и имсаями) строго в двоичном виде. Но это было параллельно, с рядом переключателей. Я использовал телеграфный ключ для последовательного кодирования, и он ДЕЙСТВИТЕЛЬНО подвержен ошибкам, как заявил Адам.
user6297
3

Абсолютно. Фактически, в первом курсе по микропроцессору (около 87) использовалась плата Motorola 68000. Мы разработали код в сборке, посмотрели гекс для сборки и набрали его в терминал, чтобы запрограммировать плату. Если вы редактировали, вы должны были убедиться, что код, который вы вставили, были короче, чем код, который вы заменяли, а затем буферизовать все остальное с помощью NOP. Если бы код был длиннее, вам пришлось бы все перепечатывать! Мы научились добавлять много NOP.

Скотт Сейдман
источник
68000 не был микроконтроллером. Он спросил о микроконтроллере, а не о микропроцессоре. Микроконтроллеры запускают свой код нашей флэш-памяти, который недоступен без какого-либо интерфейса.
tcrosley
5
@tcrosley Это не совсем так. Существуют микроконтроллеры, которым требуется внешнее ПЗУ, поскольку они не имеют собственных ПЗУ или Flash. То, что делает их микроконтроллером, не встроено в ОЗУ или ПЗУ, а встроено в периферийные устройства (порты ввода-вывода, UART и т. Д.).
Majenko
Однако очень немногие - из-за упомянутых вами периферийных устройств ввода-вывода очень немногие имеют внешние адреса и шины данных, потому что им требуется два-много контактов.
tcrosley
2

Абсолютно. Если у вас есть двоичный формат фактических инструкций (это легко сделать для четко определенных наборов инструкций), все, что вам нужно, - это реализовать протокол программирования.

Например, возьмите что-нибудь маленькое, например AVR Tiny 4 . Раздел 14 подробно описывает интерфейс программирования, включая протокол и физический уровень. Это относительно просто, и вам просто нужно несколько кнопок и подтягивающие / понижающие резисторы, чтобы отправить / получить 1 или 0. Если вы чувствуете себя амбициозно, добавьте несколько светодиодов, чтобы прочитать результат.

Последняя оставшаяся проблема - если вы можете сделать это достаточно быстро, что, к счастью * для AVR Tiny 4 (раздел 16), не имеет минимальной частоты при программировании.

* примечание: насколько указано в спецификации. Это может отличаться в реальности ... Я сомневаюсь, что кто-то пробовал программировать его на тактовых частотах МГц

Не стесняйтесь автоматизировать столько, сколько нужно процесса. Это то, что большинство программирующих устройств в любом случае делают: автоматизируют процесс.

helloworld922
источник
2

Каким бы способом вы ни вводили программу в ОК, вы «взаимодействуете» с ней, потому что именно это означает взаимодействие. Даже несколько переключателей, которые вы переключаете вручную, являются «интерфейсом».

Поэтому я буду относиться к этому вопросу как к «как я могу взаимодействовать с унифицированным коммуникационным оборудованием, в основном - с механическим (в отличие от электронного) интерфейсным оборудованием, и настолько круто, насколько это возможно?»

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

Atsby
источник
2

Мало того, что можно запрограммировать микроконтроллер без компьютера, но вы можете купить компьютер сегодня, специально предназначенный для программирования с помощью аппаратных тумблеров. Комплект называется карточкой участника и представляет собой воссоздание компьютера COSMAC Elf 1970-х годов. Комплект был описан в недавней статье в журнале IEEE Spectrum . Также возможно запрограммировать более свежие версии Членской карты с ПК.

Крейг Финч
источник
2

Ладно. Как насчет этого: вы пишете программу на ассемблере и сами ищите коды операций, как было предложено ранее. Как получить его в компьютер: возьмите старый магнитофон, снимите головку воспроизведения, но оставьте фиксатор и прижимной ролик. Это будет ваш транспорт. Если у вас есть катушечный проигрыватель, вы можете оставить головку воспроизведения на месте.

Затем возьмите длинную и узкую полоску бумаги или, что еще лучше, прозрачную ленту. Здесь вы кодируете свою программу. Вы используете столько треков, сколько у вас есть булавок для программирования. На одну дорожку вы наносите черные точки через равные промежутки времени; это твои часы На других дорожках вы помещаете черные точки или полосы и оставляете пустые места в соответствии с данными и сигналами. Вы излучаете свет на все это и обнаруживаете его с помощью небольших фототранзисторов (или светите одним светодиодом на ленту и обнаруживаете свет другими, аналогичными) и управляете тактовыми и сигнальными линиями транзисторами. Это занимает немного места на магнитофоне, поэтому вам может потребоваться снять головку воспроизведения.

Конечно, вы также можете кодировать сигналы как аудио, но это немного сложнее декодировать. Или вы можете обнаружить отраженный вместо проходящего света. Или вы можете пробить отверстия в темной ленте или бумажной ленте, вместо того, чтобы делать черные метки на прозрачной ленте. Без разницы. Магнитофон ведет ленту с постоянной скоростью, поэтому вы можете ввести тактовый сигнал без компьютера.

Ангус МакГ
источник
1

Да. Основной проблемой может быть взаимодействие с интерфейсом программирования. Если у вас есть простой адрес и шина данных, все немного проще. Вы когда-нибудь видели действительно ранние компьютеры? Программы вводятся по одной инструкции за раз в ОЗУ с переключателями на передней панели.

alex.forencich
источник
Он спросил о микроконтроллере, а не о микропроцессоре. Микроконтроллеры запускают свой код нашей флэш-памяти, который недоступен без какого-либо интерфейса.
tcrosley
4
@tcrosley - У ранних ОК не было вспышки. У них либо была RAM или ROM для магазина программ.
Hot Licks
@HotLicks Правильно. И, за небольшим исключением, все они были микропроцессорами, а не микроконтроллерами. Это была моя точка зрения, а не о том, было ли хранилище программ флэш-памятью, ПЗУ, ПЗУ, ПЗУ или ЭСППЗУ. Дело в том, был ли магазин программ на чипе (микроконтроллер) или нет (микропроцессор). Даже 8048, первый микроконтроллер Intel, представленный в 1977 году, имел встроенное ПЗУ.
tcrosley
3
@ Кроссли Кто ты? И что вы сделали с обычно полезным и объективным tcrosley? :-) | Его первым наблюдением было то, что вы можете взаимодействовать с программным интерфейсом - что часто, но не всегда, действительно. Адрес «IF» и шина данных являются IF. Это относится к некоторым крупным и пограничным гибридным микроконтроллерам, но его первоначальный ЕСЛИ был достаточно хорошим (хотя и жестким и медленным).
Рассел МакМэхон
3
Попытка сохранить четкое различие между микропроцессором и микроконтроллером более педантична, чем полезна, особенно когда она содержится в комментарии к каждому отдельному ответу.
pjc50
1

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

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

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

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

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

JRobert
источник
Много лет назад, когда нам приходилось ходить в школу босиком в гору в обоих направлениях, PDP-8 в нашей старшей школе нужно было загружать, переключая загрузчик с передней панели, как вы описали. Никто из учителей не знал много о компьютере, в том числе и тот, кто за него отвечал. Он подумал, что 0 и 1 не работает, поэтому никогда не мог переключиться в загрузчике. Я устроил бы сбой компьютера, когда я был на уроке английского, чтобы меня вызвали, чтобы перезагрузить компьютер. Я никогда не говорил ему о его неправильном представлении - это было слишком полезно для меня.
Олин Латроп
Я любил PDP-8. У меня был единственный доступ к нему в течение примерно трех лет - так что это было похоже на персональный компьютер задолго до изобретения ПК. Удивительно, что может уместиться в 4К памяти. Конечно, прошло много бумажной ленты (без DECtape) и бумага Teletype.
tcrosley
0

Ответ да , вы можете запрограммировать микроконтроллер без компьютера, отладчика и т. Д. Вам потребуется предоставить различные напряжения, данные, тактовые импульсы и последовательности программирования, указанные производителем ОК (непростая задача).

Guill
источник