Научная статья на тему 'Исследование влияния на производительность и надежность систем мониторинга алгоритма сохранения данных на накопитель microSD'

Исследование влияния на производительность и надежность систем мониторинга алгоритма сохранения данных на накопитель microSD Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
168
294
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Исследование влияния на производительность и надежность систем мониторинга алгоритма сохранения данных на накопитель microSD»

УДК 681.3.071

1Плаксин И.М., * 2Чувыкин Б.В.

1ОАО «НИИФИ», Пенза, Россия

2ФГБОУВПО «Пензенский государственный университет», Пенза, Россия

ИССЛЕДОВАНИЕ ВЛИЯНИЯ НА ПРОИЗВОДИТЕЛЬНОСТЬ И НАДЕЖНОСТЬ СИСТЕМ МОНИТОРИНГА АЛГОРИТМА СОХРАНЕНИЯ ДАННЫХ НА НАКОПИТЕЛЬ MICROSD

Введение. К системам, предназначенным для сбора данных о состоянии критически важных параметров технически сложного и опасного в эксплуатации объекта, предъявляется ряд требований, которые обеспечивают его безопасную и надежную эксплуатацию. Необнаруженная неисправность такого объекта может повлечь огромные экономические потери, и даже привести к человеческим жертвам. В данной статье рассмотрим алгоритмический способ повышения производительности, качества и надежности мониторинга системы телеметрии корабельной артиллерийской установки С-098 за счет совершенствования алгоритма сохранения данных на накопитель. Алгоритмическое решение, рассмотренное в данной статье, может найти применение во многих системах, где предъявляются высокие требования к скорости сохранения данных при низкой стоимости компонентов системы.

В приложениях, где необходимо реализовать быстрый сбор или прием данных с параллельной записью этих самых данных в энергонезависимую память, а размер оперативной памяти не позволяет временно сохранить все поступающие данные за нужный период с последующей записью, происходит потеря данных, что в некоторых случаях может привести к опасной ситуации, например на технически сложных военных и промышленных объектах (ТСО). Системам мониторинга часто приходится контролировать множество параметров, которые могут динамически меняться, а точность сохранения динамических данных позволит решить важные технические проблемы, избежать аварий. Если процесс длится порядка миллисекунды, то для понятия характера процесса необходимо не меньше пятидесяти точек, чем больше -тем точнее будет проанализирован процесс. Контроль таких процессов порождает большой поток измеренных данных, недорогой беспроводной элемент системы мониторинга не в состоянии в режиме реального времени передать всю эту информацию. Поскольку для таких систем обычно применяют микроконтроллеры, и объем потока данных порой превышает десятки, а то и сотни мегабайт, также не представляется возможным их временное хранение в оперативной памяти.

Система телеметрии С-098 разработана в соответствии с предъявляемыми требованиями к современным системам мониторинга, такими как невысокая стоимость, низкое энергопотребление для автономной работы, универсальность для применения в различных проектах. При использовании системы для мониторинга динамики процессов, протекающих за миллисекунды, было выявлено, что используемые библиотечные функции работы с применяемым накопителем не позволяют достичь необходимой скорости оцифровки данных скоротечных процессов без потерь информации.

Основная часть. Накопителем данных в системе С-098 является флешь-память стандарта microSD, как и во многих других аналогичных системах. Такой тип памяти характеризуется как быстродействующий, универсальный, дешевый, надежный и маломощный. Карта снабжена собственным контроллером и специальной областью, способной записывать информацию таким образом, чтобы «незаконное» чтение информации было невозможно, в соответствии с требованиями стандарта «Secure Digital Music Initiative»[1]. Для записи в защищённую область используется специальный протокол записи, недос-

тупный для обычных пользователей. Стандартной для карты microSD является файловая система FAT (до

2 ГБ включительно — FAT16, до 32 ГБ включительно — FAT32, более 32 ГБ — exFAT).

Рассмотрим подробнее обозначенную выше проблему и обозначим невозможность ее решения иными способами. Смена карты памяти на другой тип накопителя ведет к увеличению цены или габаритов. Работа с памятью microSD осуществляется по стандартному интерфейсу SPI, скорость интерфейса ограничена скоростью маломощного микроконтроллера. Микроконтроллер представляет собой оптимальное соотношение цена-скорость-энергопотребление. При работе microSD объемом 2 гигабайта по интерфейсу SPI с использованием стандартной библиотеки FAT16 запись на накопитель не успевает сохранять данные от АЦП, снимающего данные с частотой выше 20 КГц. Это происходит из-за того, что запись происходит поблочно, внутренний контроллер microSD ведет свой учет памяти (адресация кластеров, секторов, свободное и занятое место), библиотечная функция записи в файловой системе FAT использует поблочное сохранение с большим числом служебных команд. Изменить что-либо в работе внутреннего контролера устройства не представляется возможным. Работа с картой ограничена небольшим набором команд. Выходом из сложившейся ситуации для уменьшения времени записи данных на microSD при работе по интерфейсу SPI явилась разработка алгоритма многоблочной записи на базе поблочной с минимальными затратами на обслуживание файловой системы.

Разработанный алгоритм позволяет существенно ускорить запись данных на microSD, не нарушая целостность данных и представление данных в виде объекта (файла) файловой системы FAT16(32) [2] . Использование библиотечной функции записи f_write имеет существенный недостаток в виде длительного периода записи данных. Причиной этого недостатка является то, что даже запись большого числа блоков реализована через команду поблочной записи. Таким образом при записи большого количества блоков тратится много времени на повторную подготовку к записи.

Рассмотрим временные характеристики накопителей microSD, хотя они и незначительно отличаются у разных производителей и в разных сериях. Процесс записи блока происходит следующим образом: после подготовки microSD к приему (включение питания и выставление сигнала в 0 на линии CS) карта восприимчива только к командам CMD0, CMD1 и CMD58, любые другие команды будут отклонены [3] . Для инициализации необходимо послать команду CMD1. Чтобы определить, завершена ли инициализация,

ведущий контроллер должен повторять посылку команды CMD1 и проверять ответ. Как только карта успешно закончила инициализацию, бит "In Idle State" в ответе будет равен 0x00. Процесс инициализации может занять в зависимости от емкости накопителя до нескольких сотен миллисекунд, поэтому далее при описании алгоритма записи будем подразумевать, что инициализация проведена заранее и далее она не будет упомянута. После окончания инициализации будут приниматься и команды чте-ния/записи. На рисунке 1 приведена диаграмма состояний линий SPI DI (Data Input) и DO (Data Output) при записи одного блока. Запись одного блока начинается c посылки команды CMD24 (0x58) (библиотечный алгоритм). После этого устройство в течение некоторого времени выдает сообщение о подтверждении приема команды "Cmd Response" или ошибку.

Dl

DO

і 1byte

CMD24 Data Packet

Сіті Data / Busy 1

Res|). Resp.

Рисунок 1 - Диаграмма команды одноблочной записи

Обычно после этого многим накопителям надо дать незначительное время для самонастройки (посылка одного - двух байт тактирования 0xFF, "dummy" байт). Далее надо передать устройству указатель начала данных 0xFE. Затем начинается передача блока данных, объем которых, как было сказано, зависит от размера памяти накопителя. Стоит отметить, что данные в это время сохраняются во временной памяти контроллера устройства и могут быть потеряны в случае отключения питания. Для microSD объемом 2 гигабайта размер блока составляет 512 байт. По завершению передачи блока выдается сообщение "Data Response", и внутренний контроллер начинает физическую запись, переходя в состояние "Busy". Длительность этой записи трудно поддается детерминации и зависит от многих факторов. Размер этой задержки и составляет значительную долю всей длительности записи блока, и полностью избежать этой задержки нельзя, возможно только уменьшить. Внутренний контроллер накопителя представляет собой черный ящик для пользователя, поскольку это одна из основ защиты от несанкционированного чтения. Производители стараются держать в секрете особенности работы внутреннего контроллера. Известно, что перед физическим сохранением данных внутренний контроллер выполняет набор базовых команд, как, например, анализ свободного места, перезапись таблицы адресов и т.д. Многоблочная запись позволяет существенно сократить длительность выполнения базовых команд, так как некоторые из них выполняются единожды в самом начале, а некоторые вообще не требуются. Приведенный ниже алгоритм использует многоблочную запись, некоторые функции библиотеки FAT16(32), которые не влияют на быстродействие записи. Стандартная библиотека содержит много задержек, обусловленных адресацией указателя файла, работой с секторами и кластерами. В нашем алгоритме большинство этих задержек исключено, при этом запись производится в файл FAT16(32) без нарушения целостности среды. Из стандартного алгоритма сохранены начальные и конечные этапы формирования файла.

Теперь рассмотрим основные моменты разработанного алгоритма. В начале монтируем файловую систему FAT (f_mount) и открываем файл (f_open) [2]. Устанавливаем сигнал на линии CS в 0, тем самым занимая интерфейс SPI для работы с накопителем. После этого посылаем команду многоблочной записи CMD25 (0x59) и дожидаемся ответа от microSD. Далее в зависимости от устройства необходимо послать от одного до трех байт задержки 0xFF. Вышеописанные действия совершаются единожды, в отличие от одноблочной записи. После этого запускаем сбор данных, и как только их количество превысит размер блока, можно приступать к записи. Поскольку непрерывное получение данных для нашей системы телеметрии - приоритетное направление, их сбор лучше осуществлять по прерыванию через прямой доступ к памяти (DMA). Таким образом, микроконтроллер большую часть времени тратит на работу с накопителем. Последующие команды заключены в цикл, из которого можно выйти по достижении заданного размера файла, по внешнему прерыванию, по команде или, например, по ошибке. В начале цикла устанавливаем указатель (token) начала блока мультиблочной последовательности 0xFC. Затем побайтно передаем данные одного блока. После передачи блока данных необходимо послать два байта ожидания 0xFF, затем накопитель выставит сигнал Busy, что в свою очередь означает, что внутренний контроллер устройства начал физическую запись информации. Как только устройство сообщит, что запись закончена, увеличиваем размер файла на размер блока и проверяем необходимость прерывания цикла. Если по какой-либо причине необходимо прервать сбор данных, посылаем накопителю указатель завершения мультиблочной записи 0xFD. Далее необходимо дать два байта задержки 0xFF, за которые microSD завершит формирование файла. Как только накопитель сообщит о завершении операций, можно выставлять сигнал CS в 1, освобождая SPI. Для успешного выполнения алгоритма необходимо организовать буфер для хранения данных, которые необходимо записать, размером в 2-3 раза превышающий размер блока накопителя. Это требуется для того, чтобы постоянно получаемые данные не потерялись при переполнении буфера, когда microSD выполняет внутренние недетерминированные длительные операции.

Описанный выше алгоритм приведен на рисунке 2 в виде блок -схемы.

На рисунке 3 приведены циклограммы работы SPI при записи блока 512 байт на microSD Trancendent с объемом 2 гигабайта с использованием функции стандартной библиотеки. На рисунке 4 приведена та же циклограмма, но с использованием разработанного алгоритма. Как видно из рисунков, полный цикл записи блока уменьшился более чем в 2 раза, с 8.18 мс до 3,73 мс. При тестировании с некоторыми накопителями других фирм максимальная разница составила 4,8 раза.

Рисунок 2 - Блок- схема разработанного алгоритма

Рисунок 3 - Запись блока размером 512 байт с использованием стандартного алгоритма (нижний

луч) и сбор данных АЦП (верхний луч)

бОб Agilent Technologies MON DEC 24 14:13:00 2012

П a 2.00V/ g] Ы ффГ” 1'.11 Off 2.000s1/ Stop * Q 3.01V

Save to file = scope_3

Save Recall Press to

Save

Рисунок 4 - Запись блока размером 512 байт с использованием разработанного алгоритма

Заключение. При сравнении стандартной библиотечной функции и функции с разработанным алгоритмом выяснилось, что задержка сократилась в среднем в 5-7 раз, что весьма существенно при сборе данных с частотой выше 100 КГц. Таким образом, удалось выполнить весьма трудносовместимые требования по быстродействию и дешевизне изготавливаемых измерительных блоков системы мониторинга. Применение разработанного алгоритма в системе телеметрии позволило достаточно точно проследить характер кратковременных процессов, протекающих в корабельной артиллерийской установке при стрельбе, и выявить неисправности, которые могли бы привести к серьезным последствиям.

ЛИТЕРАТУРА

1. SD Card Association. http://sdcard.org

2. «FatFs - Generic FAT File System Module». http://elm-chan.org/fsw/ff/00index_e.html

3. «Secure Digital Card Interface for the MSP430», F. Foust, Dept. of Electrical and Computer Engineering

i Надоели баннеры? Вы всегда можете отключить рекламу.