Jump to content

    

Дмитрий Воловик

Участник
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Дмитрий Воловик

  • Birthday 01/02/1966

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Киев
  1. Установка Keil 8.01

    Вставлю свои 5 копеек... Столкнулся с ситуацией, когда не помогли вышеприведенные советы. При добавлении лицензии все равно получал сообщение RENEW... Оказалось, что имеет значение сколько драйверов сетевых адаптеров установлено в системе. Лицензия нормально добавилась после того, как я через диспетчер устройств отключил все сетевые адаптеры кроме одного. После добавления лицензии все выключенные сетевые адаптеры можно снова включить.
  2. AVR и SD(mini SD) память

    В моем устройстве карточка и процессор питаются от 3.3В. Посмотри такой вариант, хотя медленно и кривовато: http://www.deviltronic.de/jpgs/mmc_optimal.jpg
  3. AVR и SD(mini SD) память

    Цитатаunsigned char Read_Byte_MMC (void) { unsigned char Byte = 0; SPDR = 0xff; loop_until_bit_is_set(SPSR, SPIF); Byte = SPDR; } Тут функция ничего не возвращает (нет return Byte;) Кроме этого как сделано преобразование уровня сигнала MISO? Если подключен напрямую, то его уровень будет на грани, что может вызывать сбои.
  4. AVR и SD(mini SD) память

    Как долго ты ждешь ответа после CMD1 и что возвращает карточка? Т.к. ты не описывал схему включения, задам несколько вопросов: - Какой используется кристалл и какая тактовая частота, с какого порта управляется CS? - Установлен ли керамический блокировочный конденсатор (около 0.1 мкф) по питанию карточки в непосредственной от неё близости? - Напряжение питания процессора и карточки в пределах 2.8 - 3.6В? - Если процессор и карточка питаются от разных напряжений, как сделаны преобразователи уровней сигналов? Для чего устанавливаешь бит SPI2X в SPSR? Приведи фрагмент кода (желательно на С), где выполняется обращение к каротчке начиная от установки CS= 0 до выдачи байта в карточку. В принципе нужно сделать цикл, в котором выполняется обращение к карточке, и смотреть с помощью осциллографа временные соотношения между сигналами.
  5. AVR и SD(mini SD) память

    Может не правильно инициализируешь карточку? Вот вариант инициализации и работы с карточкой: 1. Настраиваем контроллер SPI 2. Устанавливаем CS=1 и передаем восемь байт 0xFF 3. Устанавливаем CS=0 и передаем CMD0 c аргументом 0 и CRC=0x95 4. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF) 5. Если таймаут, увеличиваем счетчик попыток и если он меньше 3, переходим к п.2. Если счетчик попыток = 3, вываливаемся с ошибкой. 6. Устанавливаем CS=0 и передаем CMD1 c аргументом 0 и CRC=0 7. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF) 8. Устанавливаем CS=1 9. Если таймаут или ответ <> 0, увеличиваем счетчик попыток и если он меньше 3, переходим к п.6. Если было три попытки выходим по ошибке. Если ответ = 0, карточка готова к работе Читаем CSD 10. Устанавливаем CS=0 и передаем CMD9 c аргументом 0 и CRC=0 11. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF) 12. При таймауте или при ответе <> 0, уст. CS=1 и переходим на обработку ошибки (п. 6) 13. Ждем от карточки токена SINGLE_BLOCK_READ (0xFE) (посылаем в карточку 0xFF, пока не получим байт не равный 0xFE) 14. При таймауте уст. CS=1 и переходим на обработку ошибки (п. 6) 15. Принимаем 16 байт CSD 16. Принимаем CRC (даже если не анализируем, т.к. карточка ждет 16 тактовых импульсов) 17. Устанавливаем CS=1 и выполняем анализ CSD. Чтение блока данных 18. Устанавливаем CS=0 и передаем CMD17 c адресом блока данных (адрес должен быть кратен 512) и CRC=0 19. Ждем ответа от карточки (посылаем в карточку 0xFF, пока не получим байт не равный 0xFF) 20. При таймауте или при ответе <> 0, уст. CS=1 и переходим на обработку ошибки (п. 6) 21. Ждем от карточки токена SINGLE_BLOCK_READ (0xFE) (посылаем в карточку 0xFF, пока не получим байт не равный 0xFE) 22. При таймауте или получении ответа <> 0xFE, уст. CS=1 и переходим на обработку ошибки (п. 6) 23. Принимаем 512 байт данных 24. Принимаем CRC (даже если не анализируем, т.к. карточка ждет 16 тактовых импульсов) 25. Устанавливаем CS=1 и разбираемся с прочитанными данными Скорость обмена и длительность таймаутов определяется значениями в CSD, пока он не прочитан, можно установитьс запасом - 200мс. Скорость обмена должна быть в начале работы не более 400 кбит. В интернет доступны примеры для AVR, например http://hubbard.engr.scu.edu/embedded/avr/avrlib www.ghielectronics.com
  6. AVR и SD(mini SD) память

    Цитата(Alexey Belyaev @ Feb 12 2006, 20:54) Может ты в курсе почему MMC/SD 16Mb не хочет отдавать свой CID и прочее что отдаётся через read-buffer? Я только начал разбираться с карточками, поэтому читать CID не пробовал. Возможно CID надо читать аналогично CSD (см. раздел 7.8 стандарта MultiMediaCard System Specification Version 3.31, ссылку на который я давал раньше)
  7. AVR и SD(mini SD) память

    Старые версии стандартов MMC v.3.1 (2003г.) и SD MMC (2001г.) можно взять отсюда: http://www.bbww.net/SoftDown.asp?ID=8087&lbID=0 там архив примерно 2.7мб. По этим документам проверял работу с карточками 128, 256 и 512мб.