Jump to content

    

Снова SD/MMC

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

Делаю поддержку флешек microSD на MSP430.

 

--- кусь ---

 

 

Добрый день.

 

А вопрос то в чем???

Вы хотите чтобы в исходнике нашли ошибку???

Или дали бы вам свои исходники???

Share this post


Link to post
Share on other sites

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

 

Все-таки помог "костыль" в процедуре инициализации: я поставил в цикл дергание CS и сброс (CMD0). Но проблема с отсутствием данных при чтении осталась.

Share this post


Link to post
Share on other sites

Все, разобрался, вопрос больше не актуален :)

Share this post


Link to post
Share on other sites

Рассказали бы другим... а то я вот собираюсь прикручивать MMC 1-2Gb - стоит ли идти по тем же граблям...

Share this post


Link to post
Share on other sites

Я выложу diskio, когда доделаю его до конца, мне не жалко. :)

Share this post


Link to post
Share on other sites

Проблема с microSD Kingston 1Гб. Делаю чтение блоками в 32 байта в цикле. Карта на определенном адресе очень долго не выдает Data Token (пока до 1мс задержку докрутил) . Посмотрел по докам сандиск на SD карты - а там максимум в 100мс обозначен!!!!! Это как понимать?

Edited by ISD

Share this post


Link to post
Share on other sites

Так и понимать. Постоянную скорость Вам никто не обещает.

Share this post


Link to post
Share on other sites

исходя из этого параметра можно считать, что чтение блока в 512 байт по SPI в худшем случае займет 100мс + 512*8*Fclk+команда.? Чет медлено очень :07:

Share this post


Link to post
Share on other sites
Чет медлено очень :07:

Ну, не на каждом же чтении возникает такое безобразие. Буферизируйте данные, если нужна стабильная скорость.

Share this post


Link to post
Share on other sites

Если работать на 2 МГц CLK, надо буфер более 25КБ держать. Причем непонятна частота возникновения этой задержки. Как же тогда народ на АВР плееры делает? Или это только SD-карт касается? В MMC вроде меньше задержка....

Share this post


Link to post
Share on other sites
Если работать на 2 МГц CLK, надо буфер более 25КБ держать.

Зачем так много?

Share this post


Link to post
Share on other sites

Потому, что при 2Мгц CLK за 100мс должно прочитаться 25000 байт (это теоретически, практически -минус команда 7 байт, минус DataToken и CRC * кол-во блоков) (конечно, если надо поток постоянным держать). Непонятно, как в MP3 плеере, сначала буферизируют столько?

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

Edited by ISD

Share this post


Link to post
Share on other sites

На второй странице этой ветки SALOME задаёт вопрос:

Я правильно понимаю, что с ростом количества битых блоков будет уменьшаться размер памяти, выдаваемый регистром CSD?

Zltigo отвечает:

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

 

Мой вопрос.

Карта используется как большой массив памяти, данные линейно пишутся подряд, так же линейно читаются, и после прочтения все удаляются. Т.е. файловой системы нет. Как в таком случае будут выглядеть битые сектора? Т.е. предположу, что при попытке записать в битый сектор карта вернёт ошибку. Но какую именно? Как понять (по ошибке) что это именно битый сектор, и его нужно просто пропустить? Что ответит карта при прочтении битого сектора? Опять же как это понять, чтоб данные из этого сектора пропустить?

Share this post


Link to post
Share on other sites

Маловероятно, что при такой работе вообще вылезут битые сектора. На битом секторе карта вернет Write Error в Data Response токене при записи и Card ECC Failed в Data Error токене при чтении.

Share this post


Link to post
Share on other sites

Всем доброго дня!

Столкнулся с таким непонятным явлением:

Инициализация SDHC карты для работы по SPI

CMD 0 - ответ 0х01

CMD 8 - ответ 0х01

 

ACMD 41 :

CMD 55 - ответ 0х01

/* хитрое место */

CMD 41 - ответ 0х00

 

Непонятно вот что :

4 карты (2шт. Transcend 8 Gb и 2 шт.Kingston 4 Gb) работают

если в хитром месте подать больше 7 клоков при неактивном CS

1 карта (Kingston 8 Gb) работает если в хитром месте подать более 255 клоков при неактивном CS

1 карта (Kingston 8 Gb) работает если в хитром месте подать более 511 клоков при неактивном CS

Наверное, можно нарваться на карту, где еще более широкое "хитрое место".

В Physical Layer Simplified Specification Version 2.00 ничего на этот счет не нашел.

Сколько клоков закладывать в хитрое место?

P.S. Инициализация идет при частоте клока ~250 кГц, карты новые.

Edited by forever_student

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this