Перейти к содержанию
    

SD Card - програмная реализация интерфейса

вопрос: изначально, при включении питания sd-карта ведь находится в sd-режиме? и я могу работать в нём? и инициализационная последовательность в этом случае будет ACMD41, CMD2, CMD3? я правильно понимаю?

Да, стартует карта в SD-режиме, и последовательность инициализации будет именно такой. А какое железо используется, на борту есть контроллер SD? С программной эмуляцией SD-режима я бы не связывался.

всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB), Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB)

Интересно будет узнать, что из этого получится.

CRC данных там шибко неудобно считать - нужно вычислить CRC16 для потока по каждой линии отдельно, если правильно помню. Можно все скопом, но придется написать извращенную функцию.

 

Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает.

А CMD0 подать не забыли? Без нее ничего работать не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает.

А CMD0 подать не забыли? Без нее ничего работать не будет.

вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State

CMD0 переводит исключительно в Idle State

А вот CMD1 это уже SEND_OP_COND.

 

Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда!

В SPI-режим карта переводится подачей CMD0 только при низком уровне CS. Кроме того, после включения карте нужно подать ~80 пустых циклов CLK.

В Вашем случае еще понадобится включить четырехбитный режим - ACMD6.

 

Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится

По спецификации это действительно так. Однако, жизнь порой преподносит сюрпризы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State

CMD0 переводит исключительно в Idle State

А вот CMD1 это уже SEND_OP_COND.

 

Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится

 

Ещё раз посмотрел док-ию, после power up она действительно находится в idle state.

Кстати посылка сначала команды CMD0 не изменяет ситуацию. (на следущую за ней CMD55, по прежнему не отвечает, точнее я пока смотрю только стартовый 0-бит, линия CMD глухо висит в 1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати посылка сначала команды CMD0 не изменяет ситуацию. (на следущую за ней CMD55, по прежнему не отвечает, точнее я пока смотрю только стартовый 0-бит, линия CMD глухо висит в 1)

Должна сначала ответить на CMD0. "Пустые" клоки после старта подаются? Как долго ждете ответ на команду?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кроме того, после включения карте нужно подать ~80 пустых циклов CLK.

В Вашем случае еще понадобится включить четырехбитный режим - ACMD6.

 

~80 пустых циклов CLK на полёт не повлияло...а до четырёхбитного режима надо ещё дожить :))

 

Должна сначала ответить на CMD0. "Пустые" клоки после старта подаются? Как долго ждете ответ на команду?

 

СТОП!!! Команда CMD0 ведь без ответа!

А после CMD55 клок идёт постоянно (пока не возникнет стартовый бит ответа)... а может у меня чего то с полярностью клока, как я понимаю у CLK активный уровень 1, долно быть что типа такого:

#define SDCLK PBDR_bit.PxDATA0 /* PortB.0 */

#define SDCMD PBDR_bit.PxDATA1 /* PortB.1 */

...

SDCMD=cmd_bit;

SDCLK=1;

Sleep(10);

SDCLK=0;

Sleep(10);

...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да немного запамятствовал я..

 

СТОП!!! Команда CMD0 ведь без ответа!

Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 :)

 

А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да немного запамятствовал я..

 

СТОП!!! Команда CMD0 ведь без ответа!

Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 :)

 

А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает.

 

да, crc7 считается правильно, используется процедура любезно присланная aaarrr (сомневаться в правильности не приходится)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To aaarrr:

 

У вас присутствуют такие строки в примере:

...

SSP1CPSR = 0x02; // 7.3728MHz

SSP1CR0 = 0xc7; // SPI Mode 3

...

Это означает SSPCLKout=283kHz?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

СТОП!!! Команда CMD0 ведь без ответа!

Да, это в SPI режиме есть ответ, как уже заметили.

 

а может у меня чего то с полярностью клока, как я понимаю у CLK активный уровень 1

Данные защелкиваются по фронту, а выставляются картой по спаду CLK.

 

To aaarrr:

 

У вас присутствуют такие строки в примере:

...

SSP1CPSR = 0x02; // 7.3728MHz

SSP1CR0 = 0xc7; // SPI Mode 3

...

Это означает SSPCLKout=283kHz?

Это ошибка - SSPCLKout будет 3.6864MHz.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже всё заработало, запутка была в том что я байты не в той последовательности отправлял :)

Однако, возвращаясь к вопросу о ~80 пустых циклах, где сказано что их нужно отправлять (выяснилось что они влияют на полёт). Я так полагал, что достаточно поставить 8 clk перед отправкой любой команды, и это уже позволяеет выдержать все тайминги между командами и ответами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако, возвращаясь к вопросу о ~80 пустых циклах, где сказано что их нужно отправлять (выяснилось что они влияют на полёт). Я так полагал, что достаточно поставить 8 clk перед отправкой любой команды, и это уже позволяеет выдержать все тайминги между командами и ответами.

Если быть точным то там сказано 74 такта. Раздел Power-Up

After power up, the host starts the clock and sends the initializing sequence on the CMD line. This sequence is a

contiguous stream of logical ‘1’s. The sequence length is the maximum of 1msec, 74 clocks or the supply-ramp-uptime;

the additional 10 clocks (over the 64 clocks after what the card should be ready for communication) is

provided to eliminate power-up synchronization problems.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

почему то на команду ACMD41 приходит бит busy=0 и на последущую команду CMD2 не отвечает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...