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

SDHC SPI Kingston 8Гб, ACMD41 Halt.

Фсем ПРИВЕТ ! парни, помoгите бедолаге. имею 4Гб микро СДху неизвестного производителя. на ACMD41 пару раз отвечает 01, после чего как и положенно 0. после нуля запрашиваю CMD58-> C0 00 FF 80 00. значит вышла из idle state. ставлю kingston 8GB - 6 раз 0x01, после чего вечный FF. всю гуглю изрыл, у буржуев такую же проблему видел. решения не нашёл. я уж и меж CMD55 и 41 CS-сом дрыгаю, и ваще всё, всё ,всё. ну не отвечает и всё тут - валится в игнор. но на комманду 0 и последующую 8 отвечает как надо.

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

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


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

Перед ACMD41 выполнить CMD58 не пробовали? Она только "рекомендуется", но, кажется, попадались мне карты, которые без неё не инициализировались.

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


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

R1+respond= 01 00 FF 80 00. да, и не раз - подаю в ручную. даже пытался ЦРЦ правильную в эти комманды запихнуть. всё равно 0x01 6 раз и вечный сон ФФ. а, да, даже электролит 200 мкФ к карте прицепил.

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

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


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

DO=1;

CS=1; 1000 CLK; CS=0;1000CLK;CS=1;1000 CLK;

CS=0;CMD 0;CLK=8;

CS=0; cmd8: 0x48 0x00,0x00,0x01,0xAA 0x87;читаю R1 +0 0 1 AA ;CS=1;CLK=8;

cycle:

CS=0; cmd 55: 0x77 ,0,0,0,0, 0xFF; читаю R1; CS=1;CLK=8; (здесь пробовал црц=0x65 и (65<<1)|1 )

CS=0; cmd41: 0x69, 0x40,0,0,0 0xFF; читаю R1; CS=1;CLK=8;(здесь пробовал црц=0x77и (77<<1)|1 )

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

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


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

cmd41: 0x69, 0x40,0,0,0

Замените на "0x69, 0x40, 0x10, 0, 0" - вы не посылаете карте информацию о своем напряжении, поэтому она и уходит в inactive state.

 

CRC, по-моему, лучше один раз включить и использовать постоянно.

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


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

не помогло. я и FF80 от комманды 58 подсовывал, и пробежался ротируя 1-цу от 0x69 40 00 01 00 до 0x69 40 80 00 00. на комманду 55, 41 оба раза ответила 01, а на следующий цикл не отвечала уже на CMD55.

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

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


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

Может быть по питанию случается провалъ. Дело не в только конденсаторе, а в потолке источника.

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

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


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

питал от USB. Точнее от USB - HID (3V LPC2148) переходника, с помощью которого и передаю комманды. из чего я делаю вывод, что если бы и были провалы, то они этот же переходник с собой утягивали, что с компа понять очень легко - INVALID DEVICE HANDLE получил бы. осциолографом бороды не увидел. карточка USB-SD/MicroSD переходником читается на ура.

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

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


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

Тогда пора показывать код инициализации (исходник). Или ещё можно самостоятельно проверить несколько выложенных на этом форуме (а так же Чена из фатфс) алгоритмов инициализаций и объявить здесь, что они тоже с этой карточкой не работают.

 

И обозначить предельный ток используемого 3-вольтового стабилизатора.

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

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


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

unsigned char SendRecSPI(unsigned char dat){

unsigned char temp;

temp =PDI();temp<<=1;

PDO(dat>>7);SCK(1);delay(1);SCK(0);delay(1); temp|=PDI();temp<<=1;

PDO(dat>>6);SCK(1);delay(1);SCK(0);delay(1); temp|=PDI();temp<<=1;

PDO(dat>>5);SCK(1);delay(1);SCK(0);delay(1);temp|=PDI();temp<<=1;

PDO(dat>>4);SCK(1);delay(1);SCK(0);delay(1);temp|=PDI();temp<<=1;

PDO(dat>>3);SCK(1);delay(1);SCK(0);delay(1);temp|=PDI();temp<<=1;

PDO(dat>>2);SCK(1);delay(1);SCK(0);delay(1); temp|=PDI();temp<<=1;

PDO(dat>>1);SCK(1);delay(1);SCK(0);delay(1);temp|=PDI();

PDO(dat); SCK(1);delay(1);SCK(0);delay(1);

return temp;

}

 

unsigned char SD_CMD(unsigned char *cmd,unsigned char *respond,unsigned int read_cnt, unsigned int timeout){

unsigned char t;

t=*cmd;

CS(0);

SendRecSPI(255);

SendRecSPI(0x7F&(*(cmd++)));

SendRecSPI(*(cmd++));

SendRecSPI(*(cmd++));

SendRecSPI(*(cmd++));

SendRecSPI(*(cmd++));

SendRecSPI(1|(*(cmd++)));

while((timeout--)>0){

*respond=SendRecSPI(255);

if (*respond!=255) break;

if (timeout==1) return 1;

}//timeout

respond++;

while((read_cnt--)>0) *(respond++)=SendRecSPI(255);

//if (t!=0x40|55)

CS(1);

SendRecSPI(255);

return 0;

}

стабилизатор - TPS76333. вот только заметил что в функции SendRecSPI не принимаю последний бит.

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


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

нашёл проблему. действительно, борода по питанию. дома на цифровом осциолографе не увидел, а вот на работе на лучевом рассмотрел - при посылке комманды 0x08 был провал чуть ли не 0,5V. оказалось в цепи 3V был резючок 10 Ом. убрал его и всё попёрло. Всем спасибо, тему можно закрыть. правда я рассмотрел после того как скинул 200мкФ и повесил тантал гдет под микрофараду.

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

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


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

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

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

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

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

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

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

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

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

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