ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
726917 Топик полностью
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, чтобы лог самых критичных ошибок можно было скачать удаленно. Зато мы твердо знали - что если устройство ушло со связи - значит либо это физическое разрушение устройства, либо сотовой связи там нет, а не наши ошибки. Я лично как главный конструктор стал спокойно жить после этого...