Evgeny_CD, Архитектор (11.01.2017 00:14, просмотров: 150) ответил zerogliff на Который день пытаюсь сделать логгер для USART. Хочется журналировать байты, переданные по данному интерфейсу, и обязательно помечать их временной меткой (типа, в какой микросекундный момент этот байт был принят). Уже открыл бутылку шампанского, не
Много лет назад мы делали устройство, которое логгило 4 дуплексных порта UART с микросекундным тайм стапмом каждого пакета на SD карточку. ATxmega128A1 - шедевр, 8 UART. Нам надо было 7 RX каналов - 3 порта дуплексно, один - только не то RX, не то TX.
Всякая буферизация запрещена, UART генерировали прерывания по каждому байту, и в прерывании к байту (или коду ошибки) сразу приписывали зачение таймера.
SD карточка предварительно форматировалась на компе какой-то самописной приблудой, чтобы у нее в корне лежало несколько файлов типа fs01.bin, которые бы образовывали непрерываное адресное пространство на всю SD. Карточки использовали хорошие, проблем с блоками не было.
FeRAM стояла на I2C или SPI, не помню, там записывался допустимый диапазон адресов секторов, и адрес пооследнего записаного сектора. Там же стояли RTC с батарейкой.
Устройство только писало на SD карточку - от этой отметки записанного сектора и до упора. Карточки считывали на компек, файлы декодировали мегатулзой на Python.
Был придуман относительно компактыый бинарный формат лога с относительным смещением времени от предыдущей записи, но с периодической полной записью времени и даты.
Скрости по портам были разные, от 2400 до 115200, обмен не очень интенсивный. На 2G SD (именно SD, с SDHC не стали заморачиваться, несколько раз налетали на 2G SDHC карточки) влазил лог за ~3 недели.
Также было несколько битовых событий - пропадание питания и проч.
У логгера был свой конденсатор аццкого размера, что в купе с DC-DC на входе позволяло ему жить на нем несколько сек - достаточно, чтобы при выключении корректно все записать.
не полинились поставить компараторы на входы UART перехватчика - чтобы можно было работать с любыми уровнями.
Получилась компактная платка в термоусадке (батарея кондеров тоже в термоусадке, отдельно на проводках), которую вклеивали на скотче в тестируемый прибор.
Все это отдавалось юзерами и "в поле" писало логи с бесценными ошибками.
Ошибки в нашем ПО, которые мы так нашли, были просто бесценны для нас. Мы много нового узнали о работе сотовой связи и спутниковой навигации в реальных условиях....
Девайсов было сделано десятка два, постепенно они утратились - выловленные ошибки помогли сформировать стиль программирования программеров, программы стали гораздо более устойчивыми, и "ловить в поле" стало нечего. Программеры изловчились найти место во встроенной SPI FLASH и сделали расширение протокола обмена по GSM, чтобы лог самых критичных ошибок можно было скачать удаленно.
Зато мы твердо знали - что если устройство ушло со связи - значит либо это физическое разрушение устройства, либо сотовой связи там нет, а не наши ошибки. Я лично как главный конструктор стал спокойно жить после этого...