Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
Mosokro
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 50
1

STM32+uSD serial logger (битые файлы)

26.03.2014, 13:08. Просмотров 3038. Ответов 2
Метки нет (Все метки)

Бьюсь над задачей создания автономного логгера на базе STM32 c SD картой.

Задача относительно простая:
Есть устройство с СОМ-портом для вывода отладочной информации (115200 8-п-1), вывод текстовый человекочитаемыми строками.
Необходимо сделать автономный логгер с SD карточкой для записи отладочной информации + некоторых внешних событий (напряжение питания и т.п.) с привязкой к реальному времени.
Т.е. к каждой принятой с порта строке или событию добавляем таймстэмп и пишем все в лог-файл на карту.
Есть еще один СОМ-порт для конфигурации самого логгера и обновления прошивки через бутлоадер.

Сейчас макет работает на STM32F100C8 + SD.
В качестве файловой системы использую FatFS от ChaNa.

Алгоритм организован так:
1) данные с СОМ-порта анализируем на лету и складываем в буффер (4096 байт), туда же пишем и таймстэмпы для каждой новой строки (обнаруживаем по приему символа перевода строки) - это делаем в прерывании;
2) В основном цикле проверяем количество данных в буфере, и если там больше или равно 512 байт (размер сектора карты) то пишем кусок буфера в файл.

Есть некоторые проблемы со скоростью записи на карту - иногда буфер переполняется если девайс гонит лог большим потоком.
Но главные грабли в том что данные из буфера пишутся в файл только кратно размеру сектора карты, т.е. всегда есть кусок данных в буфере не записанный в файл а этого делать никак нельзя по ТЗ.

При попытке писать на карту данные не выровненные по размеру сектора (N*512) файл на карте получается битый при высокой скорости потока данных, а на малой скорости вроде все ОК но это не показатель.

Итак вопрос кто сталкивался с такой проблемой? В гугл не шлите - там ничего не нашел кроме ссылок на сайт самого ChaNa и тесты скорости записи.

Дебиггинг тоже не помогает ошибку можно обнаружить только при чтении уже записанного файла на компе - при работе никакие флаги ошибок не вылетают.

Пробовал разгонять и прой и SDшку (SPI) - эффекта 0 :(

ЗЫ. Кстати STM32F100 стабильно работает на 48МГц (Ftosh prefetch=On/Ftosh latency=1/AHB=48MHzAPB2=48MHz/APB1=24MHz), SPI на 24MHz (даташит 18 макс) :)

ЗЫЫ. Если нужно приложу код - если конечно вообще кто-то ответит
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 13:08
Ответы с готовыми решениями:

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не...

Битые файлы на флешке
Файлы на флешке изменили формат и названия на невесть что и,соответственно, не...

Битые файлы при загрузке с браузеров
В общем проблема такая, при загрузке с браузеров бьются файлы, не загружаются...

Битые файлы при загрузки из Интернета
Часто бывает такое. Хочу скачать какой-либо файл с файлообменников, получаю...

2
otirt80
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 115
27.03.2014, 19:49 2
Не надо ничего разгонять. Для записи данных из порта на 115200 скорости должно хватать с огромным запасом.
Надо разбираться с кодом.

Буфер через который передаются данные - кольцевой?
Переполнение буфера контролируется?

С SPI через DMA работаете?
0
Mosokro
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 50
28.03.2014, 10:18 3
Я тоже считал что скорости должно хватить.
Там правда оверхэд в виде таймстэмпа, но скорость все равно должна быть около 30кб/с.
Тест давал максимум 900кб/с на больших блоках и около 100кб/с на маленьких блоках.

Буфер кольцевой и переполнение контролируется.
SPI работает с ДМА (реализация драйвера от Мартина Томаса, правда допиленная для совместимости со свежим кодом FanFS от ChaNa).

Битый кусок в файле ровно 512 байт - т.е. 1 сектор или размер буфера самой ФС.

Вчера от балды поставил размер трансфера меньше сектора - и все заработало как ни странно.
Короче оставил пока 128 байт - буду тестировать.

А по поводу разгона камня - так этож на халяву двойной прирост скорости :)
Про разгонЯдро то у F100 и F101-107 одинаковое, техпроцесс тоже. Единственная засада скорость работы флэша.
Но вот похоже в F100 никто ускоритель флэша не выпиливал и его регистры управления тоже, только в даташите потерли эти разделы :) Таким образом я его вполне успешно активировал и поставил флэшу 1 цикл ожидания как и положено (0-24МГц - 0 / 24-48МГц - 1 / 48-72МГц - 2 цикла). Ну и делители на шины периферии настроил.
Это как с клонами ST-LINK на STM32F101 у которого USB официально нет а он есть :)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2014, 10:18

Файлы видны, но почти все битые. HDD в порядке
Есть HDD на котором переустановили Windows, предварительно с диска С сохранили...

Чем и как определить битые сектора и (чем и как) разбить HDD на разделы, игнорируя (оставляя в не размеченных зонах) битые сектора?
Помнится, однажды (лет 7 назад) делал подобное с переносным диском. Тогда из 80...

Не работает Logger
Доброго времени суток, форумчане! Помогите пожалуйста разобраться почему не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru