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

 
 
15 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> SD Card - програмная реализация интерфейса, У кого нибудь есть примеры реализации взаимодействия с SD Card?
Andrei....
сообщение Jan 22 2007, 15:21
Сообщение #46


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

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Любопытный момент: есть две SD карты (Transcend 512 и 256 Mb) на одной написано 80x На другой 45x, как я понимаю скоростные характеристики. Однако в CSD регистре как у первой, так и у второй в поле TRAN_SPEED вижу 25 Mbit/s. Т.е макс. скорости (по чтению) декларируются одинаковые. Вопрос в чём же разница между 80х и 45х?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 22 2007, 15:29
Сообщение #47


Гуру
******

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



25Мбит/линию - это скорость интерфейса, и, скорее всего, у всех так написано. А разница между картами 80х и 45х должна выражаться в большей скорости выполнения команд записи и чтения у первых.
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Jan 23 2007, 12:43
Сообщение #48


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

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Почему при чтении блоков с адресов близких к максимальной ёмкости карты она просто не отвечает, так задумано?
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 1 2007, 13:54
Сообщение #49


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(Andrei.... @ Jan 23 2007, 13:43) *
Почему при чтении блоков с адресов близких к максимальной ёмкости карты она просто не отвечает, так задумано?


А у меня она вообще не отвечает на комманду чтения сектора. sad.gif
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 1 2007, 14:10
Сообщение #50


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(Andrei.... @ Dec 28 2006, 16:13) *
У кого нибудь есть примеры реализации взаимодействия с SD Card? Хотелось бы взглянуть.


Как и когда можно подавать комманду чтения блока?
Потому что у меня блок не читается.

Остановился на следующем:
Подал комманду CMD16 с аргументом 1024 (для проверки)
Карточка выдала 0x40 - неверный аргумент
Потом подаю CMD16 c аргументом 512.
Ответ - 0x00, т.е все ок.

Далее подаю комманду CMD17: и все виснет
получаю одни 0xFF, response r1 нету и в помине.
Не говоря уже о признаке начала блока 0xFE.
help.gif
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Feb 1 2007, 15:19
Сообщение #51


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

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Цитата(Fortune @ Feb 1 2007, 14:10) *
Как и когда можно подавать комманду чтения блока?
Потому что у меня блок не читается.

Остановился на следующем:
Подал комманду CMD16 с аргументом 1024 (для проверки)
Карточка выдала 0x40 - неверный аргумент
Потом подаю CMD16 c аргументом 512.
Ответ - 0x00, т.е все ок.

Далее подаю комманду CMD17: и все виснет
получаю одни 0xFF, response r1 нету и в помине.
Не говоря уже о признаке начала блока 0xFE.
help.gif


1. Что касается команды CMD16, то BLOCKLEN обычно может быть от 1 до 512, карточки с возможной длиной более 512 не встречал.
2. Команду CMD17 подаётся в состоянии tran, вы правильно подаёте её, т.к вы находитесь в этом состоянии (иначе бы команда и CMD16 не работала). Проблема видимо в получении данных по линии DAT0-3(или DAT0 если 1-битный режим). Убедитесь что работает правильно код получения даныых по линии данных.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 1 2007, 16:28
Сообщение #52


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(Andrei.... @ Feb 1 2007, 16:19) *
1. Что касается команды CMD16, то BLOCKLEN обычно может быть от 1 до 512, карточки с возможной длиной более 512 не встречал.
2. Команду CMD17 подаётся в состоянии tran, вы правильно подаёте её, т.к вы находитесь в этом состоянии (иначе бы команда и CMD16 не работала). Проблема видимо в получении данных по линии DAT0-3(или DAT0 если 1-битный режим). Убедитесь что работает правильно код получения даныых по линии данных.


Согласен с вами полностью, вот только одного не могу понять:
В принципе, если я достаточно внимательно читал мануал,
то CMD17 должна выдать хотя бы R1,
Использую ту же процедуру вызова что и для CMD16
вот только ответа нет.
Может надо выждать какое-то время, я не знаю...
Я уже даже написал цикл, в котором жду какого-либо
ответа, отличного от 0xFF, но программа зацикливается.

Режим у меня действительно однобитный, точнее SPI.
Инициализацию проводил коммандой CMD1,
хотя советуют ACMD41,
CSD тоже считался:
00 5D 01 32 13 59 80 E3 76 D9 CF FF 16 40 00 4F

Вот кусок кода, который у меня шлет комманду (пока ATMEGA128, далее планирую перевести на ARM, его пока только изучаю)

unsigned char MMCCommand(unsigned char command, unsigned long adress)
{
SPI_WRITE(0xFF); //Dummy write
SPI_WAIT();
SPI_WRITE(command);
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>24)); //MSB of adress
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>16));
SPI_WAIT();
SPI_WRITE((unsigned char)(adress>>8));
SPI_WAIT();
SPI_WRITE((unsigned char)adress); //LSB of adress
SPI_WAIT();
SPI_WRITE(0xFF); //dummy checksum
SPI_WAIT();
SPI_WRITE(0xFF); //16 bit response
SPI_WAIT();
SPI_WRITE(0xFF);
SPI_WAIT();
}
return SPDR.

Если я правильно понимаю эта процедура должна у меня возвратить R1,
и возвращает на комманды CMD1, CMD9, CMD16.
(для CMD0 не подходит, там надо CRC 0x95).

Что ж такого особенного у комманды CMD17 что она не выдает ответ R1?

Такой же ответ, тоесть никакого (0xFF), я получал от карточки на комманду
CMD17, когда забыл CHIP SELECT подать, но уже исправил.

P.S. Я конечно не исключаю ошибок в своем коде, но может дело
в чем-то другом, о чем я даже не догадываюсь?
может есть какие-то особенности с коммандой чтения блока?
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Feb 1 2007, 17:37
Сообщение #53


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

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Как я понимаю вы пытаетесь работать в SPI режиме (я работал тольков SD-режиме). Судя по описания процедура инициализации SPI-режима должна начинатся так: командой CMD0 с активным CS (в нуле), далее идёт CMD1 и.т.д.
Может карта осталась в SD-режиме.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 1 2007, 17:44
Сообщение #54


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(Andrei.... @ Feb 1 2007, 16:19) *
1. Что касается команды CMD16, то BLOCKLEN обычно может быть от 1 до 512, карточки с возможной длиной более 512 не встречал.
2. Команду CMD17 подаётся в состоянии tran, вы правильно подаёте её, т.к вы находитесь в этом состоянии (иначе бы команда и CMD16 не работала). Проблема видимо в получении данных по линии DAT0-3(или DAT0 если 1-битный режим). Убедитесь что работает правильно код получения даныых по линии данных.


Вы все-таки были правы, в моем коде была ошибка, пока правда не знаю в чем именно
(разберусь-напишу), потому что переписал заново с нуля участок программы чтения сектора.
Уже получил ответ R1.
Пойду дописывать код.

Спасибо!
a14.gif
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Feb 1 2007, 20:07
Сообщение #55


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Fortune @ Feb 1 2007, 15:28) *
Если я правильно понимаю эта процедура должна у меня возвратить R1,
и возвращает на комманды CMD1, CMD9, CMD16.
(для CMD0 не подходит, там надо CRC 0x95).

Что ж такого особенного у комманды CMD17 что она не выдает ответ R1?


Вот кусок кода который у меня работает на AVR и ARM.
Прикрепленные файлы
Прикрепленный файл  mmc.zip ( 1.94 килобайт ) Кол-во скачиваний: 442
 
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 2 2007, 15:26
Сообщение #56


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(AlexBoy @ Feb 1 2007, 21:07) *
Вот кусок кода который у меня работает на AVR и ARM.


a14.gif
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 2 2007, 15:37
Сообщение #57


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Может кто-то поделится информацией насчет следующего.

Считал блок с SD-карты, но почему-то нулевой блок на самом деле оказался не нулевым.
WinHex показал совсем другой результат.
Короче в ВинГексе я не нашел того блока который считал контроллером.
Хотя когда считал блок под номером 10000 (карточка у меня на 16 Мб),
то он полностью совпал с тем что выдал WinHex (номер не смотрел).

Думается, что задав начальный адрес 0, я попал в зашифрованную область карты
(такая вроде бы сущетвует,если я не ошибаюсь). Или нет?
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Feb 2 2007, 17:35
Сообщение #58


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

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Цитата(Fortune @ Feb 2 2007, 15:37) *
Может кто-то поделится информацией насчет следующего.

Считал блок с SD-карты, но почему-то нулевой блок на самом деле оказался не нулевым.
WinHex показал совсем другой результат.
Короче в ВинГексе я не нашел того блока который считал контроллером.
Хотя когда считал блок под номером 10000 (карточка у меня на 16 Мб),
то он полностью совпал с тем что выдал WinHex (номер не смотрел).

Думается, что задав начальный адрес 0, я попал в зашифрованную область карты
(такая вроде бы сущетвует,если я не ошибаюсь). Или нет?


Подозреваю что дело в логической адресации и физической адресации блоков, дело в том что нулевой блок не имеет логического адреса, а соответственно блок с физ.номером 1 имеет логический адрес 0. Видимо WinHex (и другие программы) через Win-ды видят логическое пространство.
Соответственно считав с карты блок с адреса 512, видимо в WinHex'e он будет по нулевому адресу, проверьте интересно.
А физический нулевой блок это просто бутовый блок (см. FILE SYSTEM SPECIFICATION).

Кстати с нулевым блоком связаны интересные моменты, если его стереть (или испортить) то Wind'ы не смогут отформатировать карту, вот так вот они сделаны.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 5 2007, 15:22
Сообщение #59


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(Andrei.... @ Feb 2 2007, 18:35) *
Подозреваю что дело в логической адресации и физической адресации блоков, дело в том что нулевой блок не имеет логического адреса, а соответственно блок с физ.номером 1 имеет логический адрес 0. Видимо WinHex (и другие программы) через Win-ды видят логическое пространство.
Соответственно считав с карты блок с адреса 512, видимо в WinHex'e он будет по нулевому адресу, проверьте интересно.
А физический нулевой блок это просто бутовый блок (см. FILE SYSTEM SPECIFICATION).

Кстати с нулевым блоком связаны интересные моменты, если его стереть (или испортить) то Wind'ы не смогут отформатировать карту, вот так вот они сделаны.


Да, примерно так оно и получилось. Только немного смущает что у 16Мб карточки оказалось 57 скрытых секторов, а в 32Мб - вообще нету скрытых.
В 16Мб карточке первый отображаемый в WinHex сектор:
Physical sector No:57
Logical sector No:0

Для 32Мб - просто выдает номер сектора, не говорит логический это или физический.
Непонятно почему в одной карточке есть эти скрытые сектора, а в другой - нет.
Форматирование ничего не поменяло. Может надо что-то типа lowformat, чтобы убрать невидимые сектора, или это невозможно?

А что это за документ такой FILE SYSTEM SPECIFICATION? Это случайно не тот, который Sandisk за деньги распространяет? а то я его не видел smile.gif
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Feb 5 2007, 19:24
Сообщение #60


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Fortune @ Feb 5 2007, 14:22) *
Цитата(Andrei.... @ Feb 2 2007, 18:35) *

Подозреваю что дело в логической адресации и физической адресации блоков, дело в том что нулевой блок не имеет логического адреса, а соответственно блок с физ.номером 1 имеет логический адрес 0. Видимо WinHex (и другие программы) через Win-ды видят логическое пространство.
Соответственно считав с карты блок с адреса 512, видимо в WinHex'e он будет по нулевому адресу, проверьте интересно.
А физический нулевой блок это просто бутовый блок (см. FILE SYSTEM SPECIFICATION).

Кстати с нулевым блоком связаны интересные моменты, если его стереть (или испортить) то Wind'ы не смогут отформатировать карту, вот так вот они сделаны.



А что это за документ такой FILE SYSTEM SPECIFICATION? Это случайно не тот, который Sandisk за деньги распространяет? а то я его не видел smile.gif


По этой ссылочке есть хороший пример файловой системы и чтение с ММС в multisector режиме
http://elm-chan.org/fsw/ff/00index_e.html
Go to the top of the page
 
+Quote Post

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

 


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


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