Mikka 0 8 июля, 2015 Опубликовано 8 июля, 2015 · Жалоба Карта инициализировалась через SPI успешно. Команды cmd18, cmd9, cmd10 принимает так же успешно и отвечает на них. А вот на команду cmd17 для чтения блока отвечает 0х00, но далее, вместо 0xfe, ни следует ничего кроме 0xff. Подскажите в чем может быть проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 8 июля, 2015 Опубликовано 8 июля, 2015 · Жалоба отвечает 0х00, но далее, вместо 0xfe, ни следует ничего кроме 0xff. Подскажите в чем может быть проблема. А там 0xFE следует за 0x00 не сразу, а может хоть через 500 мс появиться. Вы как долго ждете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mikka 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба А там 0xFE следует за 0x00 не сразу, а может хоть через 500 мс появиться. Вы как долго ждете? Долго жду. В бесконечном цикле пробовал, никакой реакции. Да и на cmd18 нормально отвечает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба Долго жду. В бесконечном цикле пробовал, никакой реакции. Да и на cmd18 нормально отвечает Карта SD или SDHC? Номер блока правильно передаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mikka 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба Карта SD или SDHC? Номер блока правильно передаете? SDHC. Номер блока 0 Он по идее должен ошибку вернуть, если адрес неверный, а тут ничего нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба А на ПК данная карта работает? Другую карту (работающую в ПК) пробовали использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mikka 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба А на ПК данная карта работает? Другую карту (работающую в ПК) пробовали использовать? Работает. Другую пока нет, не пробовал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mikka 0 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба Проверил еще две карты. Они не проходят инициализацию. На ACMD41 отвечают 0x01 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба Проверил еще две карты. Они не проходят инициализацию. На ACMD41 отвечают 0x01 Что ж пришло время засветить свой код) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mikka 0 22 июля, 2015 Опубликовано 22 июля, 2015 (изменено) · Жалоба 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; } Что ж пришло время засветить свой код) Изменено 22 июля, 2015 пользователем Mikka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 23 июля, 2015 Опубликовано 23 июля, 2015 · Жалоба 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 0 23 июля, 2015 Опубликовано 23 июля, 2015 (изменено) · Жалоба Контрольная сумма взята из статей в сети. Две карты проходят инициализацию нормально, с одной даже данные потом считать получается, а третья вот виснет на acmd41. С другой тоже удавалось читать блок, но она не реагирует на адрес этого блока, т.е. всегда одно и тоже приходит. Но стоит немного изменить программу и сразу на cmd17 приходят сплошные ff Изменено 23 июля, 2015 пользователем Mikka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться