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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SDHC vs SD. Идентификация карты., Не устанавливается "power-up status bit" в OCR
KAlex
сообщение Mar 28 2008, 10:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Порядок инициализации:
Код
  send_comstr( CMD_0, 0, 6);
  ocr = 0;
  do {
    send_comstr(CMD_55, 0, 6);
    send_comstr(ACMD_41, ocr, 6);
    ocr = (comstr->arg3)|(comstr->arg2<<8)|(comstr->arg1<<16)|(comstr->arg0<<24);
  }  while (!(comstr->arg0 & 0x80));

У обычной SD через два-три цикла бит power-up устанавливается.
SDHC отвечает, ответные аргументы и crc совпадают с SD, но power-up не устанавливается.
Нормального даташита на HC нет. Может там другой порядок идентификации.
Go to the top of the page
 
+Quote Post
abcdefg
сообщение Mar 29 2008, 13:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



Цитата(KAlex @ Mar 28 2008, 13:25) *
Порядок инициализации:
Код
  send_comstr( CMD_0, 0, 6);
  ocr = 0;
  do {
    send_comstr(CMD_55, 0, 6);
    send_comstr(ACMD_41, ocr, 6);
    ocr = (comstr->arg3)|(comstr->arg2<<8)|(comstr->arg1<<16)|(comstr->arg0<<24);
  }  while (!(comstr->arg0 & 0x80));

У обычной SD через два-три цикла бит power-up устанавливается.
SDHC отвечает, ответные аргументы и crc совпадают с SD, но power-up не устанавливается.
Нормального даташита на HC нет. Может там другой порядок идентификации.


См. ссылку в посте (про команду CMD8) - http://electronix.ru/forum/index.php?showtopic=35898
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 30 2008, 07:31
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Я правильно делаю?
После CMD0 посылаю CMD8 - не отвечает.
SD не HC тоже не отвечают, но работают(power-up устанавливается).
Код
  send_comstr( CMD_0, 0, 6);
  ocr = 0;
  do {
    send_comstr( CMD_8, 0, 6);  // !!! нет ответа
    send_comstr(CMD_55, 0, 6);
    send_comstr(ACMD_41, ocr, 6);
    ocr = (comstr->arg3)|(comstr->arg2<<8)|(comstr->arg1<<16)|(comstr->arg0<<24);
  }  while (!(comstr->arg0 & 0x80));

На 55 и 41 отвечает.
Работаю с ARM7 под Jtag. Проходил пошагово. В софте ошибок нет.
И может главное - работаю в SD-mode.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 30 2008, 10:52
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Сделал ещё
send_comstr( CMD_8, 0x1AA, 6); // отвечает 08,00,00,01,AA
Не помогло.
Go to the top of the page
 
+Quote Post
abcdefg
сообщение Mar 31 2008, 13:32
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



аналогичная проблема, CMD55 проходит нормально, а на ACMD41 приходит ответ с busy-битом и неправильной CRC. Если разберетесь - дайте знать
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 1 2008, 11:11
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Разобрался. Надо зажигать 30-й бит в ocr.

send_comstr(ACMD_41, ocr | (1<<30), 6);
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 3 2008, 10:22
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



C инициализацией разобрался.
Вот что непонятно, как адресовать блоки старше 4G?
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 8 2008, 12:38
Сообщение #8


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Не хотел создавать новую тему про SD, итак много, поэтому пишу сдесь.
C SPI режимом проблем не имею всё красиво работает, но не так быстро как это необходимо. В этой связи раэбираюсь с SD-mode. Подскажите пожалусто умные люди, не сочтите за труд, а то устал искать в доке ответы на столь простые вапросы, да и с англиским некоторые проблемы.
Вапросы:
1)Как посчитать CRC для разных команд? или где взять посчитаные?
2)И команды и ответы на команды по линии CMD?
3)В SD-mode данные поступают по 4-м линиям, порядок бит? Как распазнаётся первый байт данных?

Спасибо! С остальным думаю сам разберусь.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 9 2008, 07:13
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(skripach @ Apr 8 2008, 15:38) *
1)Как посчитать CRC для разных команд? или где взять посчитаные?

Код
unsigned char calc_crc7(unsigned char *ptr, signed char count ){
  char crc=0;
  unsigned char i,data;
  while (count--) {
    data=*ptr++;
    for (i=0;i<8;i++) {
      crc <<= 1;
      if ((data & 0x80)^(crc & 0x80)) crc ^=0x09;
      data <<= 1;
    }
  }
  return((crc<<1)|1);
}


Цитата(skripach @ Apr 8 2008, 15:38) *
2)И команды и ответы на команды по линии CMD?

Да.

Цитата(skripach @ Apr 8 2008, 15:38) *
3)В SD-mode данные поступают по 4-м линиям, порядок бит? Как распазнаётся первый байт данных?

Всегда старшим вперед. При 4-линиях старшая тетрада вперед.
После отсылки команды на чтение данных ждем(не забывая CLC) "0" на DAT0 - это стартовый бит. Далее пошли данные.
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 9 2008, 11:13
Сообщение #10


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Спасибо, с СRC правда уже и сам разобрался.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 10 2008, 10:45
Сообщение #11


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



А можно пару примеров команд с правильно посчитаной CRC, хочу проверить свою функцию.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 10 2008, 11:57
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



40 00 00 00 00 95 CMD_0
77 00 00 00 00 65 CMD_55
69 00 00 00 00 e5 ACMD_41
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 10 2008, 13:16
Сообщение #13


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Спасибо, проверил, всё работает. После отладки выложу свою функцию по расчёту CRC7 (ASM i8051), может кому-то пригодится.

Сообщение отредактировал skripach - Apr 10 2008, 13:17


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 10 2008, 22:59
Сообщение #14


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



В архиве моя функция по расчету CRC7 с подробнейшими коментариями + пример 'ручного' расчета + дока по CRC вообще.

Надеюсь кому-то будет полезно.

P.S. Возможно функция не самая оптимальная но работает.
Прикрепленные файлы
Прикрепленный файл  CRC7.rar ( 282.14 килобайт ) Кол-во скачиваний: 224
 


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 13 2008, 11:56
Сообщение #15


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Ещё вапросик:
Шлю карте след. команды
cmd0 - ответа нет
cmd55 - отвечает 37 00 00 01 20 83
acmd41 - ответа нет
Так и должно быть?????????
Все команды с нулевым аргументом, карта Apacer 2gb 60x.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:45
Рейтинг@Mail.ru


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