Полная версия этой страницы:
Проблема с SDXC 128Gb
Возникла проблема с SDXC 128Gb.
Для записи потока использую CMD25.
С начала карты до адреса блока 0х17FFF (первые 48Мб) все прекрасно работает.
В адресах от 18000 и выше происходит затык. После записи первого блока по DAT0 получаю CRC Status: '010' - Data accepted, вроде все нормально.
А на второй блок карта реагирует вхождением в ступор. На DAT0 висит "1", данные не принимает.
Я примерно представляю, что проблема связана с CMD20, но во всех шареварных даташитах написано:
"This section is a blank for the Simplified Specification."
Плиз хелп!
ЗЫ. Пробовал CMD20 с нулевым аргументом, получил "BLOCK_LEN_ERROR".
Ozelot
Mar 18 2013, 10:03
А разве не нормально, что на DAT0 выставляется сигнал BUSY для операции записи? Через полсекунды отпустит и запись продолжится дальше.
Какие еще полсекунды? У меня поток видео 4Mb/сек пишется.
Написал же - проблема с картой 128G. С картами на 64G и меньше все в порядке.
Ozelot
Mar 18 2013, 11:21
По спецификации при записи возможны паузы в полсекунды, даже если средняя скорость записи 10 МБайт в секунду (так что твои 4 МБита в секунду ни о чем не говорят).
4 Мбайта.
Даташит в студию пожалуста!
Да, в описании CMD20 есть такое.
Цитата
4.13.2.8.1 Definition of Each Function
(1) Start Recording
This function indicates that Speed Class host starts stream recording. When the card receives CMD20 Start Recording function, the card indicates busy up to 1 second to prepare recording (Garbage collection, clean-up of internal status, etc).
Но к WRITE_MULTIPLE_BLOCK это не относится.
Я с SD-картами более 5 лет работаю.
А вообще, разговор ни о чем. Работал с SDXC128G???
Тебе отвечать на подобные советы больше не буду.
Ozelot
Mar 18 2013, 12:54
Не обижайся

Я руководствуюсь документом SD Specifications Part 1 Physical Layer Simplified Specification Version 3.01 (см. вложение). Глава 4.6.2.2 (стр. 56):
While the card should try to maintain that busy indication of write operation does not exceed 250ms in the case of SDXC card, if the card is not possible to maintain operations with 250ms busy, the card can indicate write busy up to 500ms
including single and
multiple block write in the following scenarios:
и т.д.
На практике все совпадает. На некоторых карточках таких больших пауз нет, на некоторых до 750mS замечал. Так что без обид, меряться годами программирования как и языками программирования глупо, надеюсь это не наш с тобой уровень
Цитата(Ozelot @ Mar 18 2013, 16:54)

На практике все совпадает. На некоторых карточках таких больших пауз нет, на некоторых до 750mS замечал.
C этим согласен. Паузы на некоторых картах есть, причем возникают при первых записях после подачи питания и инициализации.
Затем поток пишется ровно, даже на картах 4 класса.
128-я становится в ступор навсегда, DAT0 держит пока не пересбросишь.
Подозреваю, что она находится в каком-то неправильном режиме, который в "Simplified" не описан.
К стати вот свежий даташит 2013г.
Нажмите для просмотра прикрепленного файла
Ozelot
Mar 19 2013, 08:13
Спасибо за свежую версию спецификации.
С карточками SDXC128 у меня проблем нет (аппаратная платформа NX6500), у коллеги вроде бы тоже все нормально (LPC2468). Средний объем потока данных при записи 2MB (тоже видео). Возможно это проблема или нюансы аппаратного контроллера SD-шины вашего процессора (например в используемом мной процессоре для мультиблочной записи нужно инициализировать специальный Pending-режим).
В том то и дело, что до адреса 0х18000 все работает.
Проблемы в аппаратной или програмной части нет, так как SDXC64 ведет себя адекватно на всем диапазоне адресов.
зы. Добился записи двух блоков подряд.
Перед CMD25 подал CMD20 с параметром 0х40000000 (опять был "BLOCK_LEN_ERROR").
Но на третьем блоке опять DAT0 встал.
Результат стабильный и под Jtag-ом в пошаговом режиме и в R.T.
Ozelot
Mar 19 2013, 09:39
Я CMD20 не использую. На какой частоте SD-шины работаете?
27MHz.
Чуть больше, чем по даташиту для 4 класса.
Ozelot
Mar 19 2013, 10:16
А без CMD20 в режиме мультиблочной записи карточка себя ведет аналогично? Может не стОит использовать такую специфическую команду?
Да, один блок только проходит.
Еще эта карта отказывается работать без ACMD23.
Т.е. без ACMD23 карта ведет себя так начиная с нулевого адреса.
Ozelot
Mar 19 2013, 10:27
Ух ты. А что за карточка? Может себе такую раздобуду потестить.
На морде:
Kingston SDXC128GB C10
SDX10V/128GB
С обратной стороны:
94514-E01.A00LF
6030120
TAIWAN
Цитата(KAlex @ Mar 18 2013, 12:48)

Возникла проблема с SDXC 128Gb.
Для записи потока использую CMD25.
С начала карты до адреса блока 0х17FFF (первые 48Мб) все прекрасно работает.
В адресах от 18000 и выше происходит затык. После записи первого блока по DAT0 получаю CRC Status: '010' - Data accepted, вроде все нормально.
А на второй блок карта реагирует вхождением в ступор. На DAT0 висит "1", данные не принимает.
Вопрос снят.
Выяснилось, что идет сильная просадка по питанию.
Однако почему этот эффект возникает с адреса 0х18000, даже если писать поблочно CMD24, так и осталась загадкой.
Ozelot
Mar 27 2013, 08:35
Спасибо за отчет. Скорее всего в этот момент контроллер карточки обновляет буфер, это он делает при старте и периодически все время в процессе работы.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.