Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с чтением блока SD карты
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Mikka
Карта инициализировалась через SPI успешно. Команды cmd18, cmd9, cmd10 принимает так же успешно и отвечает на них. А вот на команду cmd17 для чтения блока отвечает 0х00, но далее, вместо 0xfe, ни следует ничего кроме 0xff. Подскажите в чем может быть проблема.
adnega
Цитата(Mikka @ Jul 8 2015, 19:30) *
отвечает 0х00, но далее, вместо 0xfe, ни следует ничего кроме 0xff. Подскажите в чем может быть проблема.

А там 0xFE следует за 0x00 не сразу, а может хоть через 500 мс появиться. Вы как долго ждете?
Mikka
Цитата(adnega @ Jul 8 2015, 23:00) *
А там 0xFE следует за 0x00 не сразу, а может хоть через 500 мс появиться. Вы как долго ждете?

Долго жду. В бесконечном цикле пробовал, никакой реакции. Да и на cmd18 нормально отвечает
adnega
Цитата(Mikka @ Jul 9 2015, 12:41) *
Долго жду. В бесконечном цикле пробовал, никакой реакции. Да и на cmd18 нормально отвечает

Карта SD или SDHC? Номер блока правильно передаете?
Mikka
Цитата(adnega @ Jul 9 2015, 13:05) *
Карта SD или SDHC? Номер блока правильно передаете?

SDHC. Номер блока 0
Он по идее должен ошибку вернуть, если адрес неверный, а тут ничего нет
adnega
А на ПК данная карта работает? Другую карту (работающую в ПК) пробовали использовать?
Mikka
Цитата(adnega @ Jul 9 2015, 14:46) *
А на ПК данная карта работает? Другую карту (работающую в ПК) пробовали использовать?

Работает. Другую пока нет, не пробовал
Mikka
Проверил еще две карты. Они не проходят инициализацию. На ACMD41 отвечают 0x01
adnega
Цитата(Mikka @ Jul 10 2015, 14:18) *
Проверил еще две карты. Они не проходят инициализацию. На ACMD41 отвечают 0x01

Что ж пришло время засветить свой код)
Mikka
static BYTE CardType;

DSTATUS disk_initialize (void)

{

DSTATUS stat=STA_NOINIT;

UINT tmr=10000;

volatile int RestTic=0x092a;

BYTE RxByte[5],i;

//--------------------------------------------------------------

while (RestTic--); // ждать 1мс

for (i=0; i<10; i++){ // передать >74 импульсов

Tx_byte (0x01, 0xff);

}

//------------------передать cmd0-------------------------------

RxByte[0]=SD_CmdTx(0, 0x00000000, 0x95);

if (RxByte[0] != 0x01) return STA_NOINIT;

//------------------передать cmd8--------------------------------

if (SD_CmdTx(8, 0x000001AA, 0x87)==0x01){

RxByte[0]=SD_Rx_byte();

RxByte[1]=SD_Rx_byte();

RxByte[2]=SD_Rx_byte();

RxByte[3]=SD_Rx_byte();

if ((RxByte[3]!=0xaa) '' (RxByte[2]!=0x1)) return STA_NOINIT;

//--------------------передать acmd41----------------------------------

while (tmr--){

RxByte[0]=SD_CmdTx (55, 0x00000000, 0xff);

RxByte[1]=SD_CmdTx(41, 0x40000000, 0xff);

if (RxByte[1]==0x00) break;

RestTic=0x092a; // задержка

while (RestTic--);

}

//--------------передать cmd58-----------------------------------------

CardType=CT_SD2;

if (SD_CmdTx (58, 0x00000000, 0xff)!= 0x0) return STA_NOINIT;

RxByte[0]=SD_Rx_byte();

RxByte[1]=SD_Rx_byte();

RxByte[2]=SD_Rx_byte();

RxByte[3]=SD_Rx_byte();

if (RxByte[0] ' 0x40) CardType=CT_SD2 | CT_BLOCK;

else CardType=CT_SD2;

}

//---------------------передать acmd41-----------------------------------

else

{

while (tmr--){

SD_CmdTx (55, 0x00000000, 0x95);

RxByte[0]=SD_CmdTx (41, 0x00000000, 0x95);

if (RxByte[0]==0x00) break;

RestTic=0x092a;

while (RestTic--);

}

CardType=CT_SD1;

SD_CmdTx (16, 512, 0x95); //--------передать cmd16

}

//-----------------------------------------------------------------------

return 0;

}
Цитата(adnega @ Jul 10 2015, 14:37) *
Что ж пришло время засветить свой код)
adnega
1. у меня crc=0х86 в команде 8
Код
sd_send_cmd(CMD8_SEND_IF_COND, CARD_COND, 0x86);
, а у вас 0х87.

2. Не видно управление ногой CS. В начале команды я делаю CS=0, после команды CS=1 и передаю еще один 0xFF.
Mikka
Контрольная сумма взята из статей в сети. Две карты проходят инициализацию нормально, с одной даже данные потом считать получается, а третья вот виснет на acmd41.
С другой тоже удавалось читать блок, но она не реагирует на адрес этого блока, т.е. всегда одно и тоже приходит. Но стоит немного изменить программу и сразу на cmd17 приходят сплошные ff
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.