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

 
 
 
Reply to this topicStart new topic
> Тормоза при записи сектора СД/ММС
b-volkov
сообщение Mar 28 2008, 12:06
Сообщение #1


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

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



При последовательной записи секторов на СД (как, впрочем, и ММС) карту иногда время записи возрастает с единиц миллисекунд до десятков, а то и переваливает за сто. Причем, сектор записывается нормально. Особой регулярности не замечено, каждый раз тормозит на разных секторах. Перепробовал все имеющиеся карточки, время притормаживанияя меняется, частота повторения то же, но сам факт остается. Это норма?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2008, 12:34
Сообщение #2


Гуру
******

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



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

Еще могут быть глюки, если не установлены pull-up резисторы на интерфейсе, но у меня они проявлялись как полное зависание карты, помогала только повторная инициализация.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 28 2008, 13:56
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Mar 28 2008, 14:28
Сообщение #4


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

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Брал карточки прямо из упаковки - то ж самое.
Резисторы стоят,16к

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

Пробовал WinHEXом забивать и нулями и FF - не помогает. Если только у нее какой-то свой признак стертости сектора (или там - блока)
Go to the top of the page
 
+Quote Post
bve
сообщение Mar 28 2008, 15:12
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765



Для FLASH-устройств запись происходит крупными блоками, зависящими от емкости карточки и микросхем памяти, сидящих в ней. Т.е. для записи даже 1-го сектора производится внутреннее чтение блока, модификация и обратная запись. Причем блок предварительно должен быть "стерт". Если он не "стерт", то производится автоматическое его "стирание", что требует уйму времени. В стандарте АТА, например, есть
специальная команда ERASE SECTORS. После этой команды блок внутри помечается как "стертый" и
запись идет намного быстрее. Найдите аналогичную команду для Вашей карточки, "сотрите" там все, что не надо и попробуите писать - скорость должна быть больше и равномернее..
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Apr 1 2008, 09:59
Сообщение #6


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

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Цитата(bve @ Mar 28 2008, 19:12) *
есть специальная команда ERASE SECTORS. После этой команды блок внутри помечается как "стертый" и запись идет намного быстрее. Найдите аналогичную команду для Вашей карточки, "сотрите" там все, что не надо и попробуите писать - скорость должна быть больше и равномернее..

И так пробовал стирать - разницы не заметил. Видимо выход один: наращивать буфер.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Apr 12 2008, 04:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



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

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


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 12 2008, 09:00
Сообщение #8


Гуру
******

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



Цитата(SALOME @ Apr 12 2008, 08:56) *
Я так поняла, что это и есть SCLK интерфейса SPI.

Да, это максимальная частота клоков. А симптомы, похоже, указывают на проблемы с железом.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Apr 12 2008, 09:02
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



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

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


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 12 2008, 09:18
Сообщение #10


Гуру
******

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



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

Пардон, не заметил, что они одинаковые. Странно.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Apr 12 2008, 09:22
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



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

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


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 12 2008, 10:28
Сообщение #12


Гуру
******

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



Они точно одинаковые? У карт одного производителя могут быть внутренности из разных источников.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение May 5 2008, 05:29
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Тоже не рад скорости записи на 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 байт в себя вмещает сектор?
Go to the top of the page
 
+Quote Post

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

 


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


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