Відповіді:
Так, ти можеш. Я робив це багато разів.
Однак є деякі недоліки щодо використання окремого EEPROM:
Багато PIC18 мають пам'ять EEPROM, розміром до 1 К. На жаль, PIC18F46J50, на який ви посилаєтесь, не відповідає. Якщо EEPROM доступний, це набагато кращий вибір, якщо він достатньо великий для ваших даних, оскільки EEPROM має мінімум 1 000 000 циклів стирання / запису, а спалах - лише 10 000.
PIC18, як і більшість інших мікроконтролерів, використовує те, що називається Гарвардською архітектурою, тобто існує фізично окрема адресна область для програм і даних (тобто ви можете мати адресу програми 4 та адресу даних 4, і вони не однакові). Тому ви не можете читати або записувати флеш-пам’ять, використовуючи звичайні методи ні на мові С, ні на мові.
Натомість для сім'ї PIC18 ви встановлюєте стартову адресу в 22-бітному регістрі під назвою TBLPTR. Для читання байтів із спалаху використовуєте інструкцію TBLRD. Існує можливість автоматичного збільшення або зменшення адреси після прочитаного, не потрібно робити це вручну.
Щоб записати у флеш-пам'ять, спершу потрібно стерти один або кілька 64-байтових блоків флеш-пам’яті, які будуть записані. Після того, як знову встановити в TBLPTR стартову адресу і значення в деяких інших регістрах для ініціалізації операції стирання, переривання вимкнено, і тоді вам слід записати 0x55, а потім 0xAA в реєстр; це розблокує команду стерти і потрібна для запобігання випадковому вимиванню пам'яті коду помилки. Нарешті команда фактично виконати стирання виконується з подальшим повторним включенням переривань.
Запис у флеш-пам'ять схожий на стирання, за винятком того, що розмір блоку менший. Запис фактично виконується за допомогою інструкції TBLWT, яка також дозволяє автоматично збільшувати / зменшувати, як інструкція TBLRD.
Окрім збереження даних про конфігурацію, запис у флеш-пам’ять дозволяє оновлювати свою прошивку в полі за допомогою того, що називається "прошивка по повітрю". Потрібно мати фіксований блок мікропрограмного забезпечення, як правило, на початку програмної пам’яті, який може отримувати оновлення від модуля Bluetooth, Wi-Fi, стільникового модуля або навіть дротового з’єднання та оновлювати спалах вище певного моменту програма (наприклад, "паркан") з новим кодом. Після завершення оновлення ініціюється скидання, і новий код вводиться в експлуатацію.
Багато інших мікроконтролерів, крім сімейства PIC, мають можливість оновити свою флеш-пам’ять; Більшість використовують комбінацію регістрів конфігурації, адресного вказівника та спеціальних інструкцій для виконання завдання.