реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SDHC SPI Kingston 8Гб, ACMD41 Halt.
trientxp
сообщение Nov 5 2016, 17:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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

Сообщение отредактировал trientxp - Nov 6 2016, 06:13
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 5 2016, 18:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 270
Регистрация: 11-12-04
Пользователь №: 1 448



Перед ACMD41 выполнить CMD58 не пробовали? Она только "рекомендуется", но, кажется, попадались мне карты, которые без неё не инициализировались.
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 5 2016, 18:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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

Сообщение отредактировал trientxp - Nov 5 2016, 18:36
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 6 2016, 00:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 270
Регистрация: 11-12-04
Пользователь №: 1 448



А какие аргументы передаются в CMD8 и ACMD41?
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 6 2016, 06:20
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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 - Nov 6 2016, 06:51
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 6 2016, 07:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 270
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(trientxp @ Nov 6 2016, 09:20) *
cmd41: 0x69, 0x40,0,0,0

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

CRC, по-моему, лучше один раз включить и использовать постоянно.
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 6 2016, 10:27
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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

Сообщение отредактировал trientxp - Nov 6 2016, 10:28
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 6 2016, 14:04
Сообщение #8


.
******

Группа: Участник
Сообщений: 3 977
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

Сообщение отредактировал GetSmart - Nov 6 2016, 14:27


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 7 2016, 03:42
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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

Сообщение отредактировал trientxp - Nov 7 2016, 03:56
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 7 2016, 22:05
Сообщение #10


.
******

Группа: Участник
Сообщений: 3 977
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

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

Сообщение отредактировал GetSmart - Nov 8 2016, 05:22


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 8 2016, 03:36
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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 не принимаю последний бит.
Go to the top of the page
 
+Quote Post
trientxp
сообщение Nov 8 2016, 12:19
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-01-12
Пользователь №: 69 203



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

Сообщение отредактировал trientxp - Nov 8 2016, 12:23
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd November 2017 - 01:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01264 секунд с 7
ELECTRONIX ©2004-2016