Одноплатный микроконтроллер — это микроконтроллер, собранный на одной печатной плате . Эта плата обеспечивает все схемы, необходимые для полезной задачи управления: микропроцессор , схемы ввода/вывода , генератор тактовых импульсов , ОЗУ , память для сохраненных программ и любые необходимые вспомогательные ИС . Цель состоит в том, чтобы плата была немедленно полезна разработчику приложений, не требуя от него тратить время и усилия на разработку аппаратного обеспечения контроллера.
Поскольку они обычно недороги и имеют особенно низкие капитальные затраты на разработку, одноплатные микроконтроллеры давно популярны в образовании. Они также являются популярным средством для разработчиков, чтобы получить практический опыт работы с новым семейством процессоров.
Одноплатные микроконтроллеры появились в конце 1970-х годов, когда появление первых микропроцессоров, таких как 6502 и Z80 [1] , сделало возможным создание целого контроллера на одной плате, а также позволило выделить компьютер для решения относительно небольших задач.
В марте 1976 года Intel анонсировала одноплатный компьютерный продукт, который интегрировал все компоненты поддержки, необходимые для их микропроцессора 8080 , вместе с 1 килобайтом ОЗУ, 4 килобайтами программируемого пользователем ПЗУ и 48 линиями параллельного цифрового ввода-вывода с драйверами линий. Плата также предлагала расширение через разъем шины, но могла использоваться без каркаса для платы расширения, когда приложения не требовали дополнительного оборудования. Разработка программного обеспечения для этой системы была размещена на системе разработки микрокомпьютеров Intellec MDS от Intel; это обеспечивало поддержку ассемблера и PL/M , а также позволяло внутрисхемную эмуляцию для отладки. [2]
Процессоры этой эпохи требовали включения ряда вспомогательных микросхем за пределами процессора. ОЗУ и СППЗУ были разделены, часто требуя управления памятью или схемы обновления для динамической памяти . Обработка ввода-вывода могла осуществляться одной микросхемой, такой как 8255 , но часто требовала еще нескольких микросхем.
Одноплатный микроконтроллер отличается от одноплатного компьютера тем, что у него нет универсального пользовательского интерфейса и интерфейсов массового хранения, которые есть у более универсального компьютера. По сравнению с платой разработки микропроцессора , плата микроконтроллера будет подчеркивать цифровые и аналоговые управляющие соединения с некоторой управляемой системой, тогда как плата разработки может иметь только несколько или не иметь ни одного дискретного или аналогового устройства ввода/вывода. Плата разработки существует для демонстрации или обучения на определенном семействе процессоров, и поэтому внутренняя реализация важнее внешней функции.
Шина ранних одноплатных устройств, таких как Z80 и 6502 , была универсальной архитектурой фон Неймана . Доступ к памяти программ и данных осуществлялся через одну и ту же общую шину, хотя они хранились в принципиально разных типах памяти: ПЗУ для программ и ОЗУ для данных. Такая архитектура шины была необходима для экономии количества необходимых выводов из ограниченных 40 доступных для повсеместного двухрядного корпуса ИС процессора.
Было принято предлагать доступ к внутренней шине через разъем расширения или, по крайней мере, предоставлять место для припаивания разъема. Это был недорогой вариант, который предоставлял потенциал для расширения, даже если он редко использовался. Типичными расширениями были устройства ввода-вывода или дополнительная память. Было необычно добавлять периферийные устройства, такие как ленточный или дисковый накопитель или дисплей ЭЛТ
Позже, когда стали доступны однокристальные микроконтроллеры, такие как 8048 , шину больше не нужно было выставлять за пределы корпуса, поскольку вся необходимая память могла быть предоставлена внутри корпуса чипа. Это поколение процессоров использовало архитектуру Гарварда с отдельными программными и шинами данных, обе внутренние по отношению к чипу. Многие из этих процессоров использовали модифицированную архитектуру Гарварда , где был возможен некоторый доступ для записи в пространство данных программы, что позволяло осуществлять внутрисхемное программирование. Ни один из этих процессоров не требовал и не поддерживал шину Гарварда через одноплатный микроконтроллер. Когда они поддерживали шину для расширения периферийных устройств, использовалась выделенная шина ввода-вывода, такая как I²C , 1-Wire или различные последовательные шины .
Некоторые платы микроконтроллеров, использующие микропроцессор общего назначения, могут вывести адресную и информационную шину процессора на разъем расширения, что позволяет добавлять дополнительную память или периферийные устройства. Это обеспечивает ресурсы, которых еще нет в системе с одной платой. Поскольку не каждая система потребует расширения, разъем может быть опциональным, с местом крепления, предусмотренным для установки пользователем по желанию.
Микроконтроллерные системы предоставляют несколько форм входных и выходных сигналов, чтобы позволить прикладному программному обеспечению управлять внешней системой «реального мира». Дискретный цифровой ввод-вывод предоставляет один бит данных (вкл. или выкл.). Аналоговые сигналы, представляющие непрерывный переменный диапазон, такой как температура или давление, также могут быть входами и выходами для микроконтроллеров.
Дискретные цифровые входы и выходы могут буферизироваться от шины данных микропроцессора только адресуемой защелкой или могут управляться специализированной ИС ввода/вывода, такой как параллельный адаптер ввода/вывода Intel 8255 или Motorola 6821. Более поздние однокристальные микроконтроллеры имеют доступные входные и выходные контакты. Эти схемы ввода/вывода обычно не обеспечивают достаточного тока для непосредственного управления устройствами, такими как лампы или двигатели, поэтому твердотельные реле управляются цифровыми выходами микроконтроллера, а входы изолируются схемами согласования уровня сигнала и защиты.
На некоторых платах микроконтроллеров есть один или несколько аналоговых входов с аналоговым мультиплексором и общим аналого-цифровым преобразователем . Аналоговые выходы могут использовать цифро-аналоговый преобразователь или, на некоторых микроконтроллерах, могут управляться широтно-импульсной модуляцией . Для дискретных входов могут потребоваться внешние схемы для масштабирования входов или для обеспечения таких функций, как возбуждение моста или компенсация холодного спая .
Для контроля стоимости компонентов многие платы были разработаны с дополнительными схемами аппаратного интерфейса, но без установленных компонентов для этих схем, оставляя плату пустой. Схема была добавлена как опция при доставке или могла быть заполнена позже.
Обычной практикой для плат является включение "областей прототипирования", областей платы, размеченных как область паяемой макетной платы с доступными шинами и шинами питания, но без определенной схемы. Несколько контроллеров, особенно предназначенных для обучения, также включают в себя подключаемую, повторно используемую макетную плату для легкого прототипирования дополнительных цепей ввода/вывода, которые можно было бы заменить или удалить для последующих проектов.
Интерфейсы связи различаются в зависимости от возраста микроконтроллерной системы. Ранние системы могли реализовывать последовательный порт для обеспечения RS-232 или токовой петли . Последовательный порт мог использоваться прикладной программой или мог использоваться вместе с ПЗУ монитора для передачи программ в память микроконтроллера. Текущие микроконтроллеры могут поддерживать USB , беспроводные сети ( Wi-Fi , Zigbee или другие) или обеспечивать соединение Ethernet. Кроме того, они могут поддерживать стек протоколов TCP/IP . Некоторые устройства имеют встроенное ПО для реализации веб-сервера, что позволяет разработчику приложений быстро создавать веб-совместимые приборы или системы.
Многие ранние системы не имели внутренних возможностей для программирования и полагались на отдельную «хостовую» систему для этой задачи. Это программирование обычно выполнялось на языке ассемблера или иногда на C или PL/M , а затем кросс-ассемблировалось или кросс-компилировалось на хосте. Некоторые одноплатные микроконтроллеры поддерживают языковую систему BASIC, что позволяет разрабатывать программы на целевом оборудовании. Хостинговая разработка позволяет использовать все хранилище и периферийные устройства настольного компьютера, обеспечивая более мощную среду разработки.
Ранние микроконтроллеры полагались на стираемые программируемые устройства постоянного запоминающего устройства (EPROM) для хранения прикладной программы. Объектный код из хост-системы «записывался» на EPROM с помощью программатора EPROM . [3] Затем этот EPROM физически подключался к плате. Поскольку EPROM извлекался и заменялся много раз во время разработки программы, было принято предоставлять гнездо ZIF , чтобы избежать износа или повреждения. Стирание EPROM с помощью УФ- ластика занимает значительное время, и поэтому разработчику также было свойственно иметь несколько EPROM в обращении одновременно.
Некоторые микроконтроллерные устройства были доступны с встроенным EPROM. Они также программировались в отдельном пишущем устройстве, а затем вставлялись в гнездо целевой системы.
Использование разъемов EPROM позволяло производить обновления прикладной программы на месте, либо для исправления ошибок, либо для предоставления обновленных функций.
Когда одноплатный контроллер формировал всю среду разработки (обычно в образовании), плата могла также включать простую шестнадцатеричную клавиатуру, светодиодный дисплей в стиле калькулятора и программу «монитора», постоянно установленную в ПЗУ. Этот монитор позволял вводить программы машинного кода непосредственно с клавиатуры и хранить их в ОЗУ. Эти программы были в машинном коде, даже не на языке ассемблера, и часто собирались вручную на бумаге перед вводом. Можно спорить о том, какой процесс был более трудоемким и подверженным ошибкам: сборка вручную или ввод байт за байтом.
Одноплатные микроконтроллеры «клавиатура и дисплей калькулятора» этого типа были очень похожи на некоторые микрокомпьютеры низкого класса того времени, такие как KIM -1 или Microprofessor I. [4] Некоторые из этих микропроцессорных «учебных» систем производятся и сегодня, они используются в качестве очень недорогих вводных моделей для микропроцессоров на уровне аппаратного программирования. [5]
Когда появились настольные персональные компьютеры, изначально CP/M или Apple II , а затем IBM PC и совместимые, произошел сдвиг в сторону разработки на хосте. Аппаратное обеспечение теперь было дешевле, а емкость оперативной памяти увеличилась, так что стало возможным загружать программу через последовательный порт и хранить ее в оперативной памяти. Это значительное сокращение времени цикла тестирования новой версии программы дало столь же большой прирост скорости разработки.
Эта программная память все еще была энергозависимой и терялась при отключении питания. Флэш-память еще не была доступна по приемлемой цене. Поскольку от завершенного проекта контроллера обычно требовалось, чтобы он был энергонезависимым, последним шагом в проекте часто была его запись в EPROM.
Однокристальные микроконтроллеры, такие как Intel 8748 , объединили многие из функций предыдущих плат в одном корпусе IC. Однокристальные микроконтроллеры интегрируют память (как RAM, так и ROM) на корпусе и, следовательно, не нуждаются в раскрытии шины данных и адреса через контакты корпуса IC. Эти контакты затем доступны для линий ввода-вывода. Эти изменения также уменьшают площадь, требуемую на печатной плате, и упрощают конструкцию однокристального микроконтроллера. Примеры однокристальных микроконтроллеров включают:
Для использования в производстве в качестве встраиваемых систем встроенное ПЗУ либо программировалось по маске на заводе по производству чипов, либо однократно программировалось (OTP) разработчиком как PROM . PROM часто использовали ту же технологию UV EPROM для чипа, но в более дешевом корпусе без прозрачного окна стирания. Во время разработки программы все еще было необходимо прожигать EPROM. В этом случае вся ИС контроллера, а следовательно, и гнезда ZIF , были бы предоставлены.
С развитием доступной EEPROM и флэш-памяти стало практичным постоянное присоединение контроллера к плате и загрузка программного кода с хост-компьютера через последовательное соединение. Это называлось « внутрисхемным программированием ». Стирание старых программ осуществлялось либо путем перезаписи их новой загрузкой, либо путем массового стирания их электрическим способом (для EEPROM ). Последний метод был медленнее, но мог быть выполнен на месте.
Основной функцией платы контроллера тогда было обеспечение цепей поддержки для этого последовательного или, на более поздних платах, USB- интерфейса. В качестве дополнительного удобства во время разработки многие платы также имели недорогие функции, такие как светодиодные мониторы линий ввода/вывода или переключатели сброса, установленные на плате.
Теперь проектировать печатные платы для микроконтроллеров стало дешево и просто. Системы хостов разработки также дешевы, особенно при использовании программного обеспечения с открытым исходным кодом . Языки программирования более высокого уровня абстрагируют детали оборудования, делая различия между конкретными процессорами менее очевидными для прикладного программиста. Перезаписываемая флэш-память заменила медленные циклы программирования, по крайней мере, во время разработки программ. Соответственно, почти вся разработка теперь основана на кросс-компиляции с персональных компьютеров, а программы загружаются на плату контроллера через последовательный интерфейс, обычно отображаемый хостом как USB-устройство.
Первоначальный рыночный спрос на упрощенную реализацию платы уже не так актуален для микроконтроллеров. Одноплатные микроконтроллеры по-прежнему важны, но сместили фокус на: