реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Алгоритм записи на SD карту
inventor
сообщение Dec 2 2012, 14:08
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



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

Может есть какое нибудь красивое решение?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 2 2012, 14:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Нет решения. Только буфер достаточного размера.
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 2 2012, 15:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



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


Ну а если писать на внутреннюю flash,
хотя это нехорошо?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 2 2012, 15:40
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Можно и внешнюю, только без "мозгов". Голая NAND тоже даст вполне предсказуемый результат.
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 2 2012, 17:02
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Придеца новую плату делать-в нынещней не предусмотрено расширение памяти.
То есть получаетсмя выход из этой ситуации: снижение частоты записи и увеличение буфера.
чтобы было достаточное время для записи буфера, во время накопления другово.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 2 2012, 17:28
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Операция записи на SD-карту может требовать до 250мс. Соответственно, нужно иметь буфер, который за это время не успеет переполниться.
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 2 2012, 17:41
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



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


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

И еще вопрос: 250 мс этот какой-то стандарт, откуда вы взяли ээто число?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 2 2012, 18:03
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Это число из второй версии спецификации. Цифра несколько лукава, так как никто, к примеру, не запрещает карте держать 250мс BUSY в двух операциях подряд.
Go to the top of the page
 
+Quote Post
Ozelot
сообщение Dec 3 2012, 06:54
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 6-06-05
Из: Ukraine
Пользователь №: 5 764



Столкнулся с аналогичной проблемой. По спецификации задержка может быть до 500mS. Протестировал десяток разных карточек. У всех задержка была до 500mS. У одной карточки объемом 32ГБайта задержка была до 820mS ( Team 32GB MocroSD). Выкрутился добавлением в схему дополнительной памяти (использовал Microchip 23LC1024 - SRAM c SPI интерфейсом).
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 3 2012, 07:20
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(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
Go to the top of the page
 
+Quote Post
Ozelot
сообщение Dec 3 2012, 07:42
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 6-06-05
Из: Ukraine
Пользователь №: 5 764



Цитата(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.
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 3 2012, 07:44
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Вот это и странно-класс карты ниже, а работает лучше.
Go to the top of the page
 
+Quote Post
Ozelot
сообщение Dec 3 2012, 07:53
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 6-06-05
Из: Ukraine
Пользователь №: 5 764



Цитата(inventor @ Dec 3 2012, 10:44) *
Вот это и странно-класс карты ниже, а работает лучше.

Ничего странного. Я же указал что запись была последовательная. В случае произвольного доступа она может значительно упасть (это уже зависит от мозгов встроенного в карту контроллера).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016