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

MicroSD не выходит из режима Idle State

Добрый день!

 

Пытаюсь по интерфейсу SPI связать microSD карту и TMS320f2812. Для этого использую порт McBSP в режиме SPI-0. Частоту передачи настроила на 300кГц (проверяла осциллографом).

Проект программы прикреплен к записи (CodeComposerStudio 6.1).

Алгоритм программы следующий:

1) Отправляю 0xFF 80 clock cycles при CS в высоком уровне.

2) Перевожу CS в низкий уровень.

3) Отправляю GO_IDLE_STATE (CMD0) с нулевым аргументом и CRC=0x95.

Ответ: 0x01 -> Idle State.

4) Отправляю 0xFF 8 clock cycles.

5) Отправляю SEND_IF_COND (CMD8) с нулевым аргументом и CRC=0x87.

Ответ: 0x05 –> карта версии v1.

4) Отправляю 0xFF 8 clock cycles.

7) Отправляю READ_OCR (CMD58) с нулевым аргументом и CRC=0xFF.

Ответ: 0x01; OCR=0xFF -> напряжение в норме.

8) Отправляю 0xFF 8 clock cycles.

9) Отправляю APP_CMD (CMD55) с нулевым аргументом и CRC=0xFF.

Ответ: 0x01.

10) Отправляю 0xFF 8 clock cycles.

11) Отправляю SD_SEND_OP_COND (ACMD41) с нулевым аргументом и CRC=0xFF.

Ответ: 0x05 или 0x01. MicroSD карта никогда не выходит из режима Idle State

 

Пыталась решить проблему:

1) Отправляла 0xFF 8 clock cycles между командами при CS в высоком уровне.

2) Включала распознавание CRC при помощи команды 0x59. Ответ был 0x01 (что говорит о том, что команда распознана), однако при отправлении последующей команды с неверным CRC ответ остается преждним, как если бы команды 0х59 не было. Ожидаемой ошибки 0x09 не возникает.

 

Подскажите пожалуйста, что я делаю не так.

(много форумов уже просмотрено, документации изучено, но решить проблему не удается)

Спасибо!

 

 

Texas_OnlySD.zip

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


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

Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже.

sdcard.zip

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

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


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

Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже.

 

Огромное спасибо! Попробую применить часть Вашего проекта.

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


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

Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже.

Я посмотрела Ваш проект.

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

Не могли бы Вы дать некоторые пояснения?

Спасибо!

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


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

Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды.

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


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

Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды.

 

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

Земля подключена - проверяла.

 

Вот схема подключения microSD карты:

schem_jpg_1230x0.jpg

 

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


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

5) Отправляю SEND_IF_COND (CMD8) с нулевым аргументом и CRC=0x87.

Ответ: 0x05 –> карта версии v1.

Это означает - карта версии 2.00 или выше. Ссори, всё правильно.

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


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

Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды.

 

Спасибо огромное! Заработало!

В слоте SD карты действительно "отошла" земля.

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


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

Я посмотрела Ваш проект.

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

Не могли бы Вы дать некоторые пояснения?

Спасибо!

 

Ну раз всё уже ясно, скажу коротко - sd_initialize() вызывается для инициализации, а потом файловая система Чена вызывает по мере необходимости интерфейсные функции:

 

DWORD get_fattime (void);

DRESULT disk_ioctl (

BYTE drv, /* Physical drive nmuber (0..) */

BYTE ctrl, /* Control code */

void *buff /* Buffer to send/receive control data */

);

DRESULT disk_write (

BYTE drv, /* Physical drive nmuber (0..) */

const BYTE *buff, /* Data to be written */

DWORD sector, /* Sector address (LBA) */

UINT count /* Number of sectors to write */

);

DRESULT disk_read (

BYTE drv, /* Physical drive nmuber (0..) */

BYTE *buff, /* Data buffer to store read data */

DWORD sector, /* Sector address (LBA) */

UINT count /* Number of sectors to read */

);

DSTATUS disk_status (

BYTE drv /* Physical drive nmuber (0..) */

);

DSTATUS disk_initialize (

BYTE drv /* Physical drive nmuber (0..) */

);

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

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


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

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

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

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

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

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

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

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

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

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