Перейти к содержанию
    

SDIO интерфейс SD-card: время записи блока

Не могу найти ответ на вопрос: влияет ли интерфейс SDcard на скорость записи данных внутренним процессором карты (MCUcard)? Очевидно, что передача данных по шине SDIO намного быстрее, чем по  SPI. Но получив блок данных от микроконтроллера MCUcard приостанавливает обмен с микроконтроллером и начинает собственно запись во Flash память карты и отключается от МК. В соответствии со спецификациями на карты это время весьма существенно и может достигать сотен мсек. Я работал с картами по SPI шине, здесь MCUcard после получения блока 512 байт (или пакета) притягивает линию MISO на весьма продолжительное время и обмен останавливается. Причем это время может меняться. Подбором карт удавалось уменьшить это время до 5 мсек, но все равно это много. Сейчас есть задача, в которой такие остановки недопустимы. Не работал по шине SDIO, но хочу понять: там та же ситуация? Хотя в спецификациях время работы не оговаривается в зависимости от типа шины. Но вдруг там время меньше?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Linker said:

Не работал по шине SDIO, но хочу понять: там та же ситуация?

Да. Величина задержек может меняться в зависимости от карты и интерфейса, но они принципиально есть. Единственное верное решение - буферизация потока в RAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, aaarrr said:

 Единственное верное решение - буферизация потока в RAM.

Спасибо. А скорость записи, которая написана на карте, ех. 50МГЦ что означает? Скорость работы при получении данных со стороны флешкиного MCUcard без учета времени  паузы на обработку и запись? Может подскажите, как правильно выбрать карту с минимальным временем на эту паузу?   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 МГц означает максимальную частоту CLK. До какой-то степени скорость характеризуется классом карты, но класс определяет среднюю скорость записи. Паузы, если не повезет, могут достигать секунды. Особенно это проявляется, когда идет запись по второму-третьему кругу на карту. До некоторой степени облегчить жизнь можно, используя команду Pre-erase и запись большими блоками (по 128-512кБ). Выбрать карту практически невозможно. Если даже Вы ее протестировали, и она показала себя хорошо, то паузы могут появиться позже, когда карта будет заполнена вся (в файловой системе может ничего и не быть, но карте же не сказали, где у нее в содержимом ничего нет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

58 minutes ago, Linker said:

А скорость записи, которая написана на карте, ех. 50МГЦ что означает?

На карте пишут обычно среднюю устоявшуюся скорость записи.

 

1 hour ago, Linker said:

Может подскажите, как правильно выбрать карту с минимальным временем на эту паузу?

Никак. Возможные паузы нужно обязательно учитывать при проектировании. Рынок памяти очень динамичен, уже завтра вы подобранных карт не купите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Alex11 said:

До некоторой степени облегчить жизнь можно, используя команду Pre-erase 

Спасибо! Я использую безфайловый формат. Т.е. перед каждым применением карты лучше делать ее стирание командами карты. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Linker сказал:

Подбором карт удавалось уменьшить это время до 5 мсек, но все равно это много. Сейчас есть задача, в которой такие остановки недопустимы.

Тогда писать на SD-карту будет плохим решением. Потому как трудно предсказать возможную задержку записи. То что "что-то измерили и получили" - не показатель, как уже сказали - завтра время может быть в разы другим.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, Linker said:

 Подбором карт удавалось уменьшить это время до 5 мсек, но все равно это много.

Что за карта с максимальной задержкой в 5 мс? 
Дайте название. Сам такие хочу. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, Linker сказал:

Подбором карт удавалось уменьшить это время до 5 мсек, но все равно это много. Сейчас есть задача, в которой такие остановки недопустимы.

Дело в том, что величина этой задержки может быть случайной, т.к. в карте используется механизм выравнивания износа, который требует дополнительного времени, и сколько на это потребуется вам никто не скажет. Для подобных применений нужно использовать не карты со встроенным контроллером, а микросхемы флеша, причем типов NOR или SLC NAND, чтоб не было нужды использовать подобные алгоритмы. Или выделять большой буфер в памяти, копить там данные и потом скидывать их на карту большими блоками (4 и более КБайт) в режиме SD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, mantech said:

Дело в том, что величина этой задержки может быть случайной, т.к. в карте используется механизм выравнивания износа, к

Думаю дело уже давно не в этом. На картах куча независимых банков. Пока в одном выравнивается износ в другом можно уже вести запись. 
Карты для видео никаких задержек не дают. Дело только в цене.
Нужно искать карты имеющие 11-й класс команд и имеющие   Performance Enhancement Function

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, AlexandrY said:

Что за карта с максимальной задержкой в 5 мс? 
Дайте название. Сам такие хочу. 

Это давно было, не вспомню. Переробовал кучу разных Скорее всего этот результат был получен на новой карте. Посмотрел в своем архиве и нашел:
 

"Для новой карты SanDisc 32G

Запись блока 512 байт (SCLK=125КГц): прием блока – 42мс, внутренняя запись (Busy) с предварительным стиранием. Без стирания - 17mc (No Erase)"

9 hours ago, mantech said:

Или выделять большой буфер в памяти, копить там данные и потом скидывать их на карту большими блоками (4 и более КБайт) в режиме SD.

Вы имеете ввиду режим шины SDIO? У этого режима есть дополнительные команды, повышающие скорость обработки и записи флэшкиным MCUcard? Я это и пытаюсь выяснить.

8 hours ago, AlexandrY said:

Думаю дело уже давно не в этом. На картах куча независимых банков. Пока в одном выравнивается износ в другом можно уже вести запись. 
Карты для видео никаких задержек не дают. Дело только в цене.
Нужно искать карты имеющие 11-й класс команд и имеющие   Performance Enhancement Function

Согласен, что давно уже производителям нужно было что-то придумать. А вы пробовали 11-й класс? Смотрели какая там задержка со стороны MCUcard?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Linker сказал:

Вы имеете ввиду режим шины SDIO? У этого режима есть дополнительные команды, повышающие скорость обработки и записи флэшкиным MCUcard? Я это и пытаюсь выяснить.

Нет, это режим SD.  SDIO - несколько другое.  Никаких команд повышения скорости нет, но карты пишут блоками, которые гораздо больше, чем 512 байт, например записывая 512 байт за 5 мсек, и 4К тоже 5 мсек, итого имеем 8и кратный прирост скорости, но SPI не позволяет работать такими объемами вот и вся хитрость, при чтении тоже есть прирост, но поменьше...

9 часов назад, AlexandrY сказал:

Думаю дело уже давно не в этом. На картах куча независимых банков. Пока в одном выравнивается износ в другом можно уже вести запись. 

Может и придумали, но я таких карт не видал, может они и есть со стоимостью чугунного моста, но всегда надо рассчитывать, что клиент купит какой-нить смартбай по дешевке и вся ваша скорость сойдет на нет, нужно использовать общепринятые методы...

9 часов назад, AlexandrY сказал:

Карты для видео никаких задержек не дают.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, mantech said:

Нет, это режим SD.  SDIO - несколько другое. 512 байт за 5 мсек, и 4К тоже 5 мсек, итого имеем 8и кратный прирост скорости, но SPI не позволяет работать такими объемами вот и вся хитрость

То, что скорость чтения/записи по SDIO (так называется 4х проводная шина обмена в ARM STM32) будет выше, для меня понятно.
Но здесь имеется ввиду скорость приема флэшкиным MCUcard данных в свой буфер для последующей записи в NAND? Или это общее время записи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если запись идет блоком 512 байт то SD карта вычитает страницу из NAND(4к или больше, зависит от NAND) модифицирует страницу и запишет обратно, по-этому эффективнее работать с блоками равными(или больше но кратными) странице NAND.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, mantech сказал:

но всегда надо рассчитывать, что клиент купит какой-нить смартбай по дешевке и вся ваша скорость сойдет на нет, нужно использовать общепринятые методы...

ТС вроде упоминал, что ему важнее задержка записи, а не скорость. Это совершенно разные вещи. Высокая скорость и всякие там 11x не гарантируют малой задержки записи. И если важна всё-таки задержка, то имхо бесполезно искать карты 11x (или заставлять юзера покупать только их).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...