Оновлення прошивки від пуль


16

Які методи використовуються для того, щоб користувач міг безпечно оновити прошивку пристрою після продажу? Я хочу зробити це за допомогою мікроконтролера Cortex M3 / 4, але я думаю, що методи для будь-якого мікроконтролера повинні робити.

Переважно з найменшою кількістю додаткових компонентів, звичайно.

Відповіді:


16

Використовуйте чіп, у якого вдвічі більше обсягу флеш-пам’яті, який вам знадобиться для вашого коду. Таким чином ви можете отримати нову прошивку до цієї пам’яті, залишаючи стару, якщо щось піде не так.

Після розшифрування та перевірки контрольних сум на новій прошивці завантажувач може скопіювати її до остаточного місця, замінивши стару. Якщо в цій частині щось піде не так, після важкого скидання завантажувач повинен побачити, що нова прошивка недійсна (запустивши контрольну суму ще раз) та повторіть копіювання.

Це найпростіший і найбезпечніший спосіб, який я знаю. Він також вимагає невеликого коду у завантажувачі та не потребує дублювання будь-якої функціональності між основною програмою та завантажувачем (вам не потрібна будь-яка логіка зв'язку в завантажувачі).


10
Як користувач електроніки, можу додати, що було б непогано мати кнопку десь утримувати під час завантаження, яка б завантажувала стару прошивку, на випадок, якщо нова має правильну контрольну суму, але саме програмне забезпечення має помилку.
Zan Lynx

4
«Проблема», яку я бачу в цьому рішенні, полягає в тому, що вам потрібна якась таблиця переміщення або повний незалежний код позиції. Інакше ваш код не запуститься.
Ніко Ерфурт

2
@Masta - Ви не розумієте частину, куди прошивки скопіюються в остаточне (звичайне) місце розташування.
Кевін Вермер

3
@jpc - Ми використовуємо цю техніку із зовнішнім серійним мікросхемою Flash на деяких внутрішніх інструментах на роботі. Вам не потрібно мати мікроконтролер, який має більше ніж двічі спалаху, якщо у вас є місце для 8-контактної частини SOIC або QFN. Серійні флеш-пам’яті 1 Мб можуть бути меншими за долар, тому може пройти цей маршрут дешевше, ніж оновити мікроконтролер в деяких випадках!
Кевін Вермер

@zan - Так, ми також це використовуємо. Одна з проблем або переваг полягає в тому, що при повторному копіюванні старого програмного забезпечення пристрій повертається до значень за замовчуванням (у нас немає EEPROM на нашому мікрофоні; ми зберігаємо дані конфігурації, такі як MAC-адреса та IP-адреса, у Flash-записаний Flash). Для нас це дозволяє легко знайти плату, коли ми забудемо IP-адресу.
Кевін Вермер

12

Використовуйте завантажувач і кілька Кб додаткового спалаху.

Оновлення виконується завантажувачем, надсилаючи якусь спеціальну команду через UART, USB, I2C або інший протокол. Оновлюється лише основний код - код завантажувача ніколи не торкається, за винятком зовнішнього програміста (наприклад, JTAG / PICkit для PIC тощо).

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

Прапор може бути встановлений в якомусь байті десь, що запобігає неправильному виконанню основного коду, оскільки він не був повністю оновлений.


Ви також можете змусити завантажувач завантажитися, якщо завантаження відбувається через включення живлення. Це допоможе, якщо ви завантажуєте погану прошивку, яка негайно виходить з ладу. Запуск завантажувача потребуватиме тайм-ауту, щоб запустити програму через X секунд.
Роберт

Це гарна ідея, якщо ви можете використовувати простий протокол (наприклад, асинхронний серій, TTL або 485). Для більш задіяних випадків (SD-карти, GPRS, USB) я не включав би складний код підтримки в (не оновлений) завантажувач. Ethernet OTOH (сирий UDP або TFTP) досить простий для цього.
jpc

3

Якщо ваш пристрій порівняно дорогий і ви можете дозволити собі витрати (а ви, клієнти дбаєте про оновлення), ви можете це зробити ...

(як правило, ця техніка вимагає або зовнішнього зберігання, або нечесного використання jtag ..)

Майте фіксований мікропрограмний мікрофон (на зразок невеликого ПОС), який може зупинити систему та перепрограмувати її.

оскільки ви не можете змінити прошивку "оновлення процесора", вона ніколи не може піти не так.

1) користувач може оновити пристрій

2) якщо оновлення не вдалося, вони завжди можуть спробувати ще раз. Це не можна цеглити

3) навіть коли ваш цільовий пристрій не підтримує завантажувач (він просто хоче завантажитися і запустити), ви все одно можете змусити його робити те, що ви хочете.

працює для FPGA, DSP та інших дивовижних цілей.

Може мати по-справжньому інтерфейс користувача (навіть PIC може запускати веб-сервер ....)


2

Переконайтеся, що ваш продукт має якийсь простий послідовний інтерфейс, бажано EIA232. Нестандартний роз'єм добре, якщо у вас немає місця для DB-9. Наприклад, роз'єм TRS - це все, що потрібно для TxD, RxD та землі.

При першому програмуванні пристрою включіть завантажувач . Це повинно бути максимально простим , тому що рано чи пізно ви хочете оновити сам завантажувач, якщо йому знадобляться нові функції. (Ви, мабуть, не можете навіть оновити його)

Потім роз'єм TRS. Використовуйте гніздо з перемикачем, щоб ви могли виявити, коли є роз'єм. Просто перевірте перезавантаження та запустіть завантажувач, якщо плагін присутній, інакше запустіть програму. Таким чином завантажувач і програма програми користувача залишаються добре розділеними. (Перевірка насправді є частиною завантажувача; він нам знадобиться незалежно від версії програми, інакше ми не зможемо ввести завантажувач!)


Чому ви коли-небудь хочете оновити завантажувач? Як би ви переконалися, що процес оновлення не затулить пристрій? Якби це могло, які нові функції були б настільки переконливими, що ви ризикуєте заборонити оновлення?
Кевін Вермер

5
@Kevin - Я думаю, він мав на увазі, що завантажувач повинен бути настільки простим, що ви ніколи навіть не задумаєтесь про "оновлення".
jpc

@jpc - Ах, ти маєш рацію, неправильно це зрозумів. Ми згідні!
Кевін Вермер

1

Яке обладнання буде доступне для "вихователя"? ПК, USB-накопичувач, мікро-карта SD?

Одним із способів може бути додаток у знімному елементі (USB-накопичувач, SD-карта тощо). Чіп завантажує свою програму з елемента. Ваш випускник просто поміняє предмет і перезавантажиться.

Мікроконтролер ARM і Cortex, які я знаю (NXP, Atmel), мають вбудований послідовний завантажувач, тому якщо ваш оновник приходить із ПК та послідовним кабелем (а ви домовились про інтерфейс COM-порту), він може просто завантажити ваш оновлення.


Отже, просто підключивши штифти UART до порту, підключившись до COM-порту та ПК, ви можете прошивати прошивку без коду на mcu взагалі? Гарна порада.
Імброндір

Перевірте таблицю даних, розділ «завантажувач». Щоб зробити це дійсно «від руки», вам знадобиться спосіб 1. скинути чіп; 2. активуйте завантажувач (чіп перевіряє кератиновий штифт). Це можна зробити за допомогою перемикача та (перезавантаження) перемикача, але більш зручним способом (особливо на вашому столі) є використання двох ліній рукостискання, щоб зробити трюк «від руки». Більшість програм для завантаження з ПК (наприклад, flashmagic, lpc21isp) можуть зробити для вас магію рукостискання (якщо ви правильно проводите лінії рукостискання).
Wouter van Ooijen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.