rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба вопрос: изначально, при включении питания sd-карта ведь находится в sd-режиме? и я могу работать в нём? и инициализационная последовательность в этом случае будет ACMD41, CMD2, CMD3? я правильно понимаю? Да, стартует карта в SD-режиме, и последовательность инициализации будет именно такой. А какое железо используется, на борту есть контроллер SD? С программной эмуляцией SD-режима я бы не связывался. всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB), Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB) Интересно будет узнать, что из этого получится. CRC данных там шибко неудобно считать - нужно вычислить CRC16 для потока по каждой линии отдельно, если правильно помню. Можно все скопом, но придется написать извращенную функцию. Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает. А CMD0 подать не забыли? Без нее ничего работать не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает. А CMD0 подать не забыли? Без нее ничего работать не будет. вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergforce 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State CMD0 переводит исключительно в Idle State А вот CMD1 это уже SEND_OP_COND. Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда! В SPI-режим карта переводится подачей CMD0 только при низком уровне CS. Кроме того, после включения карте нужно подать ~80 пустых циклов CLK. В Вашем случае еще понадобится включить четырехбитный режим - ACMD6. Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится По спецификации это действительно так. Однако, жизнь порой преподносит сюрпризы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба вон оно что выясняется...никакое 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба Кстати посылка сначала команды CMD0 не изменяет ситуацию. (на следущую за ней CMD55, по прежнему не отвечает, точнее я пока смотрю только стартовый 0-бит, линия CMD глухо висит в 1) Должна сначала ответить на CMD0. "Пустые" клоки после старта подаются? Как долго ждете ответ на команду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба Кроме того, после включения карте нужно подать ~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); ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergforce 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба Да немного запамятствовал я.. СТОП!!! Команда CMD0 ведь без ответа! Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 :) А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба Да немного запамятствовал я.. СТОП!!! Команда CMD0 ведь без ответа! Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 :) А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает. да, crc7 считается правильно, используется процедура любезно присланная aaarrr (сомневаться в правильности не приходится) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба To aaarrr: У вас присутствуют такие строки в примере: ... SSP1CPSR = 0x02; // 7.3728MHz SSP1CR0 = 0xc7; // SPI Mode 3 ... Это означает SSPCLKout=283kHz? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 января, 2007 Опубликовано 9 января, 2007 · Жалоба СТОП!!! Команда CMD0 ведь без ответа! Да, это в SPI режиме есть ответ, как уже заметили. а может у меня чего то с полярностью клока, как я понимаю у CLK активный уровень 1 Данные защелкиваются по фронту, а выставляются картой по спаду CLK. To aaarrr: У вас присутствуют такие строки в примере: ... SSP1CPSR = 0x02; // 7.3728MHz SSP1CR0 = 0xc7; // SPI Mode 3 ... Это означает SSPCLKout=283kHz? Это ошибка - SSPCLKout будет 3.6864MHz. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 10 января, 2007 Опубликовано 10 января, 2007 · Жалоба Похоже всё заработало, запутка была в том что я байты не в той последовательности отправлял :) Однако, возвращаясь к вопросу о ~80 пустых циклах, где сказано что их нужно отправлять (выяснилось что они влияют на полёт). Я так полагал, что достаточно поставить 8 clk перед отправкой любой команды, и это уже позволяеет выдержать все тайминги между командами и ответами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergforce 0 10 января, 2007 Опубликовано 10 января, 2007 · Жалоба Однако, возвращаясь к вопросу о ~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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rain1975 0 10 января, 2007 Опубликовано 10 января, 2007 · Жалоба почему то на команду ACMD41 приходит бит busy=0 и на последущую команду CMD2 не отвечает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться