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

 
 
> Промлема инициализации SD-card в SD mode, Промлема инициализации SD-card в SD mode
Lblsa
сообщение Nov 3 2005, 15:23
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 3-11-05
Пользователь №: 10 437



Имеется SD-карточка с контроллером на ПЛИСе (прошивка с opencores.org).
При работе с SPI-режимом никаких проблем нету.
Теперь нужно поднять SD - режим.
Поднимаю CS в 1. При посылке команд CMD0, CMD55,ACMD41 никакого ответа не наблюдается (0xFF).
если опустить CS в 0 и выполнить последовательно команды CMD0,CMD55,ACMD41 то все отрабатывает нормально, но при посылке команды CMD2 возвращает 0x04 (Illegal command). Что в общем то и понятно.... в SPI режиме CMD2 нету sad.gif(

Как же все таки инициализировать SD режим??..
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 42)
Camelot
сообщение Nov 4 2005, 06:37
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Цитата
Имеется SD-карточка с контроллером на ПЛИСе (прошивка с opencores.org).
При работе с SPI-режимом никаких проблем нету.
Теперь нужно поднять SD - режим.
Поднимаю CS в 1. При посылке команд CMD0, CMD55,ACMD41 никакого ответа не наблюдается (0xFF).
если опустить CS в 0 и выполнить последовательно команды CMD0,CMD55,ACMD41 то все отрабатывает нормально, но при посылке команды CMD2 возвращает 0x04 (Illegal command). Что в общем то и понятно.... в SPI режиме CMD2 нету (

Как же все таки инициализировать SD режим??..


Так в SD режиме нога CSn является ногой данных DAT3, зачем ее трогать вообще? Нужно без всяких чипселектов подавать команды сразу на CMD пин.

Успехов!
Go to the top of the page
 
+Quote Post
Lblsa
сообщение Nov 4 2005, 11:34
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 3-11-05
Пользователь №: 10 437



Цитата(Camelot @ Nov 4 2005, 09:37)
Так в SD режиме нога CSn является ногой данных DAT3, зачем ее трогать вообще? Нужно без всяких чипселектов подавать команды сразу на CMD пин.

Успехов!
*


Я имел ввиду что CSn/DAT3 pin в SD режиме находится в 3 состоянии, уровень на ней лог "1" так как она подтянута к +3.3В....
Go to the top of the page
 
+Quote Post
Camelot
сообщение Nov 4 2005, 12:54
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Пины данных (D3-D0) и CMD подтянуты на 3.3 В.
После включения питания перед посылкой команды нужно подождать гдето клоков 80, затем чтобы выйти в трансфер режим, посылаются команды в порядке слево-направо: CDM0, CMD55, ACMD41, CMD2, CMD3, CMD7 (для 1-но битного SD режима). Если у вас не возвращаются ответы по линии CMD на посланные команды, то возможно проблема с подсчетом контрольной суммы (G(x) = x7 + x3 + 1).

Еще вопрос, на какой частоте вы работаете с SD?
Go to the top of the page
 
+Quote Post
Lblsa
сообщение Nov 4 2005, 14:06
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 3-11-05
Пользователь №: 10 437



Цитата(Camelot @ Nov 4 2005, 15:54)
Пины данных (D3-D0) и CMD подтянуты на 3.3 В.
После включения питания перед посылкой команды нужно подождать гдето клоков 80, затем чтобы выйти в трансфер режим, посылаются команды в порядке слево-направо: CDM0, CMD55, ACMD41, CMD2, CMD3, CMD7 (для 1-но битного SD режима). Если у вас не возвращаются ответы по линии CMD на посланные команды, то возможно проблема с подсчетом контрольной суммы (G(x) = x7 + x3 + 1).

Еще вопрос, на какой частоте вы работаете с SD?
*



На 25МГц.
так и инициализирую, только CMD55,ACMD41 2 раза повторяю...
первый раз с 0 аргументом, второй раз уже с битами Vdd.
Go to the top of the page
 
+Quote Post
Camelot
сообщение Nov 4 2005, 19:59
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Цитата
На 25МГц.
так и инициализирую, только CMD55,ACMD41 2 раза повторяю...
первый раз с 0 аргументом, второй раз уже с битами Vdd.


Я посылаю серию команд CMD55, ACMD41 с самого начала со следующим значением ACMD41:
2'b01, ACMD41, 32'h00FF8000, crc7, 1'b1,
пока не получу в ответ, что бит OCR взведен в 1.

Попробуйте частоту снизить до 20 МГц, у меня работает на этой частоте.
Go to the top of the page
 
+Quote Post
Lblsa
сообщение Nov 7 2005, 14:22
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 3-11-05
Пользователь №: 10 437



А повторяете команды в такой же последовательности? ACMD41:2'b01, ACMD41:32'h00FF8000 ???

И еще вопросик. Почему в первом ACMD41 - 2'b01 ?? В datasheet говорится, что первые 3 бита зарезервированы?
Go to the top of the page
 
+Quote Post
Camelot
сообщение Nov 8 2005, 09:34
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Сорри, не было меня.

Цитата
А повторяете команды в такой же последовательности? ACMD41:2'b01, ACMD41:32'h00FF8000 ???

parameter ACMD41=6'd41;

пакет ACMD41 я посылаю всегда в виде: {2'b01, ACMD41, 32'h00FF8000, crc7, 1'b1}


2'b01 - это стартовый бит и 1 говорит о том что это команда хоста.
Go to the top of the page
 
+Quote Post
LexaK
сообщение Jun 13 2007, 18:56
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 3-12-06
Из: Новороссийск
Пользователь №: 23 082



А нет ли у вас случаем библиотеки для работы с картой в SD-mode?
Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 26 2011, 19:27
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



Не могу разобраться в алгоритме расчета CRC в режиме обмена по родному SD-протоколу. Не мог бы кто-нибудь объяснить, иначе без этого вся работа по интерфейсу стала колом. Вот выдержка из мануала:
Цитата
CRC7
The CRC7 check is used for all commands, for all responses except type R3, and for the CSD and CID
registers. The CRC7 is a 7-bit value and is computed as follows:
Generator polynomial: G(x) = x7 + x3 + 1.
M(x) = (first bit) * xn + (second bit) * xn-1 +...+ (last bit) * x0
CRC[6...0] = Remainder [(M(x) * x7)/G(x)]
The first bit is the most left bit of the corresponding bit string (of the command, response, CID or CSD).
The degree n of the polynomial is the number of CRC protected bits decreased by one. The number of
bits to be protected is 40 for commands and responses (n = 39), and 120 for the CSD and CID (n =
119).


Сообщение отредактировал toretto - Apr 26 2011, 19:27
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 26 2011, 20:08
Сообщение #11


Гуру
******

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



Цитата(toretto @ Apr 26 2011, 23:27) *
Не могу разобраться в алгоритме расчета CRC в режиме обмена по родному SD-протоколу. Не мог бы кто-нибудь объяснить, иначе без этого вся работа по интерфейсу стала колом. Вот выдержка из мануала:

Это обычный CRC, что именно не понятно? Пример реализации на "C":
Код
unsigned int sd_crc7(unsigned char *buff, unsigned int len)
{
    unsigned int a, crc = 0;

    while(len--)
    {
        crc ^= *buff++;
        a = 8;
        do
        {
            crc <<= 1;
            if(crc & (1 << 8)) crc ^= 0x12;
        } while(--a);
    }
    return (crc & 0xfe);
}

Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 27 2011, 04:23
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



Спасибо. Функция получает строку, для которой необходимо рассчитать CRC (*buff), которая состоит из стартовой последовательности (0b1,0b0), 6 бит команды и 4 байт содержимого, и колличество бит в это строке -1 (len = 40-1)? я храню 4 байта информации в переменной типа unsigned long (32 бита), но функция получает указатель на число типа unsigned char. В чем ошибаюсь?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2011, 07:50
Сообщение #13


Гуру
******

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



Цитата(toretto @ Apr 27 2011, 08:23) *
В чем ошибаюсь?

Да ни в чем пока. Стартовые биты и код команды - это первый байт, дальше разделяете свой лонг на 4 байта от старшего к младшим, и получаете 5 байт, для которых и нужно подсчитать CRC. Считаете CRC, добавляете к результату стоповый бит (1 в нулевой позиции) и получаете требуемую последовательность.
Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 27 2011, 08:49
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



Свой лонг и команду распихиваю в массив с элементами типа unsigned char. Далее, как я понимаю, указатель
*contentCRCPtr (у Вас он звался *buff) цикл за циклом проводит со всей последовательностью свои хитрые операции. Я кдаю ему CMD0 в виде 0х40 и нули во все 4 байта массива. Расчитанное значение равно 0x66c, после приведения к типу чар остается 0x6C. Возможно я неправильно понимаю работу указателей или не так передаю начало массива функции?..
Код
unsigned char t_cmd (unsigned char cmd, unsigned long content)
{
    unsigned long mask = 0b10000000;
    unsigned char n, res, CRC = 0, contentCRC[5]={0};
    ...
    contentCRC[0] = cmd;                // В первую ячейку кладу команду
    contentCRC[1] = content;
    contentCRC[2] = content>>8;
    contentCRC[3] = content>>16;
    contentCRC[4] = content>>24;            // В остальные распихиваю полезное содержимое

    CRC = sd_crc7(contentCRC, 39);
    ...
}

unsigned int sd_crc7(unsigned char *contentCRCPtr, unsigned int len)
{
    unsigned int a, crc = 0;

    while(len--)
    {
        crc ^= *contentCRCPtr++;
        a = 8;
        do
        {
            crc <<= 1;
            if(crc & (1 << 8)) crc ^= 0x12;
//            if(crc & 0x100) crc ^= 0x12;
        } while(--a);
    }
    return (crc & 0xfe);
}


Сообщение отредактировал toretto - Apr 27 2011, 08:49
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2011, 08:53
Сообщение #15


Гуру
******

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



Длина должна быть в байтах - 5. И порядок байт для аргумента (content) у вас развернут - он передается от старших к младшим.
Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 27 2011, 13:10
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



Спасибо, добрый человек. Все так, как Вы сказали. Сумму считает правильно sm.gif
Go to the top of the page
 
+Quote Post
toretto
сообщение Nov 4 2011, 11:29
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



возникло вот такое затруднение: при инициализации в SD-режиме посылаю CMD0 (0x40, 0, 0, 0, 0, 0x95), реакции карты никакой. После шлю еще 40 пустых клоков и после в цикле выдаю команду CMD55 (0x77, 0, 0, 0, 0, 0x65). После опять реакции ноль. При посылке CMD0 для сброса в SPI (при CS = 0) карта высылает 0x01 (что верно). Не понимаю, почему в SD-режиме тишина. Все командные ноги и клок подтянуты 10кОм к +3.3В. Работаю по заднему фронту клока (по переднему не работает даже в SPI). После включения питания шлю около 160 пустых тактов, частота 200 кГц. Поделитесь мыслями, у кого есть.

Сообщение отредактировал toretto - Nov 4 2011, 11:52
Go to the top of the page
 
+Quote Post
toretto
сообщение Jan 31 2012, 08:03
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



приведу осцилограмки

ниже команда cmd8:
Прикрепленное изображение


посылка cmd0 и после 10 байтной паузы cmd 8:
Прикрепленное изображение


Go to the top of the page
 
+Quote Post
toretto
сообщение Feb 9 2012, 12:32
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



карту проинициализировал, видимо была нестыковка по фронтам.
Можно ли отключить командой CMD59 CRC_ON_OFF проверку контрольной суммы? или команда только для режима SPI?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 9 2012, 12:43
Сообщение #20


Гуру
******

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



Нет, отключить можно только в режиме SPI.
Go to the top of the page
 
+Quote Post
toretto
сообщение Feb 16 2012, 08:05
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



в спецификации на странице 8 приведена диаграмма записи в карту. из нее видно, что после записи карта возвращает по линии cmd0 ответ: некую приставку и сигнал busy. что за приставка и сигнал, не подскажете? или где почитать можно?
Go to the top of the page
 
+Quote Post
toretto
сообщение Feb 29 2012, 05:40
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



Цитата(toretto @ Nov 4 2011, 14:29) *
возникло вот такое затруднение: при инициализации в SD-режиме посылаю CMD0 (0x40, 0, 0, 0, 0, 0x95), реакции карты никакой. После шлю еще 40 пустых клоков и после в цикле выдаю команду CMD55 (0x77, 0, 0, 0, 0, 0x65). После опять реакции ноль. При посылке CMD0 для сброса в SPI (при CS = 0) карта высылает 0x01 (что верно). Не понимаю, почему в SD-режиме тишина. Все командные ноги и клок подтянуты 10кОм к +3.3В. Работаю по заднему фронту клока (по переднему не работает даже в SPI). После включения питания шлю около 160 пустых тактов, частота 200 кГц. Поделитесь мыслями, у кого есть.

проблема оказалась в емкостях линий, добавив несколько десятков пФ об землю на линиях CLK, CMD проблема пропала. sm.gif вот такой интересный нюанс.
по непонятным причинам после посылки CMD7 SELECT/DESELECT_CARD карта отвечает (hex) 07 00 00 07 00 75 и после молча терпит все следующие команды (на cmd13, cmd55, cmd7 ответов нет). если я правильно расшифровал, 7 => карта перешла в program state (в DSh сказано, карта должна послать сигнал busy,повесив "0" на DAT0, у меня как висела "1", так и висит). в чем может быть трабл? повторный сброс CMD0 работает

Сообщение отредактировал toretto - Feb 29 2012, 06:25
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 29 2012, 09:54
Сообщение #23


Гуру
******

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



Цитата(toretto @ Feb 29 2012, 09:40) *
проблема оказалась в емкостях линий, добавив несколько десятков пФ об землю на линиях CLK, CMD проблема пропала. sm.gif вот такой интересный нюанс.

Скорее всего, у вас наводка идет с линии CLK.

Цитата(toretto @ Feb 29 2012, 09:40) *
по непонятным причинам после посылки CMD7 SELECT/DESELECT_CARD карта отвечает (hex) 07 00 00 07 00 75 и после молча терпит все следующие команды (на cmd13, cmd55, cmd7 ответов нет). если я правильно расшифровал, 7 => карта перешла в program state (в DSh сказано, карта должна послать сигнал busy,повесив "0" на DAT0, у меня как висела "1", так и висит). в чем может быть трабл? повторный сброс CMD0 работает

Карта была в состоянии stby, вы выполнили SELECT, после чего она должна перейти в tran.
Go to the top of the page
 
+Quote Post
toretto
сообщение Feb 29 2012, 12:57
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



поставил в цикле CMD3, в итоге на первую команду пришел ответ "stand by", на вторую "programe state"... и все.... cranky.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 29 2012, 13:03
Сообщение #25


Гуру
******

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



Вы лучше опишите подробно, что передается, и что отвечает карта. С самого начала, т.е. с CMD0.
Go to the top of the page
 
+Quote Post
toretto
сообщение Mar 1 2012, 06:37
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



1. 100 клоков
2. CMD0 0x40, 0, 0, 0, 0 0x95 -> ответа нет
3. 80 клоков
4. CMD8 0x48, 0, 0, 1, 0xAA, 0x87 -> 0x08, 0, 0, 1, 0xAA, 0x13
5. CMD55 0x55, 0, 0, 0, 0, 0x65 -> 0x55, 0, 0, 1, 0x20, 0x83
6. CMD41 0x69, 0, 0xFF, 0x80, 0, 0x80, 0x85 -> 0x3F, 0, 0xAA, 0x80, 0, 0xFF
........... 5-6 в цикле до получения бита busy status "1" .................
7. CMD55 0x55, 0, 0, 0, 0, 0x65 -> 0x55, 0, 0, 1, 0x20, 0x83
8. CMD41 0x69, 0, 0xFF, 0x80, 0, 0x80, 0x85 -> 0x3F, 0x80, 0xAA, 0x80, 0, 0xFF
9. CMD2 0x42 0, 0, 0, 0, 0x4D -> длинный ответ, просто фиксирую факт, что он есть
10. CMD3 0x43 0, 0, 0, 0, 0x4D -> 0x03, 0x02, 0x60, 0x05, 0, 0x5D
11. CMD3 0x43 0, 0, 0, 0, 0x4D -> 0x03, 0x02, 0x61, 0x07, 0, 0x2F -- вот тут уже 7 в ответе - prg state
.... пауза 600 мкс......
12. CMD7 0x47 0x02, 0x61, 0, 0, 0x7B -> 0x7, 0x0, 0x0, 0x7, 0x0, 0x75
13. CMD55 0x55, 0, 0, 0, 0, 0x65 -> и тишина.....

Сообщение отредактировал toretto - Mar 1 2012, 08:05
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 1 2012, 12:01
Сообщение #27


Гуру
******

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



Цитата(toretto @ Mar 1 2012, 10:37) *
13. CMD55 0x55, 0, 0, 0, 0, 0x65 -> и тишина.....

Все правильно: вы же указали 0 в качестве RCA.
Go to the top of the page
 
+Quote Post
toretto
сообщение Mar 1 2012, 13:01
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



спасибо. глаз замылился, совсем забыл об RCA в этой команде. a14.gif
Go to the top of the page
 
+Quote Post
toretto
сообщение Mar 12 2012, 07:26
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



del

Сообщение отредактировал toretto - Mar 12 2012, 07:57
Go to the top of the page
 
+Quote Post
nikita1584
сообщение Mar 27 2012, 16:05
Сообщение #30





Группа: Новичок
Сообщений: 5
Регистрация: 27-03-12
Пользователь №: 71 035



Здравствуйте! Дабы не плодить новую ветку по работе с SD картой, напишу здесь. Помогите, пожалуйста, с записью на SD-карту в режиме SD. Инициализация проходит успешно, чтение так же корректно (совпадает с тем что я вижу на осциллографе). Последовательность команд, которую я отправляю:

CMD0, CMD8, CMD55, ACMD41,CMD2,CMD3,CMD9,CMD7,CMD55,ACMD6, далее пишу CMD24 и читаю CMD17

Считаю CRC для данных правильно, подтвержением тому - совпадение вычисленной моей CRC и полученной от карты при чении. Частота тактирования 257 КГц, слот SD карты общается с FPGA. При записи на карту, на середину данных приходится фронт клока (данные изменяю от спада до спада).

Большое спасибо!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2012, 16:42
Сообщение #31


Гуру
******

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



А вопрос-то в чем? Что и как не работает?
Go to the top of the page
 
+Quote Post
nikita1584
сообщение Mar 28 2012, 09:27
Сообщение #32





Группа: Новичок
Сообщений: 5
Регистрация: 27-03-12
Пользователь №: 71 035



Я читаю данные, которые изначально были на карте, а не те, которые пытался записать.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 30 2012, 13:32
Сообщение #33


Местный
***

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



Цитата(nikita1584 @ Mar 27 2012, 20:05) *
Считаю CRC для данных правильно, подтвержением тому - совпадение вычисленной моей CRC и полученной от карты при чении.


Как то не вяжется.
У Вас есть блок данных для записи, для него считаем CRC16.
Как можно получить значение crc от карты и сравнить со своим значением, если блок не пишется?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 30 2012, 13:44
Сообщение #34


Гуру
******

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



Цитата(KAlex @ Mar 30 2012, 17:32) *
Как можно получить значение crc от карты и сравнить со своим значением, если блок не пишется?

Проверить работу CRC можно при чтении.

Цитата(nikita1584 @ Mar 28 2012, 13:27) *
Я читаю данные, которые изначально были на карте, а не те, которые пытался записать.

Опишите максимально подробно, что происходит на шине после CMD24 - токены, ответы, BUSY и т.д.
Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 3 2012, 06:04
Сообщение #35


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



не хочу заводить новую тему о SD-картах, продолжу тут. Установил размер чтения 1024 бита (2 сектора). читаю командой CMD17, каждый раз новый сектор (не последующий). Задержка между посылкой команды и началом передачи данных ~500 мкс. Возможно ли эту задержку уменьшить как минимум на порядок? карта Inno Disk 2GB, class 10.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2012, 06:12
Сообщение #36


Гуру
******

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



Цитата(toretto @ Apr 3 2012, 10:04) *
читаю командой CMD17, каждый раз новый сектор (не последующий). Задержка между посылкой команды и началом передачи данных ~500 мкс. Возможно ли эту задержку уменьшить как минимум на порядок?

Нет, на случайном чтении задержку убрать не получится.
Go to the top of the page
 
+Quote Post
toretto
сообщение Apr 3 2012, 08:01
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



а как ведут себя карты с индексом скорости х150? например Transcend 133x SD 2 Гб (TS2GSD133). за счет чего вырастает скорость чтения у карт разных классов?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2012, 08:39
Сообщение #38


Гуру
******

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



Все это скорости линейных операций. На случайном чтении может выручить только кэш в какой-то степени.
Go to the top of the page
 
+Quote Post
nikita1584
сообщение Apr 3 2012, 11:52
Сообщение #39





Группа: Новичок
Сообщений: 5
Регистрация: 27-03-12
Пользователь №: 71 035



отправляю CMD24: 0x580010080065
получаю ответ 0x18000009005D
отправляю данные (512 байт + старт + CRC + стоп), протактировав карточку до этого тактов 300 тактов:
0x00123456
0x789ABCDE
0xF0123456
0x789ABCDE
0xF0123456
0x789ABCDE
0xF0123456
0x789ABCDE
...
0x789ABCDE
0xFCD67DEF
0x92352A7D
0x1FFFFFFF
т.е. CRC = CD67 DEF9 2352 A7D1
первый ноль в первом блоке - старт бит
затем я тактирую около 6000 тактов
читаю статус CMD13: 0x4D000009003F
респонс от CDM13: 0x0D000009003F
далее, читаю CMD17: 0x51001008005F
ответ: 0x110000090067

линия DAT0 после попытки записи в высоком состоянии
старт бит для данных для записи в режиме SD - это один такт нулей или как SPI - 0xFC?

Сообщение отредактировал nikita1584 - Apr 3 2012, 11:56
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 10 2012, 08:20
Сообщение #40


Местный
***

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



Цитата(nikita1584 @ Apr 3 2012, 15:52) *
читаю статус CMD13: 0x4D000009003F
респонс от CDM13: 0x0D000009003F


Кажется я понял.
RCA нулевой.
А как посылается CMD7? И что в ответ?
Go to the top of the page
 
+Quote Post
nikita1584
сообщение Apr 11 2012, 09:32
Сообщение #41





Группа: Новичок
Сообщений: 5
Регистрация: 27-03-12
Пользователь №: 71 035



Извиняюсь, я не правильно написал, RCA не нулевой. 13-ю команду я посылаю в таком виде:
CMD13: 0x4D00020000B1
респонс на CMD13: 0x0D000009003F

выбираю карточку я так CMD7: 0x47000200003F

Было замечено следующее: после попытки записать блок 17-й командой и тактирования, на линии данных я увидел 0xFFFF....FFFF EFE FFFF....FFFF, значит ли это что где-то ошибка?

Ещё я пробовал записать 25-й командой, остонавливаю 12-й командой и спрашиваю статус 13-й (респонс на 13-ю команду такой же). На осциллографе я видел что линия DAT0 находилась в низком состоянии некоторое время, но блок всё равно не записался

может я не тот адрес указываю при чтении.. (задаю такой же как на запись)
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 11 2012, 14:11
Сообщение #42


Местный
***

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



А какой респонс на CMD3 при инициализации карты?
И CMD7 тоже интересует.
Go to the top of the page
 
+Quote Post
nikita1584
сообщение Apr 11 2012, 20:06
Сообщение #43





Группа: Новичок
Сообщений: 5
Регистрация: 27-03-12
Пользователь №: 71 035



Большое спасибо тем кто пытался помочь!

Я до записи попробовал послать 16-ю команду (установить длину блока), потом 23-й командой установил количество блоков, равное единице и потом ACMD22 поставил количество блоков, которое должно быть записано. После этого попытался записать 25-й командой (WRITE_BLOCK_MULTIPLE), и попытка удалась.

Кстати, в респонсе от CMD3 устанавливается 5-й бит статуса, т.е. APP_CMD что значит "The card will expect ACMD, or an indication that the command has been interpreted as ACMD" Хотя до того я 55-ю не посылал, а посылал вторую.

Сообщение отредактировал nikita1584 - Apr 11 2012, 20:08
Go to the top of the page
 
+Quote Post

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

 


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


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