Jump to content

    
Sign in to follow this  
Linker

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

Recommended Posts

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

Share this post


Link to post
Share on other sites
1 hour ago, Linker said:

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

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

Share this post


Link to post
Share on other sites
20 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
58 minutes ago, Linker said:

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

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

 

1 hour ago, Linker said:

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

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

Share this post


Link to post
Share on other sites
8 minutes ago, Alex11 said:

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

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

Share this post


Link to post
Share on other sites
7 часов назад, Linker сказал:

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

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

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

Share this post


Link to post
Share on other sites
7 hours ago, Linker said:

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

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

Share this post


Link to post
Share on other sites
11 часов назад, Linker сказал:

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

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

Share this post


Link to post
Share on other sites
26 minutes ago, mantech said:

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

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

Share this post


Link to post
Share on other sites
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?

 

Share this post


Link to post
Share on other sites
1 час назад, Linker сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
41 minutes ago, mantech said:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 час назад, mantech сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this