Чтобы обогнать конкурентов, производители внедряют инновационные решения и обеспечивают их функциональную гибкость для интеграции новых технологий. Разработчики должны создавать универсальную продукцию, отвечающую требованиям экосистемы интернета вещей, новым стандартам и нормативным требованиям.
Обновления встраиваемого программного обеспечения, или прошивок (firmware), не только обеспечивают соответствие требованиям на начальном этапе освоения интернета вещей на предприятиях заказчиков, но и новые функции, а также устранение любых проблем с прошивкой при ее эксплуатации. Устройства с энергонезависимой памятью, например NOR Flash, как правило, используются в качестве средств хранения микропрограммного кода благодаря их высокой надежности и возможности перепрограммирования. Производители могут легко обновлять функции устройств путем перезаписи части кода в энергонезависимой памяти. При этом следует учитывать три аспекта: размер обновляемого кода; частоту обновлений и затрачиваемое на них время.
Размер обновляемого кода
На начальном этапе проектирования IoT-устройства следует определить, какая часть кода будет обновляться, и ее размер. В отличие от необновляемой части, этот фрагмент встроенной программы должен храниться в отдельном месте флэш-памяти NOR. Обновление любого фрагмента этой памяти начинается со стирания, после чего осуществляется программирование. Флэш-память NOR состоит из секторов и блоков разного размера. Например, микросхема 64-Мбит флэш-памяти SST26VF064B, реализованная по технологии SuperFlash, состоит из однородных секторов по 4 Кбайт (32762 бит), информацию которых можно стирать и перепрограммировать в индивидуальном порядке. Размер одного блока этой памяти составляет 8, 32 и 64 Кбайт. Таким образом, один 8-Кбайт блок состоит из двух секторов, один 32-Кбайт блок – из восьми секторов, а 64-Кбайт блок – из 16 секторов.
Рис. 1. Организация ИС памяти SST26VF064B из 8-Кбайт блоков, двух 32-Кбайт блоков и 126 64-Кбайт блоков
На рисунке 1 показана структура ИС памяти SST26VF064B с блоками размером 8, 32 и 64 Кбайт. Каждый из них можно оснастить индивидуальной защитой. Перед обновлением какого-либо фрагмента флэш-памяти защита с этих блоков снимается, чтобы обеспечить стирание данных и программирование. Завершив обновление, необходимо снова установить защиту этих блоков во избежание непреднамеренной записи или стирания этих фрагментов. Сектора и блоки обновляемой части прошивки должны обеспечить достаточно хорошую гибкость для обновления до максимального количества функций. Поскольку скорость обновлений определяется числом секторов и блоков, которые требуется стереть и перепрограммировать, следует найти компромисс между скоростью и гибкостью при проектировании обновляемой части встраиваемого ПО.
Рис. 2. Структура памяти в необновляемых и обновляемых частях
На рисунке 2 представлен пример организации обновляемой и необновляемой частей памяти. Необновляемые части, например загрузочный код, хранятся в защищенных областях запоминающего устройства. Обновляемые части микропрограммы, к которым относятся код с функциями, разделены на блоки, размеры которых определяются требованиями к гибкости. Обновляемые файлы изображений хранятся в блоках большего размера, а обновляемые переменные или параметры – в блоках сравнительно меньшего размера.
Частота обновлений
Главным ограничением частоты обновления прошивки является срок службы памяти в каждом конкретном случае. Срок службы памяти SST26VF064B, построенной с использованием технологии SuperFlash, составляет 100 тыс. циклов. Это значит, что каждый сектор можно программировать и стирать не более 100 тыс. раз. На первый взгляд, количество обновлений прошивки равное 100 тыс. представляется чересчур большим, но поскольку многие устройства интернета вещей собирают данные и хранят их во флэш-памяти NOR, это обстоятельство следует учитывать при выборе максимального количества рабочих циклов. Необходимо обеспечить такое количество секторов памяти, которое соответствует ее сроку службы.
Рассмотрим следующий пример. Предположим, что IoT-устройство собирает за один прием и хранит 16 байт информации. При этом ожидается, что за срок службы изделия эта операция повторится 100 млн раз. В таком случае количество секторов рассчитывается исходя из того, что размер одного сектора составляет 4 Кбайт.
Предположим, что в секторе все ячейки с адресами используются для хранения информации. За один раз поступают 16 байт данных, которые записываются в новую ячейку до тех пор, пока сектор полностью не заполнится (например, сначала заполнятся ячейки с адресом 0x0000-0x000F, затем 0x0010-0x001F, 0x0020-0x002F и т.д.).
В сектор памяти объемом 4 Кбайт данные размером 16 байт можно записать 4 Кбайт/16 байт = 256 раз, пока он не заполнится. Поскольку срок службы одного сектора составляет 100 тыс. циклов, одним сектором можно воспользоваться для сбора и хранения данных 25,6 млн раз.
Если приложению необходимо собрать данные и сохранить их 100 млн раз, потребуется 100 млн/25,6 млн = 3,9 сектора. Следовательно, в рассматриваемом примере необходимо задействовать четыре сектора для хранения 16 байтов в течение всего срока эксплуатации приложения.
Разработчики устройств интернета вещей осуществляют аналогичные расчеты, чтобы определить количество секторов и блоков для записи требуемого количества информации, учитывая при этом срок службы флэш-памяти NOR.
Скорость обновлений
Скорость обновлений рассчитывается исходя из числа блоков и секторов, которые необходимо стереть и перепрограммировать. Предположим, что требуется перепрограммировать код/данные прошивки объемом 1, 2 или 4 Мбит, которые хранятся в нескольких 64-Кбайт блоках ИС SST26VF064B. Код/данные могут состоять из кода прошивки, файлов изображения или другого кода, которые подлежат обновлениям. При обновлении флэш-памяти осуществляется определенная последовательность команд, которая начинается со снятия защиты с блоков памяти, их стирания и программирования с использованием обновленных данных или кода, после чего снова устанавливается защита. В таблице 1 перечислена последовательность команд при обновлении памяти ИС SST26VF064B объемом 1, 2 или 4 Мбит.
Из таблицы 1 видно, что наиболее значительное время требуется для стирания и программирования. ИС SST26VF064B использует технологию SuperFlash, которая обеспечивает высокую скорость стирания. В таблице 2 сравниваются значения времени стирания и программирования SuperFlash ИС и стандартной микросхемы флэш-памяти.
Намного большая скорость стирания памяти SuperFlash по сравнению со стандартной флэш-памятью позволяет значительно сократить время обновления. Максимальная тактовая частота ИС SST26VF064Bсоставляет 104 МГц, максимальное время стирания сектора – 25 мс, максимальное время стирания блока – 25 мс, а максимальное время программирования страницы – 1,5 мс.
Кроме того, требуется задержка 12 нс между последующими командами во флэш-памяти, работающей с тактовой частотой 104 МГц. Используя последовательность команд, перечисленных в таблице 1, наряду со значениями времени стирания и программирования, можно рассчитать время для обновления памяти SuperFlash объемом 1, 2 и 4 Мбит и стандартной памяти. Данные, приведенные в таблицах 3–4, позволяют оценить скорость выполнения обновлений с тем, чтобы минимизировать время простоя IoT-устройств.
Выводы
IoT-устройства должны обладать достаточной функциональной гибкостью, обеспечиваемой путем обновления кода прикладной программы и данных. При проектировании IoT-устройств необходимо решить такие вопросы как размеры обновляемого кода, частота обновлений и их скорость. Выбор энергонезависимой памяти играет важную роль в расчете временного режима и скорости обновлений кода.
Таблица 1. Последовательность команд при обновлении флэш-памяти объемом 1, 2 и 4 Мбит
Шаг
|
Последовательность команд
|
Число тактов
|
1 |
SPI_WREN |
8 |
2 |
SPI_Enable_Quad_IO |
8 |
3 |
SQI_WREN |
2 |
4 |
SQI_WriteBlockProtectionRegister (снятие защиты с части памяти) |
38 |
5 |
SQI_BlockErase 64 KBblocks (стирание блока 64 Кбайт) |
2 |
6 |
SQI_WREN |
8 |
7 |
Ожидание в течение 25 мс для завершения операции стирания памяти SuperFlash (или 3000 мс в случае стандартной флэш-памяти)
Повтор шагов 5–7, пока не сотрется требуемый объем памяти Для стирания 1 Мбит данных требуется повторить шаги 5–7 два раза (1024 ∙ 1024/(64 ∙ 1024 ∙ 8 = 2) Для стирания 2 Мбит данных требуется повторить шаги 5–7 четыре раза (2 ∙ 1024 ∙ 1024/(64 ∙ 1024 ∙ 8 = 4) Для стирания 4 Мбит данных требуется повторить шаги 5–7 восемь раз (4 ∙ 1024 ∙ 1024/(64 ∙ 1024 ∙ 8 = 8) |
|
8 |
SQI_WREN |
2 |
9 |
SQI_Pageprogramcommandfollowedbyprogramming 256 bytesofdata (260 multipliedby 2) – после команды о программировании страницы следует программирование 256 байт данных (260 умножаются на 2) |
520 |
10 |
Ожидание в течение 1,5 мс для завершения программирования страницы памяти SuperFlash (или 5 мс в случае стандартной флэш-памяти)
Повтор шагов 8–10, пока не запишутся все данные Для программирования 1 Мбит данных требуется повторить шаги 8–10 512 раз (1024 ∙ 1024/(8 ∙ 256) = 512) Для программирования 2 Мбит данных требуется повторить шаги 8–10 1024 раза (2 ∙ 1024 ∙ 1024/(8 ∙ 256) = 1024) Для программирования 4 Мбит данных требуется повторить шаги 8–10 2048 раз (4 ∙ 1024 ∙ 1024/(8 ∙ 256) = 2048) |
|
11 |
SQI_WREN |
2 |
12 |
SQI_WriteBlockProtectionRegister (включение защиты части памяти) |
38 |
Таблица 2. Время программирования и стирания ИС SST26VF064B и стандартной микросхемы флэш-памяти
|
SST26VF064B |
Стандартная микросхема флэш-памяти |
Стирание сектора |
25 мс (макс.) |
150–3000 мс |
Стирание блока |
25 мс (макс.) |
750 мс…3 с |
Стирание кристалла |
50 мс (макс.) |
15–80 с |
Программирование страницы |
1,5 мс (макс.) |
1–5 мс |
Таблица 3. Количество времени для обновления памяти SuperFlash объемом 1, 2 и 4 Мбит
Результаты расчета
|
Время
|
Время стирания блока (макс.) |
25 мс |
Время программирования страницы (макс.) |
1,5 мс |
Тактовый период при частоте 104 МГц |
9,6 нс |
Задержка между последующими командами при 104 МГц |
12 нс |
Время1. Время выполнения команд 1–4 = 56 тактов ∙ период + 3 ∙ время задержки |
573,6 нс |
Время2. Время выполнения команд 5–7 = 10 тактов ∙ период + 2 ∙ время задержки + 25 мс в ожидании стирания блока |
25000120 нс |
Время. Время выполнения команд 8–10 = 522 такта ∙ период + 1 ∙ время задержки + 1,5 мс в ожидании программирования страницы |
1505023,2 нс |
Время4. Время выполнения команд 11–12 = 40 тактов ∙ период + 1 ∙ время задержки |
396 нс |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 1 Мбит: время1 + 2 ∙ время2 + 512 ∙ время 3 + время4 |
0,820573088 с |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 2 Мбит: время1 + 4 ∙ время2 + 1024 ∙ время 3 + время4 |
1,641145206 с |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 4 Мбит: время1 + 8 ∙ время2 + 2048 ∙ время 3 + время4 |
3,282289443 с |
Таблица 4. Количество времени для обновления стандартной флэш-памяти объемом 1, 2 и 4 Мбит
Результаты расчета
|
Время
|
Время стирания блока (макс.) |
3000 мс |
Время программирования страницы (макс.) |
5 мс |
Тактовый период при тактовой частоте 104 МГц |
9,6 нс |
Задержка между командами при 104 МГц |
20 нс |
Время1. Время выполнения команд 1–4 = 56 тактов ∙ период + 3 ∙ время задержки |
597,6 нс |
Время2. Время выполнения команд 5–7 = 10 тактов ∙ период + 2 ∙ время задержки + 3000 мс в ожидании стирания блока |
3000000136нс |
Время. Время выполнения команд 8–10 = 522 такта ∙ период + 1 ∙ время задержки + 5 мс в ожидании программирования страницы |
5005031,2 нс |
Время4. Время выполнения команд 11–12 = 40 тактов ∙ период + 1 ∙ время задержки |
404 нс |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 1 Мбит: время1 + 2 ∙ время2 + 512 ∙ время3 + время4 |
8,562577248 с |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 2 Мбит: время1 + 4 ∙ время2 + 1024 ∙ время3 + время4 |
17,12515349 с |
Общее время на выполнение всех команд для стирания блоков и программирования данных объемом 4 Мбит: время1 + 8 ∙ время2 + 2048 ∙ время3 + время4 |
34,25030599 с |