Olga_ 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Добрый день! Пытаюсь по интерфейсу 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 декабря, 2015 Опубликовано 28 декабря, 2015 (изменено) · Жалоба Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже. sdcard.zip Изменено 28 декабря, 2015 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olga_ 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже. Огромное спасибо! Попробую применить часть Вашего проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olga_ 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Ловите кусок из моего проекта. Работа по SPI во второй части sdcard.c в архиве. Я тоже начинал с тексасовского примера - он вполне рабочий. С другого примера, не с Вашего... С более старой версии, похоже. Я посмотрела Ваш проект. Еще раз спасибо за помощь, но ,к сожалению, этот проект не мне не помог т.к. некоторые функции отсутствуют, а те, которые есть, не дали мне полного представления о работе программы: откуда какие функции вызываются и когда.. Не могли бы Вы дать некоторые пояснения? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olga_ 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды. Здравствуйте! Земля подключена - проверяла. Вот схема подключения microSD карты: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба 5) Отправляю SEND_IF_COND (CMD8) с нулевым аргументом и CRC=0x87. Ответ: 0x05 –> карта версии v1. Это означает - карта версии 2.00 или выше. Ссори, всё правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olga_ 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Карточки могут зависать в режиме Idle из-за неподключенной земли. Паразитно питаясь через SCK и CS. Иногда со странностями, иногда нормально отвечая на команды. Спасибо огромное! Заработало! В слоте SD карты действительно "отошла" земля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 декабря, 2015 Опубликовано 28 декабря, 2015 (изменено) · Жалоба Я посмотрела Ваш проект. Еще раз спасибо за помощь, но ,к сожалению, этот проект не мне не помог т.к. некоторые функции отсутствуют, а те, которые есть, не дали мне полного представления о работе программы: откуда какие функции вызываются и когда.. Не могли бы Вы дать некоторые пояснения? Спасибо! Ну раз всё уже ясно, скажу коротко - 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..) */ ); Изменено 28 декабря, 2015 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться