Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тормоза при записи сектора СД/ММС
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > IDE/ATA/SATA/SAS/SCSI/CF
b-volkov
При последовательной записи секторов на СД (как, впрочем, и ММС) карту иногда время записи возрастает с единиц миллисекунд до десятков, а то и переваливает за сто. Причем, сектор записывается нормально. Особой регулярности не замечено, каждый раз тормозит на разных секторах. Перепробовал все имеющиеся карточки, время притормаживанияя меняется, частота повторения то же, но сам факт остается. Это норма?
aaarrr
Был у меня замечательный китайский карт-ридер, после общения с которым карточки начинали вести себя именно таким вот образом: все работает, но с дикими тормозами в случайных местах. Попробуйте взять новую карту и другой картовод, на всякий случай.

Еще могут быть глюки, если не установлены pull-up резисторы на интерфейсе, но у меня они проявлялись как полное зависание карты, помогала только повторная инициализация.
MrYuran
А может это зависит от того, чистый сектор или записанный?
Ведь если в нём чё-то было, то надо сначала стереть, а на это нужно время.
b-volkov
Брал карточки прямо из упаковки - то ж самое.
Резисторы стоят,16к

Цитата(b-volkov @ Mar 28 2008, 17:26) *
Брал карточки прямо из упаковки - то ж самое.
Резисторы стоят,16к

Пробовал WinHEXом забивать и нулями и FF - не помогает. Если только у нее какой-то свой признак стертости сектора (или там - блока)
bve
Для FLASH-устройств запись происходит крупными блоками, зависящими от емкости карточки и микросхем памяти, сидящих в ней. Т.е. для записи даже 1-го сектора производится внутреннее чтение блока, модификация и обратная запись. Причем блок предварительно должен быть "стерт". Если он не "стерт", то производится автоматическое его "стирание", что требует уйму времени. В стандарте АТА, например, есть
специальная команда ERASE SECTORS. После этой команды блок внутри помечается как "стертый" и
запись идет намного быстрее. Найдите аналогичную команду для Вашей карточки, "сотрите" там все, что не надо и попробуите писать - скорость должна быть больше и равномернее..
b-volkov
Цитата(bve @ Mar 28 2008, 19:12) *
есть специальная команда ERASE SECTORS. После этой команды блок внутри помечается как "стертый" и запись идет намного быстрее. Найдите аналогичную команду для Вашей карточки, "сотрите" там все, что не надо и попробуите писать - скорость должна быть больше и равномернее..

И так пробовал стирать - разницы не заметил. Видимо выход один: наращивать буфер.
SALOME
Цитата(bve @ Mar 28 2008, 22:12) *
Для FLASH-устройств запись происходит крупными блоками, зависящими от емкости карточки и микросхем памяти, сидящих в ней. Т.е. для записи даже 1-го сектора производится внутреннее чтение блока, модификация и обратная запись. Причем блок предварительно должен быть "стерт". Если он не "стерт", то производится автоматическое его "стирание", что требует уйму времени. В стандарте АТА, например, есть
специальная команда ERASE SECTORS. После этой команды блок внутри помечается как "стертый" и
запись идет намного быстрее. Найдите аналогичную команду для Вашей карточки, "сотрите" там все, что не надо и попробуите писать - скорость должна быть больше и равномернее..

У меня похожая проблема, но немного другая. Одинаковые карты пишут на разных задаваемых скоростях. Т.е. если частоту SCLK для SPI выбрать 10МГц, то одна карта пишется без проблем, а вторая - вообще отказывается. Уменьшаешь частоту до 1 МГц - пишет хорошо. Пишу блоками по 512К. Использую команду CMD25. При считывании параметров CSD карты сомандой CMD9 байт "TRAN_SPEED" показывает одинаковую скорость, например 25 МГЦ. Кстати что это за скорость? Я так поняла, что это и есть SCLK интерфейса SPI.
aaarrr
Цитата(SALOME @ Apr 12 2008, 08:56) *
Я так поняла, что это и есть SCLK интерфейса SPI.

Да, это максимальная частота клоков. А симптомы, похоже, указывают на проблемы с железом.
SALOME
Цитата(aaarrr @ Apr 12 2008, 16:00) *
Да, это максимальная частота клоков. А симптомы, похоже, указывают на проблемы с железом.

Не буду исключать. Но почему одинаковые карты ведут себя по разному? Как они могут на железо влиять?
aaarrr
Цитата(SALOME @ Apr 12 2008, 13:02) *
Но почему одинаковые карты ведут себя по разному?

Пардон, не заметил, что они одинаковые. Странно.
SALOME
Цитата(aaarrr @ Apr 12 2008, 16:18) *
Пардон, не заметил, что они одинаковые. Странно.

Ну может одна использовалась более интенсивно и в ней много битых секторов, которые надо обходить? Но тогда при чем тут скорость SCKLK? Ведь карта просто не хочет работать на высокой частоте. В чем тут может быть дело? Не хочется работать на пониженных частотах.
aaarrr
Они точно одинаковые? У карт одного производителя могут быть внутренности из разных источников.
InvisibleFed
Тоже не рад скорости записи на SD. На одной и той же карте в оин и тот же блок пишу и получаю разброс от 1.4 мс до 7 мс. На других чуть быстрее или медленнее, но разброс тот же. Тут давалась рекомендация стрирать сектор (установленное количество блоков). Пробовал - результат неоднозначный (что-то изменилось, одни блоки (обычно 512 байт) пишутся быстрее с "чистого" листа, другие так же медленно). Вообще, я несколько в затруднении по части того, как определить количество блоков в секторе (или секторов в блоке? - терминология для SD и MMC разнится). Если исходить из SD Prod Manual 1.9, все размеры задаются тремя параметрами регитсра CSD: C_SIZE, MULT и BLOCK_LEN (обычно 512 байт). Общее количество блоков (секторов, в случае MMC) определяется как произведение C_SIZE и MULT. Если еще умножить на BLOCK_LEN, получим емкость карты в байтах. Так где граница сектора? C_SIZE или MULT? Сколько блоков по 512 байт в себя вмещает сектор?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.