Один из моих проектов очень выиграл бы от возможности запуска программы, которая не хранится в микроконтроллере (но вместо этого хранится на SD-карте).
Итак, я ищу устройство, которое позволит мне загрузить код с SD-карты в ОЗУ, а затем выполнить код из ОЗУ. В настоящее время у меня есть только программатор, который поставляется с PicKit2, поэтому я бы предпочел остаться с PIC.
Кто-нибудь знает, какие, если таковые имеются, PIC могут сделать это? Если никакие PIC не способны на это, то какие микроконтроллеры будут работать для этого? Предпочтительно те, которые доступны в совместимом макете.
microcontroller
pic
Ponkadoodle
источник
источник
Ответы:
Есть несколько PIC, которые позволяют вам добавлять внешнюю память программы. Я никогда не делал этого, но Примечания по применению AN869 и AN778 имеют больше информации о том, как реализовать внешнюю память.
источник
Другой вариант, который следует рассмотреть, - это использование интерпретированного языка для ваших программ, хранящихся на SD-карте. Таким образом, процессор не выполняет машинный код, считанный с карты, он просто обрабатывает его как данные.
Такой подход дает вам гибкость за счет скорости.
Есть много вариантов на выбор: Обзор языковых интерпретаторов высокого уровня / компиляторов для микроконтроллеров
источник
Как уже было сказано, PIC (кроме PIC32) не могут этого сделать. Вам, вероятно, придется обратиться к более крупным процессорам в любом семействе или к процессору с внешней шиной памяти, поскольку большинство микроконтроллеров имеют очень ограниченные ресурсы оперативной памяти.
Процессоры MSP430 могут запускать код из своего пространства ОЗУ, но вам понадобится что-то вроде F5438 с 16 КБ пространства ОЗУ - запуск кода в 128 байт на самом деле не вариант!
Если у процессора есть внешняя шина, вы можете поместить оперативную память в пространство кода. Возможно, вам придется добавить дополнительную логику для отображения ОЗУ в две области памяти, если архитектура процессора не позволяет записывать данные в память выполнения.
Я запустил код из ОЗУ в системе, основанной на 8051, но это означало, что ОЗУ должно было отображаться в пространство ВНЕШНЕЙ памяти для программирования, а затем обратно в пространство КОДА для выполнения. Программа загрузки / мониторинга обрабатывает переключение и загрузку банка памяти. Пожалуйста, не спрашивайте код - я сделал это около 30 лет назад, и он давно потерян (и написан на PL / M-51)
источник
Ни один из PIC низкого и среднего диапазона не может выполняться из ОЗУ из-за их архитектуры памяти.
Любой процессор на базе ARM должен выполняться из оперативной памяти. Хотя они, как правило, находятся в пакетах smd, существует довольно много модулей размера DIP, в которых уже загружен микроконтроллер. Взгляните, например, на mbed или LPCXpresso . Они оба поставляются либо с загрузчиком, либо, в случае LPCXpresso, с интерфейсом отладки вместе с бесплатными компиляторами.
Если вы предпочитаете использовать простые 8-битные микросхемы, подумайте о чем-то из семейства freescale HCS08. Они могут выполняться из ОЗУ, и существует ограниченная по коду версия IDE и компилятора C, доступного бесплатно.
Я вполне уверен, что MPS430 должен быть в состоянии сделать это, но я никогда не делал это сам.
источник
Пропеллер загружает свою программу из внешнего хранилища.
источник
Я помню, как читал о загрузчике для AVR, который перепрошивал чип с файлом .hex (предположительно) с SD-карты. Я не могу найти первоисточник, но этот поиск Google вызывает пару интересных хитов. Да, я знаю, что это AVR, а не PIC, но вам может пригодиться, если PIC не сработает.
источник
Как отмечали другие авторы, вы не можете выполнять из ОЗУ на 8 или 16-битном PIC, потому что они используют архитектуру Гарварда (отдельный код и пространство данных). Практически целесообразно загружать программу с SD-карты и записывать ее в память кода, зависит от того, как часто вы собираетесь это делать.
Если вы пытаетесь создать динамическую среду, такую как ОС, которая постоянно накладывает программы, то нет. Но в моем случае у меня есть программа, которая при необходимости загружает драйверы с SD-карты объемом 2 ГБ. PIC24FJ256GB110 имеет минимум 10000 циклов стирания / записи. Даже если бы это делалось пять раз в день, вспышка длилась бы не менее 5 с половиной лет.
(Примечание: цифра в 10000 является минимумом. Типичная стойкость циклов стирания / записи может быть в пять раз больше - поэтому, если вы занимаетесь разработкой, вы, вероятно, можете перезагружать процессор 140 раз в день - каждые 3 1/2 минуты на восемь часов - и это может продолжаться еще год.)
источник
В моей школе мы использовали процессоры HC11 или HC12 с внешней оперативной памятью для загрузки и выполнения программ ... но я забыл название плат / комплекта :( В любом случае, микроконтроллеры Freescale HC (S) -линии обращаются к ОЗУ и ПЗУ одинаково , так что вы можете загрузить код в оперативную память и выполнить его.
Исходя из очереди
blalor
, лучшим решением может быть добавление на вашу плату кнопки, которая может перепрошивать PIC из данных, хранящихся на SD-карте, которую вы вставляете вместе с загрузчиком. Я не могу себе представить, какой код не подходит для больших PIC; если у вас есть статические данные (графика, текст, звук), сохраните их на внешнем хранилище.источник
Вы, вероятно, не можете выделить из ОЗУ, но для вашего приложения у вас может быть небольшой загрузчик во флэш-памяти, который затем может считывать данные с SD-карты в оставшуюся часть флэш-памяти. Я использовал этот подход с флэш-микросхемой, управляемой SPI, чтобы позволить загружать встроенное ПО с беспроводной линии связи и затем устанавливать его после получения полностью; Я не могу придумать ни одной конкретной причины, по которой он не будет работать с SD-картой, хотя SD-совместимый загрузчик может занимать некоторое место.
источник
Многие микроконтроллеры позволят вам сделать это, звучит как на картинке. то, что вы хотели бы сделать, это иметь загрузчик, который использует spi для чтения с SD-карты, скопировать программу, которая, вероятно, хочет быть известным или жестко закодированным именем файла, вероятно, в корневом каталоге, проанализировать этот файл в ram и затем перейти к программа в оперативной памяти. Контроллеры на базе ARM, безусловно, позволят вам сделать что-то подобное.
В качестве альтернативы можно было бы использовать загрузчик, считывающий SD-карту через spi, и вместо того, чтобы копировать в оперативную память и записывать ветвления на часть флэш-памяти. Вероятно, вы хотите иметь кнопку, если кнопка нажата при включении питания или сбросе, а затем загрузите новую программу с SD-карты, в противном случае, если подпись или контрольная сумма выглядит хорошо на этой загружаемой части флэш-памяти, а затем в загрузочной ветви этой части флэш-памяти. Или, может быть, если SD-карта присутствует, загрузите с нее, иначе ветвь загружаемой части флэш-памяти. Можно использовать этот метод на основе рук и AVR, возможно, даже на основе изображений, но мой опыт с фотографиями устарел. Msp430 Я бы также предположил. По сути, если вы можете перепрограммировать части флэш-памяти, с которой вы выполняете, с самого процессора микроконтроллера,
источник