Многие микроконтроллеры, например PIC18F , имеют флэш-память программ: «Флэш-память программ доступна для чтения и записи во время нормальной работы». Означает ли это, что я могу хранить некоторые пользовательские конфигурации в памяти программы?
Многие микроконтроллеры, например PIC18F , имеют флэш-память программ: «Флэш-память программ доступна для чтения и записи во время нормальной работы». Означает ли это, что я могу хранить некоторые пользовательские конфигурации в памяти программы?
Ответы:
Да, ты можешь. Я делал это много раз.
Тем не менее, есть некоторые недостатки, связанные с использованием отдельной EEPROM:
Многие PIC18 имеют память EEPROM размером до 1K. К сожалению, PIC18F46J50, на который вы ссылаетесь, нет. Если доступна ЭСППЗУ, то это гораздо лучший выбор, если она достаточно велика для ваших данных, поскольку ЭСППЗУ имеет минимум 1 000 000 циклов стирания / записи, а флэш-память - всего 10 000.
PIC18, как и большинство других микроконтроллеров, использует так называемую архитектуру Гарварда, что означает наличие физически отдельной адресуемой области для программ и данных (т.е. вы можете иметь программный адрес 4 и адрес данных 4, и они не совпадают). Поэтому вы не можете читать или записывать флэш-память, используя обычные методы на C или ассемблере.
Вместо этого в семействе PIC18 вы устанавливаете начальный адрес в 22-битном регистре TBLPTR. Для чтения байтов с флэш-памяти вы используете инструкцию TBLRD. Существует возможность автоматически увеличивать или уменьшать адрес после чтения, вам не нужно делать это вручную.
Для записи во флэш-память необходимо сначала удалить один или несколько 64-байтовых блоков флэш-памяти, которые будут перезаписаны. После повторной установки начального адреса в TBLPTR и значений в некоторых других регистрах для инициализации операции стирания прерывания отключаются, и затем необходимо записать 0x55, а затем 0xAA в регистр; это разблокирует команду стирания и требуется, чтобы предотвратить случайный стирание памяти ошибочным кодом. Наконец, выполняется команда, которая фактически выполняет стирание, с последующим повторным включением прерываний.
Запись во флэш-память аналогична стиранию, за исключением того, что размер блока меньше. Запись фактически выполняется с использованием инструкции TBLWT, которая также позволяет автоматически увеличивать / уменьшать, как инструкция TBLRD.
Помимо сохранения данных конфигурации, запись во флэш-память позволяет обновлять их встроенное ПО в полевых условиях, используя то, что называется «встроенным ПО по беспроводной сети». Вам необходимо иметь фиксированный блок прошивки, обычно в начале памяти программ, который может получать обновление от модуля Bluetooth, Wi-Fi, сотового модуля или даже проводного соединения, и обновлять флэш-память выше определенной точки в программа (например, «забор») с новым кодом. После завершения обновления инициируется сброс и вводится новый код.
Многие другие микроконтроллеры помимо семейства PIC имеют возможность обновлять свою флэш-память; большинство используют некоторую комбинацию регистров конфигурации, указатель адреса и специальные инструкции для выполнения задачи.