|
|
  |
SD Card - програмная реализация интерфейса, У кого нибудь есть примеры реализации взаимодействия с SD Card? |
|
|
|
Jan 9 2007, 14:50
|
Частый гость
 
Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402

|
Цитата(aaarrr @ Jan 9 2007, 13:59)  Цитата(Andrei.... @ Jan 9 2007, 13:49)  вопрос: изначально, при включении питания sd-карта ведь находится в sd-режиме? и я могу работать в нём? и инициализационная последовательность в этом случае будет ACMD41, CMD2, CMD3? я правильно понимаю?
Да, стартует карта в SD-режиме, и последовательность инициализации будет именно такой. А какое железо используется, на борту есть контроллер SD? С программной эмуляцией SD-режима я бы не связывался. всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB), Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает.
|
|
|
|
|
Jan 9 2007, 14:58
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Andrei.... @ Jan 9 2007, 14:50)  всё то же самое - ep9307, а с програмной реализацией я уже связался (D[0:3],CMD,CLK всё завёл на PortB) Интересно будет узнать, что из этого получится. CRC данных там шибко неудобно считать - нужно вычислить CRC16 для потока по каждой линии отдельно, если правильно помню. Можно все скопом, но придется написать извращенную функцию. Цитата(Andrei.... @ Jan 9 2007, 14:50)  Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает. А CMD0 подать не забыли? Без нее ничего работать не будет.
|
|
|
|
|
Jan 9 2007, 15:43
|
Частый гость
 
Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402

|
Цитата(aaarrr @ Jan 9 2007, 14:58)  Цитата(Andrei.... @ Jan 9 2007, 14:50)  Да кстати, команда ACMD41 ведь состоит из последовательности CMD55, CMD41...поэтому на данном этапе я посылаю CMD55 и жду ответа r1...но карта ничего не отвечает.
А CMD0 подать не забыли? Без нее ничего работать не будет. вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда!
|
|
|
|
|
Jan 9 2007, 16:08
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Цитата(Andrei.... @ Jan 9 2007, 15:43)  вон оно что выясняется...никакое CMD0 не подаю, дак CMD0 же переводит в SPI-режим или в Idle State CMD0 переводит исключительно в Idle State А вот CMD1 это уже SEND_OP_COND. Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится
|
|
|
|
|
Jan 9 2007, 16:16
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Andrei.... @ Jan 9 2007, 15:43)  дак CMD0 же переводит в SPI-режим или в Idle State, а ведь изначально карта находится в Idle State, ну я ничего и не подаю - включил питание и CMD55 туда! В SPI-режим карта переводится подачей CMD0 только при низком уровне CS. Кроме того, после включения карте нужно подать ~80 пустых циклов CLK. В Вашем случае еще понадобится включить четырехбитный режим - ACMD6. Цитата(sff @ Jan 9 2007, 16:08)  Откуда такая уверенность что карточка изначально в Idle State, может в sleep mode неходится По спецификации это действительно так. Однако, жизнь порой преподносит сюрпризы.
|
|
|
|
|
Jan 9 2007, 16:21
|
Частый гость
 
Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402

|
Цитата(sff @ Jan 9 2007, 16:08)  Цитата(Andrei.... @ Jan 9 2007, 15:43)  вон оно что выясняется...никакое 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)
|
|
|
|
|
Jan 9 2007, 16:35
|
Частый гость
 
Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402

|
Цитата(aaarrr @ Jan 9 2007, 16:16)  Кроме того, после включения карте нужно подать ~80 пустых циклов CLK. В Вашем случае еще понадобится включить четырехбитный режим - ACMD6. ~80 пустых циклов CLK на полёт не повлияло...а до четырёхбитного режима надо ещё дожить  ) Цитата(aaarrr @ Jan 9 2007, 16:28)  Должна сначала ответить на 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); ...
|
|
|
|
|
Jan 9 2007, 17:18
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Да немного запамятствовал я.. Цитата(Andrei.... @ Jan 9 2007, 16:35)  СТОП!!! Команда CMD0 ведь без ответа! Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает.
|
|
|
|
|
Jan 9 2007, 17:30
|
Частый гость
 
Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402

|
Цитата(sff @ Jan 9 2007, 17:18)  Да немного запамятствовал я.. Цитата(Andrei.... @ Jan 9 2007, 16:35)  СТОП!!! Команда CMD0 ведь без ответа!
Это в режиме SD CMD0 без ответа, а вот в SPI ответ R1 А вы уверены что у вас CRC7 правильно рассчитывается, ведь если на карточки проверка не прошла то она ничего и не отвечает. да, crc7 считается правильно, используется процедура любезно присланная aaarrr (сомневаться в правильности не приходится)
|
|
|
|
|
Jan 9 2007, 18:16
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Andrei.... @ Jan 9 2007, 16:35)  СТОП!!! Команда CMD0 ведь без ответа! Да, это в SPI режиме есть ответ, как уже заметили. Цитата(Andrei.... @ Jan 9 2007, 16:35)  а может у меня чего то с полярностью клока, как я понимаю у CLK активный уровень 1 Данные защелкиваются по фронту, а выставляются картой по спаду CLK. Цитата(Andrei.... @ Jan 9 2007, 17:43)  To aaarrr:
У вас присутствуют такие строки в примере: ... SSP1CPSR = 0x02; // 7.3728MHz SSP1CR0 = 0xc7; // SPI Mode 3 ... Это означает SSPCLKout=283kHz? Это ошибка - SSPCLKout будет 3.6864MHz.
|
|
|
|
|
Jan 10 2007, 12:17
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Цитата(Andrei.... @ Jan 10 2007, 12:04)  Однако, возвращаясь к вопросу о ~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.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|