Оновіть ARM по повітрю


9

Ми створимо плату ARM з вбудованим GSM-модемом.
Ми хочемо мати можливість модернізувати програмне забезпечення ARM в ефірі.

Чи є якісь хороші, надійні рішення з відкритим кодом для цього?
Якщо ні, чи є платна ОС з цією функцією?


2
ARM досить загальний: є багато виробників, які вбудовують архітектури ARM, і деякі з них можуть забезпечити цю функцію.
clabacchio

1
Більш конкретна інформація про те, який чип / сімейство ARM ви плануєте використовувати, було б непогано. Багато, якщо не всі мікроконтролери Cortex-M підтримують запис, щоб миготіти від користувацького коду. Приклади з відкритим вихідним кодом існують, наприклад, Maple bootloader leaflabs.com/docs/bootloader.html , і я думаю, я бачив оновлення мікропрограмного забезпечення через радіозв'язок, який підтримується в якомусь квадрокоптері.
Торн

Наразі апарат ARM ми не вибрали;)
скачується

7
Велика проблема з оновленнями вбудованого програмного забезпечення полягає в тому, як змусити мікросхему перейти в режим оновлення, коли з прошивкою щось не так. Коли у вас є доступ до мікросхеми, ви можете скинути його і примусити штифт завантажувача високо, але як ви це будете робити в ефірі? Єдине надійне рішення, яке я можу собі уявити, - це мати другий чіп (не оновлюваний), який обробляє основну комунікацію, і може оновити основний чіп. Після вирішення цієї проблеми фактичне завантаження може бути таким же простим, як і використання (наприклад) завантажувача, вбудованого в мікросхему (наприклад, у всіх відомих LPC uC є послідовний завантажувач).
Wouter van Ooijen

2
@Hernan Це дозволило б зробити можливими тонкі режими відмов, як-от одна мікросхема (якось працює неправильний код), а інша - перезавантаження. Єдине справді надійне рішення - зберігати функції в одному чіпі настільки просто, що вам ніколи не потрібно буде оновлювати його.
Wouter van Ooijen

Відповіді:


9

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

Основний додаток містить три додаткові типи пакетів, які додаються до звичайного протоколу зв'язку, який включає в себе виявлення помилок та спробу повторення зверху:

  1. Команда для оновлення вбудованого програмного забезпечення очищає зарезервовану область пам'яті у зовнішньому спалаху SPI. Він повертає помилку, якщо пристрій працює від резервного акумулятора або працює від зовнішнього живлення, але стан заряду акумулятора нижче 25%.

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

  3. Команда оновлення вбудованого програмного забезпечення включає довжину, яку повинна отримувати вбудована програма разом з CRC32 всього зображення для подальшої перевірки. Якщо це відповідає вмісту зовнішньої флеш-пам’яті, а умови живлення все одно добре, однакова довжина, і CRC32 переноситься в область EEPROM разом з «магічним номером», щоб вказати, що оновлення програмного забезпечення очікує на розгляд.

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

  5. Завантажувач (який знаходиться у захищеній від запису спалах ARM) бачить магічне число у EEPROM та ще раз перевіряє CRC32 зображення. Якщо все гаразд, воно переносить зображення із зовнішнього Flash у основну програму області спалаху ARM.

  6. Інформація, що очікує на оновлення, очищається від EEPROM, а жорсткий цикл змушує інше перезавантажити. Цього разу завантажувач нормально запустить основну програму.

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


1

Ви працюєте з Linux чи RTOS, чи голим металом? Якщо за допомогою Debian ви можете зробити знімок поточної файлової системи, здійснити оновлення за допомогою "apt-get", а потім зберегти або відкинути зміни залежно від того, працював він чи ні.


У нас є Linux та голий метал залежно від програми ;-)
hotips

1
Якщо у вас є Linux, ви можете використовувати багато цієї інфраструктури. Те, як я обробляю оновлення в моєму поточному проекті, це створити .deb файли для користувацьких додатків, а потім використовувати apt-get update для оновлення системи. Я також експериментую з btrfs. Ця файлова система дозволяє робити знімки. Тож мій план полягає в тому, щоб зробити знімки потрібних каталогів, спробувати і оновити, і якщо це не спрацювало, відновіть знімок. Якщо ви перебуваєте на чистому металі, вам, ймовірно, потрібно буде скористатися звичайним підходом подвійної пам’яті, одне зображення для останнього робочого коду та інше для щойно завантаженого коду.
fred basset
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.