Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм записи на SD карту
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
inventor
Кто нибудь может посоветовать алгоритм для записи на SD
Проблема такая: имееца контроллер в котором всего 32 кбайт памяти,
получаю данные с АЦП и с помощью двух буферов ping-pong
посылаю сигнал RAISE() обработчику записи на sd карту.
Насколько я понимаю, внутри SD карты так же находица контроллер,
который определяет в какие секторы можно писать, какие сбойные и пр.
Иногда бывают такие ситуации (наблюдал на разных ОС) - что контроллер
SD карты на какое-то время задумывается, а потом начинает писать-вероятно
в это время он может найти какой то сбойный блок и переместить какие то свои таблицы.
Для меня такая задержка недопустима, но единственное решение
ее обхода-это увеличение буферов ping-pong,
но я уже написал что памяти всего 32 кбайт-и она используется не только
для этих двух буферов, но и для сегмента данных и хранения констант,
поэтому под буферы беру всего 16 кбайт.

Может есть какое нибудь красивое решение?
aaarrr
Нет решения. Только буфер достаточного размера.
inventor
Цитата(aaarrr @ Dec 2 2012, 17:16) *
Нет решения. Только буфер достаточного размера.


Ну а если писать на внутреннюю flash,
хотя это нехорошо?
aaarrr
Цитата(inventor @ Dec 2 2012, 19:29) *
Ну а если писать на внутреннюю flash,
хотя это нехорошо?

Можно и внешнюю, только без "мозгов". Голая NAND тоже даст вполне предсказуемый результат.
inventor
Придеца новую плату делать-в нынещней не предусмотрено расширение памяти.
То есть получаетсмя выход из этой ситуации: снижение частоты записи и увеличение буфера.
чтобы было достаточное время для записи буфера, во время накопления другово.
aaarrr
Цитата(inventor @ Dec 2 2012, 21:02) *
То есть получаетсмя выход из этой ситуации: снижение частоты записи и увеличение буфера.
чтобы было достаточное время для записи буфера, во время накопления другово.

Операция записи на SD-карту может требовать до 250мс. Соответственно, нужно иметь буфер, который за это время не успеет переполниться.
inventor
Цитата(aaarrr @ Dec 2 2012, 20:28) *
Операция записи на SD-карту может требовать до 250мс. Соответственно, нужно иметь буфер, который за это время не успеет переполниться.


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

И еще вопрос: 250 мс этот какой-то стандарт, откуда вы взяли ээто число?
aaarrr
Цитата(inventor @ Dec 2 2012, 21:41) *
И еще вопрос: 250 мс этот какой-то стандарт, откуда вы взяли ээто число?

Это число из второй версии спецификации. Цифра несколько лукава, так как никто, к примеру, не запрещает карте держать 250мс BUSY в двух операциях подряд.
Ozelot
Столкнулся с аналогичной проблемой. По спецификации задержка может быть до 500mS. Протестировал десяток разных карточек. У всех задержка была до 500mS. У одной карточки объемом 32ГБайта задержка была до 820mS ( Team 32GB MocroSD). Выкрутился добавлением в схему дополнительной памяти (использовал Microchip 23LC1024 - SRAM c SPI интерфейсом).
inventor
Цитата(Ozelot @ Dec 3 2012, 10:54) *
Столкнулся с аналогичной проблемой. По спецификации задержка может быть до 500mS. Протестировал десяток разных карточек. У всех задержка была до 500mS. У одной карточки объемом 32ГБайта задержка была до 820mS ( Team 32GB MocroSD). Выкрутился добавлением в схему дополнительной памяти (использовал Microchip 23LC1024 - SRAM c SPI интерфейсом).


У меня кстати на карте QUMO объемом в 32 Гбайт так и происходит-сбои и потери буфера.
На карточках, объемом в 4 Гбайт SanDisk я увеличил частоту сброса буфера на карту-
он происходит 4 раза в секунду, сам буфер размером в 2000 байт (не килобайт!)
Сбоев нет, но на других картах появляются.
И очень странно-они маркированы более высоким классом,
то есть у них должнга быть большая скорость-но именно они и сбоят.

Да ..хотел добавить, карта работает по протоколу с 4-мя проводами,
а не SPI
Ozelot
Цитата(inventor @ Dec 3 2012, 10:20) *
У меня кстати на карте QUMO объемом в 32 Гбайт так и происходит-сбои и потери буфера.
На карточках, объемом в 4 Гбайт SanDisk я увеличил частоту сброса буфера на карту-
он происходит 4 раза в секунду, сам буфер размером в 2000 байт (не килобайт!)
Сбоев нет, но на других картах появляются.
И очень странно-они маркированы более высоким классом,
то есть у них должнга быть большая скорость-но именно они и сбоят.

Да ..хотел добавить, карта работает по протоколу с 4-мя проводами,
а не SPI


У меня работа по SD-интерфейсу при частоте шины 24МГц.
Team 32GB Speed Class 10 - средняя скорость последовательной записи 9МБайт/сек , при этом изредка бывают паузы до 820mS.
Transcend 32GB Speed Class 4 - средняя скорость последовательной записи 8МБайт/сек, максимальная пауза 500mS.
inventor
Вот это и странно-класс карты ниже, а работает лучше.
Ozelot
Цитата(inventor @ Dec 3 2012, 10:44) *
Вот это и странно-класс карты ниже, а работает лучше.

Ничего странного. Я же указал что запись была последовательная. В случае произвольного доступа она может значительно упасть (это уже зависит от мозгов встроенного в карту контроллера).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.