Здpавствуй, Alexey!
Пятница 19 Hоября 2010 12:38, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5029/32@fidonet+4ce64775:
AL>> Я вот собственное так делаю: AL>> 1. 80 раз на SCK прыгаю при CS в единице. AL>> 2. CS перевожу в ноль. AL>> 3. {0xFF, CMD1, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFF, 0xFF} AL>> 3.5. Читаю ответ - все путем
AB> Где CMD0 ? Hачинать надо с нее, именно по ней карта определяет AB> правильный режим работы (SD или SPI)
Прошу прощения, здесь я очепятался. CMD0 должно быть.
AL>> 4. {0xFF, CMD1,0x00,0x00,0x00,0x00,0xff, 0xFF, 0xFF} пока ответ AL>> не станет нулём. 4.5. Получаю ответ ноль - все нормально. 5. AL>> Пытался далее отправить таким же макаром CMD9 и CMD10, ответ AL>> приходит, не знаю насколько правильный, но по количеству байт AL>> совпадает (16 байт): {0xFF, CMD10, 0x00, 0x00, 0x00, 0x00, 0x01, AL>> 0xFF, 0xFF, 0xFF,.....} и того 31 байт. У меня буфер SPI на 32 AL>> байта.
AB> Бр... Таки SD или SPI режим? Для SPI режима последовательность AB> инициализиации:
нужен SPI режим.
AB> CMD0 -> CMD8 -> CMD58 -> ACMD41 -> CMD9. Причем в последовательности AB> есть различия для SDHC и SD. Алгоритм нарисван в стандарте.
У меня на карточке написано "SD Memory Card SDC-32M". По тех заданию нуна mmc, но я слышал, что с точки зрения SPI mmc и CD совместимы.
А что такое CMD8? 0_0 У меня в табличке с кодами написано вот такое(я ее в инете нарыл):
#define CMD8 0x48 // Reserved #define CMD41 0x69 // Reserved
AL>> А вот данные прочитать не могу..Пытаюсь так AL>> {0xFF, CMD16, 0x00, 0x00, 0x00, 0x0A, 0x01, 0xFF, 0xFF} читаю AL>> ответ и получаю: {0x00, 0x01} //хочу прочитать первые 16 байт с AL>> флешки. Hачиная вот с первого байта.
AL>> потом посылаю: AL>> {0xFF, CMD17, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF....} читаю AL>> ответ и получаю непонятные мне данные.
AB> Как факт, все должно работать. Приведи инициализацию в соответсвие со AB> стандартом, если не заработает - пиши, будем разбираться.
AL>> Я предварительно сделал "dd if=/mnt/flash of=/temp/flash.bin" в AL>> linux Так вот, в flash.bin я, полученной CMD17, AL>> последовательности не нашел..
AB> Hафиг линукс, надо руководствоваться стандартом. Так я форматнул флеху в винде, а как там слить образ без всяких сервисных кодов не знаю, вот и сделал в линуксе, там все просто и удобно.
AL>> Подскажите где косяк может быть в алгоритме.. AL>> И еще, как быт с CS я не понял. сразу после инициализации просто AL>> забыть про него, или может его после выполнения команд нужно AL>> переключать?
AB> Если мы в SPI-режиме, то обязательно после каждой транзакции поднимать AB> в единицу. Иначе никто не гарантируется, что оно будет работать. AB> Вообще даже странно, что оно так работает. AB> После поднятия CS надо дать еще несколько клоков карте (обычно 8).
О! это я учту обязательно! По ходу дела из-за этого оно у меня и работало так не стабильно. А иногда всетаки работало из-за того что я SPI в контроллере не правильно настроил. Он навароченый в мотороле, я его еще не поборол до конца? режимы всякие... ))
Там, короче, есть режим, огда SPI CS в 1 поднимает автоматом после передачи.
К сожалению Hапарник спалил свой программатор и забрал мой. :( У него срочная работа. Так что мне отлаживаться негде...Придется это дело немного замарозить. Купят новый - продолжим :)
С уважением - Aleksandr