8-битные микроконтроллеры AVR и PIC - Можно ли добавить: внешнюю флэш-память, внешнюю оперативную память, видео-и аудиовыход, дополнительные адресные шины?
поэтому я планировал создать мини-ПК из базовых микросхем и 8-битных микроконтроллеров, таких как ATTinys и/или PICs, и у меня есть несколько вопросов по этому поводу:
- Можете ли вы добавить внешнюю оперативную память, скажем, с чипами SRAM, DRAM, чтобы микроконтроллер мог обрабатывать большие программы? (те, которые требуют больше памяти для выполнения). Я видел здесь отличную дискуссию: Внешняя флэш-память для ATtiny85, которая восклицает, что я не могу сделать это с AVR (но почему именно это? Как насчет PICs или любого 8-битного ПСК, если уж на то пошло).
- Можете ли вы добавить внешнюю память, например flash или EEPROM, чтобы микроконтроллер мог хранить некоторые файлы (что-то вроде жесткого диска (но больше похоже на SSD, я думаю).
- Кроме того, как бы вы соединили чипы памяти вместе, чтобы получить из них больше памяти? Будет ли разница между чипами памяти, такими как последовательная flash и параллельная flash?
- Можете ли вы использовать их для вывода и создания базового аудио и вывода HDMI? (или общаться с внешними микросхемами для выполнения этой задачи)
- Можете ли вы как-то подключить, скажем, 2 8-битных ATTinys, чтобы получить псевдо-16-битный микроконтроллер? Означает ли это, что они могут обрабатывать больше данных одновременно?
Спасибо, какой-то парень в Интернете.
@Szymon Pokrywka, 👍3
Обсуждение2 ответа
Лучший ответ:
Да, вы можете подключать внешние чипы оперативной памяти через типичные интерфейсы (в основном SPI или I2C). Но вы не можете выполнить код из него. Микроконтроллер-это микросхема, то есть интегральная схема. Он жестко подключен внутренне для выполнения с внутренней flash. Вы не можете этого изменить. Это справедливо для большинства микроконтроллеров, которые выполняются из внутренней флэш-памяти (что в некотором роде является определением микроконтроллера). Процессор, напротив, как и в компьютере, строится для выполнения кода из другого места. Примечание: Некоторые микроконтроллеры имеют возможность выполняться с внешней flash. Платы ESP являются хорошим примером этого, потому что они уже используют внешний флэш-чип, который припаян к плате. Вы можете расширить доступную флэш по контактам SPI flash (шина SPI, к которой подключена флэш), хотя на самом деле это не тема для начинающих. Возможно, вы захотите разобраться в этом.
Если ваш код, который вы хотите сохранить снаружи, не настолько сложен, вы можете сохранить его в собственном (скорее всего, двоичном) формате данных и написать код для микроконтроллера, который принимает эти данные и выполняет соответствующие функции. Так что в основном переводчик. Хотя на небольших микроконтроллерах подойдет только код для относительно небольшого функционала.
Да, вы можете добавить внешнее хранилище. Какое хранилище зависит от многих факторов. Вы можете использовать внешние чипы flash или EEPROM, как и внешние чипы RAM. Распространенными запоминающими устройствами для микроконтроллеров являются SD-карты, поскольку они могут легко взаимодействовать через SPI. У вас даже может быть файловая система (хотя размер несколько ограничен доступной оперативной памятью вашего микроконтроллера, потому что он должен загрузить таблицу файлов). Может быть, вы даже сможете подключить SSD-накопитель, но вам придется посмотреть, сможете ли вы настроить для него соответствующий интерфейс. Микроконтроллер не имеет интерфейсов SATA или чего-то подобного. И добавление дополнительных чипов для них быстро оставляет вас с интерфейсными чипами, которые намного более способны, чем сам основной чип (см. Wifi и ESPs: Вы можете добавить Wi-Fi в проект Arduino Uno с его помощью, но ESP намного более способен, чем Uno). Тогда вам нужно будет спросить себя: действительно ли это хорошая идея?
Я думаю, что большинство чипов памяти (какого бы вида они ни были) не являются дейзи-цепочкой. В основном они используют интерфейс "Один мастер-несколько подчиненных", такой как SPI. Вы можете подключить несколько микросхем памяти к шине SPI и последовательно взаимодействовать с ними. Разница между параллельными и последовательными флэш-чипами заключается в их коммуникационном интерфейсе. Serial может быть чем-то вроде SPI. Параллельная связь будет посылать несколько битов одновременно по соответствующему количеству проводов (в основном 8, означает 1 байт). Здесь вам нужно соответствующее количество свободных контактов на вашем микроконтроллере. Хотя параллельное взаимодействие часто нецелесообразно. Особенно маленькие микроконтроллеры слишком медлительны, чтобы извлечь выгоду из более быстрого интерфейса. И вместо того, чтобы использовать по крайней мере 9 контактов, вы также можете использовать 3 для SPI и получить ту же скорость передачи в конце концов.
Да, они могут. Хотя это действительно зависит от используемого микроконтроллера и топологии проекта. При использовании чего-то вроде проигрывателя DFmini любой микроконтроллер может воспроизводить аудио (из файлов на карте micro SD в проигрывателе). Когда микроконтроллер должен сам воспроизводить звуки, можно получить очень разные результаты, в зависимости от возможностей чипа. Например, ESP32 имеет специальный интерфейс I2S, который предназначен для передачи звука на устройство вывода.
О видео: Микроконтроллеры на основе AVR (или аналогичные ФОТО) на самом деле не могут обрабатывать видео. Например: Самое большее, что вы можете получить от Arduino Uno (Atmega328p), - это очень ограниченный сигнал VGA (очень маленькое разрешение, всего несколько цветов). HDMI находится вне досягаемости для любого из них. Конечно, вы хотели бы нарисовать на экране, который подключен к интерфейсу HDMI, чтобы создать визуальный интерфейс. Я думаю, что это просто невозможно с такими маленькими микроконтроллерами. Они не предназначены для этого. Хотя вы можете найти какой-нибудь очень специализированный чип, который вы могли бы использовать таким образом. Если бы этот чип был намного дороже, чем покупка нескольких Raspberry Pi. Но если вы готовы пойти на компромисс, вы можете найти дисплей меньшего размера (например, несколько дюймов) с подключенным контроллером, которым вы можете управлять с помощью Arduino. Но все равно у вас будет очень низкая частота обновления, поэтому никаких движущихся изображений, больше похожих на неподвижные изображения.
Нет, точно так же, как 2 32-битных компьютера не делают 1 64-битный компьютер. Это просто не то, как все работает. Каждый микроконтроллер по-прежнему может обрабатывать только 8 бит за раз из своей собственной памяти. В зависимости от поставленной задачи вы можете попытаться дать им разные задания. Теоретически это даст вам больше вычислительной мощности, но это не то же самое, что 16-битный контроллер.
Я предполагаю, что вы делаете это для удовольствия или для измельчения, поэтому я не буду говорить, что вам следует купить Raspberry Pi. Хотя я думаю, что вы можете смотреть в другую сторону. Вы не можете сделать грузовик из деталей для мини, хотя многие компоненты работают аналогичным образом. Чтобы получить всю сложную функциональность (аудио, видео, большое хранилище, ...) из вашего собственного компьютера, вам нужно использовать компьютерные части, а не части микроконтроллера.
Если вас устраивают гораздо меньшие возможности, то многие люди в прошлом строили свои собственные компьютеры из более простых деталей, таких как микроконтроллеры (вплоть до большого диапазона логических вентилей). Микроконтроллеры живут в мире между компьютерами и базовыми логическими компонентами. Они слишком интегрированы, чтобы сильно расширять свои возможности.
Да, вы можете и даже выполнить код из него на микроконтроллерах PIC18 и PIC17 размером до 2 МБ, если можно добавить внешнюю программную память, но большинство вариантов имеют интерфейс внешней программной памяти. Например, pic18f8x8x вы даже можете реализовать систему банка памяти для адресации гораздо более 2 МБ, как это делали ПК в ранние времена x86 под названием XMEM extended memory.
- Как функция/метод может определить, является ли передаваемый массив const PROGMEM (flash) или нет (RAM)?
- Что такое метод распределения памяти в Arduino
- Удаленное машинное кодирование микросхемы Arduino Atmel с тремя инструкциями по последовательной линии от привязанного (хост-компьютера)
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- В чем разница/связь между Arduino и AVR?
- Как преобразовать скетч примера Arduino в полный проект C++?
- Не удается записать загрузчик через Arduino Nano clone ISP в atmega328p
- Выделение строковой памяти Arduino
Почему вы хотите сделать это просто ради этого? Есть несколько чрезвычайно недорогих 64-битных компьютеров вокруг, включая Raspberry Pi. P.S. вопрос не в Arduino, голосование не по теме., @MichaelT
Вам гораздо лучше иметь микропроцессор общего назначения или одноплатный компьютер. AVRs и PIC-отличные и универсальные устройства, но просто не самые подходящие для того, что вы описываете., @StarCat
Я знаю, к чему вы клоните, мне было бы лучше с чем-то другим, но я просто хотел использовать эти ПСК в качестве доказательства того, что они могут быть преобразованы в "полезный компьютер"., @Szymon Pokrywka
Я голосую за то, чтобы закрыть этот вопрос, потому что он должен быть перенесен в electronics.stackexchange.com, @Codebreaker007
Дмитрий Гринберг построил эмулятор ARM на микроконтроллере AVR, а затем [загрузил Linux на эмулируемом ARM](https://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit). Эмуляция снимает некоторые ограничения микроконтроллера, такие как невозможность выполнения инструкций из оперативной памяти., @Edgar Bonet