Я предполагаю, что в ПЗУ и некоторых микросхемах ЦП хранится программное обеспечение, управляющее частями.
Во многих встроенных системах используется микроконтроллер (MCU) или система на кристалле (SoC) , они включают в себя на одном кристалле одно или несколько ядер ЦП, а также ПЗУ (обычно флэш-память), ОЗУ и выбор периферийных устройств и интерфейсов, таких как UART, USB, GPIO, АЦП, ЦАП, SPI, I2C, таймер / счетчики, Контроллер Ethernet, CAN, SDIO, контроллер LCD и многое другое. Из-за ограниченного пространства на кристалле и относительной низкой плотности Flash и SRAM MCU также может иметь внешнее ПЗУ или ОЗУ и иметь контроллер SDRAM, позволяющий использовать высокоплотную и недорогую SDRAM.
Часто код хранится во встроенной флэш-памяти или OTP-ПЗУ (одноразовое программируемое ПЗУ), но может использоваться внешняя память. Некоторые системы выполняют код непосредственно из ПЗУ, другие копируют образ ПЗУ в ОЗУ для выполнения (что часто происходит быстрее, а образ ПЗУ может быть сжат для уменьшения занимаемой площади). Если код не выполняется из ПЗУ, но копируется в ОЗУ, его можно сохранить в дешевой NAND Flash с высокой плотностью.
Теперь это программное обеспечение обычно написано на Java или на низком уровне C (++?) Или даже ниже?
Для запуска Java требуется JVM и обычно ОС. Телефонные приложения и приложения Android часто пишутся на языке Java, но это не язык системного уровня. Основная ОС и сама JVM будут написаны на низкоуровневом языке. Некоторые микросхемы включают частичное выполнение байт-кода Java в аппаратном обеспечении (например, в модуле Jazelle ARM), но это предназначено для ускорения выполнения Java, а не для непосредственной реализации полной JVM в аппаратном обеспечении.
C является наиболее часто используемым языком систем и прикладного уровня в глубоко встроенных системах, все чаще используется C ++, особенно в больших системах. Код на ассемблере чаще всего используется только для кода начальной загрузки и кода инициализации; после создания среды выполнения C языки более высокого уровня становятся более распространенными. Некоторые очень маленькие 8-битные системы все еще могут быть полностью закодированы на ассемблере. Хотя, если ваша система достаточно велика для запуска Linux, например, она может даже использовать языки сценариев для некоторых элементов приложения. Многие критичные ко времени функции DSP также часто кодируются на ассемблере, хотя общие стандартные функции и алгоритмы обычно предоставляются в виде библиотек для языка более высокого уровня либо поставщиком инструмента, либо производителем микросхемы (которые иногда совпадают).
Существуют ли какие-либо библиотеки, обычно используемые для такого рода вещей? Или чипы поставляются запрограммированными с этими и, возможно, с некоторыми основными операционными системами?
Существует обширная экосистема библиотек встроенных систем, как коммерческих, так и с открытым исходным кодом. Они могут включать ядра RTOS, полные операционные системы, файловые системы и периферийные библиотеки. Зачастую производитель чипов предоставляет библиотеку драйверов или встроенных периферийных устройств. Эти драйверы обычно бывают «голыми» (то есть не зависят от ОС), предоставляются в виде исходного кода и обычно являются низкоуровневыми. Если вы используете их в ОС, вам, как правило, придется использовать их для создания драйвера более высокого уровня и более дружественного к ОС.
Обычно устройства не запрограммированы заранее. Некоторое оборудование для разработки и оценки может быть предварительно запрограммировано с помощью демонстрационного кода, более крупное оборудование для оценки может быть предварительно загружено с Linux или WinCE.
как этот чип запрограммирован программно? Существует ли какое-то устройство для записи в ПЗУ, верно?
Есть разные способы. Многие современные микроконтроллеры включают в себя аппаратное обеспечение для отладки и программирования на кристалле (обычно это интерфейс JTAG, хотя проприетарные интерфейсы также являются обычными), это позволяет программировать на кристалле и во многих случаях запрограммировать внешнюю флэш-память с хоста ПК с использованием JTAG. отладчик или программист.
Чтобы разрешить программирование без часто дорогостоящих JTAG-программистов, многие микроконтроллеры имеют предварительно запрограммированный загрузчик. Это небольшая программа, которая позволяет загружать и выполнять код через интерфейс, такой как UART (последовательный) или USB. Bootrom может включать в себя программный код Flash или может быть даже проще, и требовать загрузки и выполнения вторичного загрузчика в RAM и иметь эту программу Flash.
Для массового производства чипы могут быть предварительно запрограммированы до того, как банд-программист поместит их на плату. Часто это услуга, предоставляемая поставщиком устройства или сборщиком платы.
это то, что можно было бы играть дома через мой ноутбук, и если да, то какое оборудование мне понадобилось бы в дополнение к ноутбуку?
Ответ на этот вопрос будет полностью зависеть от вашего бюджета. Вы можете начать за несколько десятков долларов. Для серьезного развития вам понадобится отладочное оборудование, которое позволит вам запускать чип в отладчике на уровне исходного кода на ПК, как и в приложении для ПК.
Кто-нибудь сможет указать мне ресурсы, где я мог бы прочитать больше об этом?
Профессиональным ресурсом является Embedded.Com (теперь переименованный, но не так легко запоминающийся как EETimes Embedded), но это было бы неплохо, начиная с глубокого конца! Вам может быть удобнее что-то вроде сравнительно простого проекта Arduino или более мощного проекта BeagleBoard .
Отличным ресурсом для любителей, если вы выбираете микроконтроллеры Atmel AVR, является AVR Freaks . AVR имеет то преимущество, что я думаю, что это единственное 8-битное устройство, поддерживаемое компилятором GNU.
Еще один ресурс, если вы хотите разрабатывать проекты с использованием инструментов с открытым исходным кодом на платформе ARM (или их много), для Windows - это превосходный сайт ARM-Projects Мартина Томаса. Он ведет свой собственный дистрибутив инструментов GNU, но также имеет ссылки на другие, которые могут быть более современными и поддерживаемыми.
Я пытаюсь получить общее представление о том, как это работает, как вовлекать это и какие навыки кому-то понадобятся, чтобы заставить это работать.
Может потребоваться некоторое время, чтобы самостоятельно создать что-нибудь интересное, но есть много примеров и примечаний к приложению с кодом, которые помогут вам получить более быстрое удовлетворение. Знание электроники полезно. Хотя большинство плат разработки и оценки имеют ряд интерфейсов, переключателей, кнопок, индикаторов, а иногда и ЖК-дисплеев или других устройств, они, как правило, в первую очередь предназначены для взаимодействия с конкретными аппаратными средствами, которые вы можете создать самостоятельно. Это особенно актуально для мехатронных систем, где вам потребуется дополнительное оборудование для управления и контроля сильноточных устройств, таких как двигатели и исполнительные механизмы, или для взаимодействия с датчиками.