Модуль FAT карты microSD

#logging #embedded #sd-card #fat32 #msp430

#ведение журнала #встроенный #sd-карта #fat32 #msp430

Вопрос:

Недавно я использовал плату uALFAT microSD от GHI Electronics для ведения журнала данных, но у меня возникли проблемы с ее надежностью; некоторые вызовы ее функций иногда занимают гораздо больше времени, чем я могу обработать. В настоящее время я использую микроконтроллер MSP430 для взаимодействия с uALFAT.

Какие существуют аналогичные платы, которые я мог бы использовать вместо uALFAT, которые, надеюсь, были бы более надежными?

или

Какое было бы наиболее выгодным OEM-решением, если бы мне понадобилось разработать собственную интерфейсную плату для работы с MSP430?

Ответ №1:

Я бы подумал об этом немного по-другому. Любое запоминающее устройство на основе флэш-памяти, вероятно, будет иметь переменную синхронизацию при записи. Особенно с файловой системой, выравниванием износа и подобными функциями. Как правило, это характерно для flash, поскольку вам приходится стирать целые блоки и перемещать предметы. Если вы не можете смириться с переменным временем, то, что я делал в прошлом, — это убрать этот фрагмент из критичной по времени части кода.

Обычно я добавляю очередь, в которую записывается критичный по времени код, а затем в фоновом режиме извлекаю из очереди и записываю на SD-карту. В RTOS это было бы задачей с более низким приоритетом. В цикле опроса это была бы функция, вызываемая, когда система находится в режиме ожидания.

Это изменяет ограничение с наихудшего времени для вызова функции на простое соответствие средним требованиям к пропускной способности для ведения журнала. Наихудшая задержка и пропускная способность определяют, насколько большой должна быть очередь; обычно она может быть небольшой.

Комментарии:

1. Именно то, что я бы посоветовал.

Ответ №2:

Это, вероятно, сложнее, чем это, и лучшим решением является то, что посоветовал @sbass, даже если вы решите изменить файловую систему. Вам нужно точно определить, где и почему возникает задержка, прежде чем обвинять uALFAT.

Однако для справки, я успешно использовал ELM FatFs и его урезанные ELM Petit FatFs, а также EFSL.

Что касается задержки, то, хотя, например, с ELM я достиг скорости записи до 300 кбит / с с использованием SPI (скорость в значительной степени зависит от карты и может варьироваться от 30 кбит / с до 1 Мбит / с), я не смог успешно использовать его для регистрации потока данных 96 кбит / с в течение какого-либо длительного периода времени, даже при оптимизированных размерах буфера (кратных размеру сектора) и очереди 50 кбит из секторов по 512 байт. Это было связано не с библиотекой, а скорее с характером SD-карты, которая, по-видимому, на границах 1 Мбит зависала до 128 миллисекунд, чего было достаточно для исчерпания буферизации, обеспечиваемой очередью. Решение, конечно, заключается в увеличении буферизации, как сказал @sbas, но в этом случае общий объем системной оперативной памяти составлял всего 64 кбит, так что это было невозможно.

Если вы можете использовать память и задачу RTOS (возможно, в вашем случае собственную SYS / BIOS TI) для решения проблемы, вы должны быть в состоянии заставить ее работать с имеющейся у вас библиотекой. Необходимый объем оперативной памяти зависит от скорости передачи данных и от того, является ли она прерывистой или непрерывной.

Ответ №3:

Спасибо, ребята, в итоге я внедрил своего рода циклический буфер с дополнительной памятью, и это, похоже, сделало свое дело. Спасибо за хороший вклад!