Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по командам cmd12 cmd18 mmc sd
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
sergey sva
доброй ночи.

для инициализации mmc sd карты использовать буду команды cmd0 cmd55 acmd41, с cmd0 все понятно,
а cmd55 в поле аргумента должно содержать stuff bit что это это в описании которое есть у меня нечего про это не сказано.
zltigo
Цитата(sergey sva @ Jan 12 2008, 22:55) *
а cmd55 в поле аргумента должно содержать stuff bit что это это в описании которое есть у меня нечего про это не сказано.

Просто заполнитель (название само за себя говорит smile.gif )для получения фиксированного размера команды. Нули годятся.
sergey sva
Цитата(zltigo @ Jan 13 2008, 00:04) *
Просто заполнитель для получения фиксированного размера команды. Нули годятся.

благодарю, счас опробую smile.gif
sergey sva
описание на sd mmc на cmd18

Continuously transfers data blocks from card to
host until interrupted by a STOP_
TRANSMISSION command.

интересует такой вопрос, команда непрерывного чтения cmd18 до команды cmd12, чтение будет
происходить в одном секторе или подряд все адреса ? и еще такой вопрос команду cmd12 посылать прям в процессе чтения или сначала поднять cs потом опустить и послать cmd12 ?
zltigo
Moderator:
Так по каждой команде будем новую тему создавать????
Тему объединил с предыдущей.



Цитата(sergey sva @ Jan 13 2008, 16:30) *
интересует такой вопрос, команда непрерывного чтения cmd18 до команды cmd12, чтение будет
происходить в одном секторе или подряд все адреса ?

Так странный вопрос - она-же в отличие от cmd17 по жизни для чтения множества последовательных секторов предназначена.
Цитата
команду cmd12 посылать прям...

прямо в процессе.
sergey sva
отправляю команду cmd18 ,должен быть ответ R1 (0x00) получаю 0x20 ошибка адреса.
Цитата
unsigned int read (unsigned long adress, unsigned long len)

unsigned char cmd18[6]={0x52,0x00,0x00,0x00,0x00,0x00};
unsigned char cmd12[6]={0x4C,0x00,0x00,0x00,0x00,0x00};
unsigned char f1 = 0;
unsigned int f2 = 10;
//***************
if(adress & 0x01 ){cmd18[4] |= 0x01;}
if(adress & 0x02 ){cmd18[4] |= 0x02;}
if(adress & 0x04 ){cmd18[4] |= 0x04;}
if(adress & 0x08 ){cmd18[4] |= 0x08;}
if(adress & 0x10 ){cmd18[4] |= 0x10;}
if(adress & 0x20 ){cmd18[4] |= 0x20;}
if(adress & 0x40 ){cmd18[4] |= 0x40;}
if(adress & 0x80 ){cmd18[4] |= 0x80;}
//***************
if(adress & 0x0100 ){cmd18[3] |= 0x01;}
if(adress & 0x0200 ){cmd18[3] |= 0x02;}
if(adress & 0x0400 ){cmd18[3] |= 0x04;}
if(adress & 0x0800 ){cmd18[3] |= 0x08;}
if(adress & 0x1000 ){cmd18[3] |= 0x10;}
if(adress & 0x2000 ){cmd18[3] |= 0x20;}
if(adress & 0x4000 ){cmd18[3] |= 0x40;}
if(adress & 0x8000 ){cmd18[3] |= 0x80;}
//***************
if(adress & 0x010000 ){cmd18[2] |= 0x01;}
if(adress & 0x020000 ){cmd18[2] |= 0x02;}
if(adress & 0x040000 ){cmd18[2] |= 0x04;}
if(adress & 0x080000 ){cmd18[2] |= 0x08;}
if(adress & 0x100000 ){cmd18[2] |= 0x10;}
if(adress & 0x200000 ){cmd18[2] |= 0x20;}
if(adress & 0x400000 ){cmd18[2] |= 0x40;}
if(adress & 0x800000 ){cmd18[2] |= 0x80;}
//***************
if(adress & 0x01000000 ){cmd18[1] |= 0x01;}
if(adress & 0x02000000 ){cmd18[1] |= 0x02;}
if(adress & 0x04000000 ){cmd18[1] |= 0x04;}
if(adress & 0x08000000 ){cmd18[1] |= 0x08;}
if(adress & 0x10000000 ){cmd18[1] |= 0x10;}
if(adress & 0x20000000 ){cmd18[1] |= 0x20;}
if(adress & 0x40000000 ){cmd18[1] |= 0x40;}
if(adress & 0x80000000 ){cmd18[1] |= 0x80;}


adress = 1;
zltigo
Жуткий код sad.gif. Я пожалуй воздержусь от дальнейших комментариев. На последок намек - полагаю, что у Вас не SD V2+ карточка что-бы поддерживать такую адресацию.
sergey sva
Цитата
Жуткий код

это только , так сказать отладка smile.gif временно. если поделитесь способом поаккуратней буду очень благодарен smile.gif
Сергей Борщ
Цитата(sergey sva @ Jan 13 2008, 20:06) *
если поделитесь способом поаккуратней буду очень благодарен smile.gif
В лоб:
Код
cmd18[4] = address;
cmd18[3] = address >> 8;
cmd18[2] = address >> 16;
cmd18[1] = address >> 24;
Не говоря о том, что можно было описать cmd18 как упакованную структуру с читаемыми именами полей нужного размера.
sergey sva
Цитата(Сергей Борщ @ Jan 13 2008, 22:38) *
В лоб:
Код
cmd18[4] = address;
cmd18[3] = address >> 8;
cmd18[2] = address >> 16;
cmd18[1] = address >> 24;
Не говоря о том, что можно было описать cmd18 как упакованную структуру с читаемыми именами полей нужного размера.

да это поаккуратней будет, благодарю smile.gif
rv3dll(lex)
карточка обычная ?? не HC?

поставь адрес 0 не ошибёшься??

команда 17 выполняется?

инициализацию всю сделали

rca команда 7 что сказала?
Tcom
Привет, в командах CMD17 нужно указывать адрес начала сектора иначе будет ошибка 0х02, мож и в CMD18 также.
zltigo
Цитата(Tcom @ Jan 14 2008, 09:33) *
Привет, в командах CMD17 нужно указывать адрес начала сектора иначе будет ошибка 0х02, мож и в CMD18 также.

Естественно да, если, конечно,
Цитата
не SD V2+ карточка что-бы поддерживать такую адресацию.
rv3dll(lex)
на старых картах при чтении не обязательно ставить начало сектора!!!! при записи обязательно

а на хацешных он и так по 512 байт адресует
sergey sva
Указал нулевой адрес и процесс чтения пошел, поочереди вывожу на дисплей все что из нее приходит,
для наглядности между получениями из карты данных , вставил паузу 500мсек.
Возникла другая проблема (карта mini sd с переходником на mmc512мб) вставил я карту в ридер (в качестве ридера принтер hp photosmart 7450) и открыл с помощью 010editor (hex редактор) стер все записи и записал 0x00 вытащил карту снова вставил и считыватель перестал её видеть, выходит сообщение что нет доступа. вставляю в свой девайс карта на команды cmd0 cmd55 cmd41 отвечает нормально а по команде cmd 18 начинает читаться. может у кого были похожие проблемы?
rv3dll(lex)
возможно принтер не хочет работать с картой без файловой системы
one_man_show
Да, Вы вероятнее всего потерли все системные области со всеми вытекающими последствиями...
rv3dll(lex)
в обычном ридере и винхексом всё работает
sergey sva
да точно в обычном ридере все читается нормально, установил ридер у себя на комп и карта стала читаться. Только пока устанавливал сжог блог питания в компе, из за этого ридера, не знай уж на сколько эти встраиваемые ридеры совместимы с разами платами но у меня получилось такая проблемка:
встраиваемый ридер подключается к юсб внутренний на мат. плате 9штырьков. первые два +5 вторые два
дата , третие два дата ,четвертые два корпус и еще последний штырек остается, на нем у меня +5в.в ридер идут провода один ко одному и внутри последние (которые корпус) были запаяны с последним +5
после включения питания провода к атомы ридеру подогрелись ,комп конечно я тутже выключил но поздно блок питания успел крякнуть сегодня новый блок питания установил, откусил этот провод и все стало ок. Вот такая неприятная проблемка. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.