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

Идем дальше, как говорится... Имею на руках две флешки: SanDisk TransFlash через переходник 32 мб и Kingston 1гб (SD, естественно). При записи на флешь наблюдаю странную картину. После подачи пары CRC-байт в конце посылки сектора (шлю FF, т. к. CRC не использую), шлю холостые байты в ожидании Data Response (в случае успешной записи должно быть XXX00101). Так вот SanDisk такое выдает, а Kingston - нет. Последняя вообще ничего не выдает вслед за парой CRC - один лишь вечный '0'. Хотя в обоих случаях фактическая запись происходит (потом считывал). В случае с Kingston, правда, не понятно пока с какого раза - там в программе в случае неполучения правильного Data Response производится повторная запись с самого начала команды (и так 4 раза). В чем может быть причина?

И еще вопрос. Для SanDisk после того как карта вернула XXX00101, заряжаю "пустышки" (байты с FF), пока не получу в ответ что-нибудь отличное от нуля (карта висит в Busy, как я понимаю). Так вот это время ну уж очень болшое! Команду и 512 байт информации выпуливаются у меня меньше чем за 500 мкс. А busy висит все 3000 мкс! Это ведь ненормально много?! Или я не прав?

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


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

Добрый день.

 

Не хотел создавать новую тему, так как эта показалась подходящей.

 

Вопрос в следующем.

 

При поиске имени файла в области каталогов, когда можно быть уверенным что дальше искать смысла нет. Имеется в виду, следующее. Есть гарантия что при обнаружении пустой записи ( например не все 32 байта обнулены, а только первый символ = 0) за ней не будет какой-нибудь еще валидной записи??? Просто когда флешка пустая (только форматнули), область каталогов занулена. И при поиске файла (на предмет похожего имени) на 8-битнике да 1 гиговой флешке (где секторов под корень отведено много), происходит долгий поиск. Вот думаю останавливать поиск при обнаружении в имени файла первого символа = 0. Правомерно ли это???

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


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

Вот думаю останавливать поиск при обнаружении в имени файла первого символа = 0. Правомерно ли это???

Правомерно: по стандарту FAT, 0x00 в первом символе имени файла является признаком конца директории.

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


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

Правомерно: по стандарту FAT, 0x00 в первом символе имени файла является признаком конца директории.

 

Огромное спасибо за ответ.

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


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

Добрый день.

 

Может быть я плохо искал по форуму или по документации на SD карты, но на свой вопрос ответа не нашел. Вернее что-то нашел. В частности у людей есть разброс во времени записи сектора от нескольких ms до сотен ms. В моем случае (мне необходимо при пропадании входного напряжения успеть скинуть свой промежуточный буфер в 512 байт на карту) карта за 20ms не успевает скинуть блок данных. Ток потребления и так на предельном минимуме, остается наращивать входную емкость. Вот и хочу понять какую минимально достаточную поставить (нехочу ставить банку в 1000uF :).

 

Сколько времени SD/MMC карты тратят максимально на запись блока в 512 байт???

Сколько минимально возможно времени тратят на запись???

 

В документации напоролся на фразу из которой я понял что на запись карта может потратить до 250mS времени. Ужасно много. Может есть более конкретные данные (то что я прочел оказалось где-то в середине документа, а не в таблице электрических и временных характеристик)?????

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


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

С посекторной записью в SD вопрос неприятный. Мне попадались карты, куда писались данные посекторно со скоростью 7 кбайт/с, хотя другие писали 80 кбайт/с.

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


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

С посекторной записью в SD вопрос неприятный. Мне попадались карты, куда писались данные посекторно со скоростью 7 кбайт/с, хотя другие писали 80 кбайт/с.

 

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

 

Время работы всего процесса 4 ms. За 2 ms я все выплевываю в SD, и по осцилограмме вижу еще 2.4 ms до момента пропадания питания есть у карты. Но после прочтения данных, своего куска информации в файле не обнаруживаю. Затянул процесс до сотен ms. Данные в файле получил. Но банка болшая получилась.

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


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

Доброго дня.

 

Имею аналогичную проблему с MicroSD картой.

 

Начинаю писать на нее поток данных со скоростью примерно один сектор в 110 мс. Пишет корректно, однако один раз в 28 секунд (это я замерял, какое-то магическое числ небось) карточка держит сигнал BUSY слишком долго (до 80 мс), хотя в остальное время BUSY пропадает практически сразу после записи.

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

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


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

28/0.11 = 254.

Ну очень похоже на 256 - размер какого-нибудь блока флеш.

Ну в таком случае это какой-то блок из 256 секторов - но я нигде не видел упоминание об этом.

И еще - я пишу непрерывно, начиная с 66 сектора в файле на карте, а этот 66 сектор файла смещен относительно начала карточки на 95 секторов. Получаем начало в 161 секторе от начала карточки.

Отладчикм посмотрел, что длительное ожидание происходит на 373 секторе файла, т.е. на 534 секторе от начала карточки. Но ведь это явно не блок, и явно не кратно 256.

Короче, полная загадка.

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


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

И еще интересный момент.

В вышеописанных условиях первый сбой происходит на 373 секторе, а вот следующий сбой - на 629, т.е. с интервалом 256 секторов!!!

Из любопытства уменьшил интервал записи секторов с 110 мс до 96. Получил первый сбой на 253 секторе (как-то не пропорционально с интервалом получилось), а вот следующий - на 509 - снова через 256 секторов!!!

 

Что за магическое число 256 секторов для SD карты и почему так происходит вообще?

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


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

У меня тоже проблемы с недетерменированностью времени записи :05: :05: Пока так и не решил проблемму.

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


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

Что за магическое число 256 секторов для SD карты и почему так происходит вообще?

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

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

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


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

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

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

Я это безусловно и так делаю... вот только я никак не могу определить размер при котором все гарантироваано успеется записаться. Ну не мегабайт же мне выделять, при том, что я пишу пачками по 150 байт за раз и в 99% случаев он записать эти 150 байт успевает еще до того как новые 150 байт накопятся с АЦП. Весь вопрос в этом 1 % случаев... мегабайта конечно хватит, но я не готов в крохотном МСП430 выделять 1М памяти чтоб он простаивал попросту. :)

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


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

Здравствуйте.

Делаю поддержку флешек microSD на MSP430. Сначала использовал легкодоступный Sham176.zip. Все работало практически без глюков, но флешки более 512 МБ эта библиотека не видела, поэтому я решил портировать FatFs (не tiny). Взял diskio отсюда, переделал, чтобы он работал на F1611 и получил кучу глюков, убив кучу времени. Один из них - карточка инициализируется строго через раз, или каждый раз, если ее вынуть-вставить. А сначала вообще инициализировалась когда хотела, обычно на 10 неудачных попыток была одна удачная. После чего она стала работать через раз - уже не помню. Конечно, можно всю инициализацию засунуть в цикл, но мне кажется, что это - "костыли".

Есть две флешки: PQI на 512 МБ и Kingston на 1 ГБ. Инициализируются обе в разных "ветках" (см. ниже). Компьютер и другие девайсы работают с ними без всяких проблем.

Спецификации читал, вроде у меня все правильно.

С чтением тоже проблемы: вместо сектора всегда получаю одни нули.

diskio.zip

Изменено пользователем LCD

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


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

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

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

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

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

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

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

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

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

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