ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ В ИЗМЕРЕНИЯХ
УДК 681.3.071
И. М. Плаксин, Б. В. Чувыкин
СОВЕРШЕНСТВОВАНИЕ АЛГОРИТМА СОХРАНЕНИЯ ДАННЫХ НА НАКОПИТЕЛЕ MICROSD ДЛЯ ПОВЫШЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ И НАДЕЖНОСТИ СИСТЕМ МОНИТОРИНГА
I. M. Plaksin, B. V. Chuvykin
IMPROVEMENT ALGORITHM OF DATA RETENTION FOR MICROSD STORAGE DEVICE FOR RISING EFFICIENCY AND RELIABILITY OF MONITORING SYSTEM
Аннотация. Проанализированы недостатки и преимущества использования накопителя стандарта microSD для систем мониторинга. Приведено описание разработанного алгоритма, повышающего скорость записи на накопитель microSD.
Abstract. In paper gives analyze of memory microSD standard for telemetry system. There gives description developed algorithm that increasing speed of data write on microSD.
Ключевые слова: системы мониторинга, накопитель данных, сбор информации, стандарт microSD, скорость записи, алгоритм, файловая система, микроконтроллер.
Key words: wireless systems, telemetry system, increasing lifetime, autonomous unit, battery powered, power consumption, operation modes, input/output ports.
К системам, предназначенным для сбора данных о состоянии критически важных параметров технически сложного и опасного в эксплуатации объекта, предъявляется ряд требований, которые обеспечивают его безопасную и надежную эксплуатацию. Необнаруженная неисправность такого объекта может повлечь огромные экономические потери и даже привести к человеческим жертвам. В данной статье рассмотрим алгоритмический способ повышения производительности, качества и надежности мониторинга системы телеметрии корабельной артиллерийской установки С-098 за счет совершенствования алгоритма сохранения данных на накопитель. Алгоритмическое решение, рассмотренное в данной статье, может найти применение во многих системах, где предъявляются высокие требования к скорости сохранения данных при низкой стоимости компонентов системы.
В приложениях, где необходимо реализовать быстрый сбор или прием данных с параллельной записью этих самых данных в энергонезависимую память, а размер оперативной памяти не позволяет временно сохранить все поступающие данные за нужный период с последующей записью, происходит потеря данных, что в некоторых случаях может привести к
2014,№2(8)
37
опасной ситуации, например на технически сложных военных и промышленных объектах (ТСО). Системам мониторинга часто приходится контролировать множество параметров, которые могут динамически меняться, а точность сохранения динамических данных позволит решить важные технические проблемы, избежать аварий. Если процесс длится порядка миллисекунды, то для понятия характера процесса необходимо не меньше пятидесяти точек, чем больше - тем точнее будет проанализирован процесс. Контроль таких процессов порождает большой поток измеренных данных, недорогой беспроводной элемент системы мониторинга не в состоянии в режиме реального времени передать всю эту информацию. Поскольку для таких систем обычно применяют микроконтроллеры и объем потока данных порой превышает десятки, а то и сотни мегабайтов, также не представляется возможным их временное хранение в оперативной памяти.
Система телеметрии С-098 разработана в соответствии с предъявляемыми требованиями к современным системам мониторинга, такими как невысокая стоимость, низкое энергопотребление для автономной работы, универсальность для применения в различных проектах. При использовании системы для мониторинга динамики процессов, протекающих за миллисекунды, было выявлено, что используемые библиотечные функции работы с применяемым накопителем не позволяют достичь необходимой скорости оцифровки данных скоротечных процессов без потерь информации.
Накопителем данных в системе С-098 является флэш-память стандарта microSD, как и во многих других аналогичных системах. Такой тип памяти характеризуется как быстродействующий, универсальный, дешевый, надежный и маломощный. Карта снабжена собственным контроллером и специальной областью, способной записывать информацию таким образом, чтобы «незаконное» чтение информации было невозможно, в соответствии с требованиями стандарта «Secure Digital Music Initiative». Для записи в защищенную область используется специальный протокол записи, недоступный для обычных пользователей. Стандартной для карты microSD является файловая система FAT (до 2 гигабайтов включительно - FAT16, до 32 гигабайтов включительно - FAT32, более 32 гигабайтов - exFAT).
Рассмотрим подробнее названную выше проблему и обозначим невозможность ее решения иными способами. Смена карты памяти на другой тип накопителя ведет к увеличению цены или габаритов. Работа с памятью microSD осуществляется по стандартному интерфейсу SPI, скорость интерфейса ограничена скоростью маломощного микроконтроллера. Микроконтроллер представляет собой оптимальное соотношение цена-скорость-энергопотребление. При работе microSD объемом 2 гигабайта по интерфейсу SPI с использованием стандартной библиотеки FAT16 запись на накопитель не успевает сохранять данные от АЦП, снимающего данные с частотой выше 20 кГц. Это происходит из-за того, что запись происходит поблочно, внутренний контроллер microSD ведет свой учет памяти (адресация кластеров, секторов, свободное и занятое место), библиотечная функция записи в файловой системе FAT использует поблочное сохранение с большим числом служебных команд. Изменить что-либо в работе внутреннего контролера устройства не представляется возможным. Работа с картой ограничена небольшим набором команд. Выходом из сложившейся ситуации для уменьшения времени записи данных на microSD при работе по интерфейсу SPI явилась разработка алгоритма многоблочной записи на базе поблочной с минимальными затратами на обслуживание файловой системы.
Разработанный алгоритм позволяет существенно ускорить запись данных на microSD, не нарушая целостности данных и представления данных в виде объекта (файла) файловой системы FAT16(32). Использование библиотечной функции записи f_write имеет существенный недостаток в виде длительного периода записи данных. Причиной этого недостатка является то, что даже запись большого числа блоков реализована через команду поблочной записи. Таким образом, при записи большого количества блоков тратится много времени на повторную подготовку к записи.
Рассмотрим временные характеристики накопителей microSD, хотя они и незначительно отличаются у разных производителей и в разных сериях. Процесс записи блока происходит следующим образом: после подготовки microSD к приему (включение питания и выставление сигнала в 0 на линии CS) карта восприимчива только к командам CMD0, CMD1 и CMD58, любые другие команды будут отклонены. Для инициализации необходимо послать команду CMD1. Чтобы определить, завершена ли инициализация, ведущий контроллер должен повторять посылку команды CMD1 и проверять ответ. Как только карта успешно закончила
инициализацию, бит «In Idle State» в ответе будет равен 0x00. Процесс инициализации может занять в зависимости от емкости накопителя до нескольких сотен миллисекунд, поэтому далее при описании алгоритма записи будем подразумевать, что инициализация проведена заранее, и далее она не будет упомянута. После окончания инициализации будут приниматься и команды чтения/записи. На рис. 1 приведена диаграмма состояний линий SPI DI (Data Input) и DO (Data Output) при записи одного блока. Запись одного блока начинается c посылки команды CMD24 (0x58) (библиотечный алгоритм). После этого устройство в течение некоторого времени выдает сообщение о подтверждении приема команды «Cmd Response» или ошибку.
DI
^ 11>у1е
CMD24 Data Packet
Cmd J_ Data / Busy
DO
Рис. 1. Диаграмма команды одноблочной записи
Обычно после этого многим накопителям надо дать незначительное время для самонастройки (посылка одного-двух байтов тактирования 0xFF, «dummy» байт). Далее надо передать устройству указатель начала данных 0xFE. Затем начинается передача блока данных, объем которых, как было сказано, зависит от размера памяти накопителя. Стоит отметить, что данные в это время сохраняются во временной памяти контроллера устройства и могут быть потеряны в случае отключения питания. Для microSD объемом 2 гигабайта размер блока составляет 512 байтов. По завершении передачи блока выдается сообщение «Data Response», и внутренний контроллер начинает физическую запись, переходя в состояние «Busy». Длительность этой записи трудно поддается детерминации и зависит от многих факторов. Размер этой задержки составляет значительную долю всей длительности записи блока, и полностью избежать этой задержки нельзя, возможно только уменьшить. Внутренний контроллер накопителя представляет собой черный ящик для пользователя, поскольку это одна из основ защиты от несанкционированного чтения. Производители стараются держать в секрете особенности работы внутреннего контроллера. Известно, что перед физическим сохранением данных внутренний контроллер выполняет набор базовых команд, как, например, анализ свободного места, перезапись таблицы адресов и т.д. Многоблочная запись позволяет существенно сократить длительность выполнения базовых команд, так как некоторые из них выполняются единожды в самом начале, а некоторые вообще не требуются. Приведенный ниже алгоритм использует многоблочную запись, некоторые функции библиотеки FAT16(32), которые не влияют на быстродействие записи. Стандартная библиотека содержит много задержек, обусловленных адресацией указателя файла, работой с секторами и кластерами. В нашем алгоритме большинство этих задержек исключено, при этом запись производится в файл FAT16(32) без нарушения целостности среды. Из стандартного алгоритма сохранены начальные и конечные этапы формирования файла.
Теперь рассмотрим основные моменты разработанного алгоритма. Вначале монтируем файловую систему FAT (f_mount) и открываем файл (f_open). Устанавливаем сигнал на линии CS в 0, тем самым занимая интерфейс SPI для работы с накопителем. После этого посылаем команду многоблочной записи CMD25 (0x59) и дожидаемся ответа от microSD. Далее в зависимости от устройства необходимо послать от одного до трех байтов задержки 0xFF. Вышеописанные действия совершаются единожды, в отличие от одноблочной записи. После этого запускаем сбор данных, и как только их количество превысит размер блока, можно приступать к записи. Поскольку непрерывное получение данных для нашей системы телеметрии -приоритетное направление, их сбор лучше осуществлять по прерыванию через прямой доступ к памяти (DMA). Таким образом, микроконтроллер большую часть времени тратит на работу с накопителем. Последующие команды заключены в цикл, из которого можно выйти по достижении заданного размера файла, по внешнему прерыванию, по команде или, например, по ошибке. В начале цикла устанавливаем указатель (token) начала блока мультиблочной последовательности 0xFC. Затем побайтно передаем данные одного блока. После передачи блока данных необходимо послать два байта ожидания 0xFF, затем накопитель выставит сигнал «Busy», что в свою очередь означает, что внутренний контроллер устройства начал физиче-
2014,№2(8)
39
скую запись информации. Как только устройство сообщит, что запись закончена, увеличиваем размер файла на размер блока и проверяем необходимость прерывания цикла. Если по какой-либо причине необходимо прервать сбор данных, посылаем накопителю указатель завершения мультиблочной записи ОхББ. Далее необходимо дать два байта задержки ОхББ, за которые шісго8В завершит формирование файла. Как только накопитель сообщит о завершении операций, можно выставлять сигнал С8 в 1, освобождая 8РІ. Для успешного выполнения алгоритма необходимо организовать буфер для хранения данных, которые необходимо записать, размером в 2-3 раза превышающий размер блока накопителя. Это требуется для того, чтобы постоянно получаемые данные не потерялись при переполнении буфера, когда шіего8Б выполняет внутренние недетерминированные длительные операции.
На рис. 2 приведены циклограммы работы 8РІ при записи блока 512 байтов на шіего8Б Тгапсе^еП с объемом 2 гигабайта с использованием функции стандартной библиотеки. На рис. 3 приведена та же циклограмма, но с использованием разработанного алгоритма. Как видно, полный цикл записи блока уменьшился более чем в 2 раза - с 8,18 до 3,73 мс. При тестировании с некоторыми накопителями других фирм максимальная разница составила 4,8 раза.
Agilent Technologies
MON DEC 24 14:44 00 2012
Q @ 2.00V/ 0 2.00V/ И W 130.OS' 2.000*/ Stop і Q 3.01V
.И...|"|"H'TTgf
ЛХ = 3.18000000ms
1/ДХ = 122.48Hz
: Mode О Source <0 Cursors
Manual 2 X1
X1: 1 77.64uQ0000ms X2: 184 82000000n-,s
ДУ(2 ) = 4.82500V
Y1: -462.50mv Y2: 4 36250V
Рис. 2. Запись блока размером 512 байтов с использованием стандартного алгоритма (нижний луч)
и сбор данных АЦП (верхний луч)
Рис. 3. Запись блока размером 512 байтов с использованием разработанного алгоритма
Выводы
При сравнении стандартной библиотечной функции и функции с разработанным алгоритмом выяснилось, что задержка сократилась в среднем в 5-7 раз, что весьма существенно при сборе данных с частотой выше 100 кГц. Таким образом, удалось выполнить весьма трудно совместимые требования по быстродействию и дешевизне изготавливаемых измерительных блоков системы мониторинга. Применение разработанного алгоритма в системе телеметрии позволило достаточно точно проследить характер кратковременных процессов, протекающих в корабельной артиллерийской установке при стрельбе, и выявить неисправности, которые могли бы привести к серьезным последствиям.
Плаксин Игорь Михайлович
аспирант, начальник лаборатории, Пензенский государственный университет, Научно-исследовательский институт физических измерений E-mail: [email protected]
Plaksin Igor' Mikhaylovich
postgraduate student, head of a laboratory, Penza State University,
Scientific-research Institute of physicall measurements
Чувыкин Борис Викторович
доктор технических наук, профессор кафедры информационно-вычислительных систем, Пензенский государственный университет E-mail: [email protected]
Chuvykin Boris Viktorovich
doctor of technical sciences, professor of sub-department of information computer systems, Penza State University
УДК 681.3.071 Плаксин, И. М.
Совершенствование алгоритма сохранения данных на накопителе microSD для повышения производительности и надежности систем мониторинга / И. М. Плаксин, Б. В. Чувыкин // Измерение. Мониторинг. Управление. Контроль. - 2014. - № 2 (8). - С. 36-40.