Чи може флеш-пам’ять програми мікроконтролера використовувати для зберігання налаштувань користувача?


9

Багато мікроконтролерів, наприклад, PIC18F , мають флеш-пам'ять програми: "Пам'ять програми Flash читається та записується під час нормальної роботи". Чи означає це, що я можу зберігати деякі конфігурації користувачів у пам'яті програми?

Відповіді:


12

Так, ти можеш. Я робив це багато разів.

Однак є деякі недоліки щодо використання окремого EEPROM:

  1. Кількість записів у програму флеш-пам’яті значно менша, ніж дані EEPROM.

  2. Процесор вийде на обід під час стирання та записує час.

  3. Спалах програми стирається блоками. Ви не можете просто оновити один байт. Зазвичай я використовую схему кешування блоків для вирішення цього питання.


Ідеально, ви, здається, якось знаєте, що моє питання справді "чому потреба в EEPROM, коли ви можете використовувати пам'ять програми як для програмних, так і для користувачів даних" :)
student1

Олін, чи стирається весь Flash, коли в ПІК записується нова версія прошивки? Чи є хороший спосіб запобігти стирання конфігурації користувача (або даних про калібрування) у Flash під час завантаження прошивки? Це стосується зручності під час розробки прошивки. Я б міг уявити, що конфігурація користувача зберігатиметься в останньому блоці або Flash.
Нік Алексєєв

6
@ Nick: Це залежить від програміста PIC, який ви використовуєте. Багато хто, в тому числі всі мої, роблять об'ємну стирання, тому дані калібрування будуть видалені. Я декілька разів писав спеціальну програму програмування, яка читала дані калібрування, чи велика маса стиралася, а потім записувалась дані калібрування, як частина звичайного процесу програмування. Деякі програмісти Microchip, можливо, зможуть оновити лише частини пам'яті програми. Зауважте, що якщо ви ввімкнули захист коду, програміст повинен виконати об'ємне видалення.
Олін Латроп

На не Гарвардських процесорах (я думаю про MSP430) ви можете скопіювати код в оперативну пам’ять, і вскочити в оперативну пам’ять і запустити, поки відбувається запис флеш / записування. Я використовував це для завантажувача, щоб одночасно писати та отримувати нові дані з радіо.
відмітки

@mark: Так, це також працює на PIC32, де також можна виконати оперативну пам'ять. Насправді це швидше.
Олін Латроп

6

Багато 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, мають можливість оновити свою флеш-пам’ять; Більшість використовують комбінацію регістрів конфігурації, адресного вказівника та спеціальних інструкцій для виконання завдання.


Та метод "прошивки по повітрю" виглядає дуже цікаво. Чи усуває це потреба в системному програмуванні (ISP)?
студент1

@ student1 Це не знімає потреби в початковому програмуванні мікросхеми через інтерфейс ISP, тому що ви повинні поставити деякі мікропрограми на мікросхемі, щоб потім обробляти оновлення. Мікроконтролери ATmega, що використовуються на платах Arduino, вже мають на собі цей тип вбудованого програмного забезпечення, який називається Bootloader, і тому вам не потрібно використовувати інтерфейс ISP для завантаження ескізів на Arduino. Однак якщо ви хочете оновити сам завантажувач, для цього потрібен інтерфейс провайдера. Цей завантажувач обробляє лише оновлення через USB, тому насправді це не «прошивка по ефіру».
tcrosley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.