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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Промлема инициализации 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
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

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

 


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


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