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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> SDC: ответ на CMD8 не корректен
aaarrr
сообщение Nov 15 2011, 18:01
Сообщение #31


Гуру
******

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



Пардон, мимо смотрел.

А ACMD41 отправили? Без нее, насколько я помню, он не взводится.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 15 2011, 18:14
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



По блок-схеме из спецификации сначала передается команда CMD58, а затем только ACMD41, предварительно необходимо выдать команду CMD55, чтобы указать, что следующая команда будет спецификационная (AXXXx).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 15 2011, 19:15
Сообщение #33


Гуру
******

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



Первый раз CMD58 подавать не обязательно - это нужно только чтобы выяснить диапазон питания, поддерживаемый картой. Бит готовности в этом случае не взводится.
То есть последовательность такая: CMD0->CMD8->[CMD58]->ACMD41->CMD58. Последнюю повторяем до появления бита готовности или тайм-аута в 1 секунду.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 15 2011, 19:38
Сообщение #34


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Ясно.
Насчет команды ACMD41 и остальных ACMDx: перед ними нужно передать команду CMD55?
А далее как быть? Все последующие команды будут восприниматься как команды ACMD или CMD55 указывает только на следующую команду? А дальше - команды будут восприниматься как обычные CMD?
Например:
CMD0;
CMD8;
CMD55 (указывает контроллеру SD карты памяти, что следующая команда будет из разряда ACMD);
ACMD41;
CMD58 (а эта команда будет уже относиться к обычным CMD, поскольку не была передана непосредственно после команды CMD55).
Верно?
И зачем сделали разделение на CMD и ACMD?
Неужели только из-за того, что не хватило разрядности указателя индекса команды 6 бит?

Сообщение отредактировал Arlleex - Nov 15 2011, 19:43
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 15 2011, 19:47
Сообщение #35


Гуру
******

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



Цитата(Arlleex @ Nov 15 2011, 23:38) *
Насчет команды ACMD41 и остальных ACMDx: перед ними нужно передать команду CMD55?
А далее как быть? Все последующие команды будут восприниматься как команды ACMD или CMD55 указывает только на следующую команду? А дальше - команды будут восприниматься как обычные CMD?
Например:
CMD0;
CMD8;
CMD55 (указывает контроллеру SD карты памяти, что следующая команда будет из разряда ACMD);
ACMD41;
CMD58 (а эта команда будет уже относиться к обычным CMD, поскольку не была передана непосредственно после команды CMD55).
Верно?

Верно, CMD55 действует только на следующую команду.

Цитата(Arlleex @ Nov 15 2011, 23:38) *
И зачем сделали разделение на CMD и ACMD?
Неужели только из-за того, что не хватило разрядности указателя индекса команды 6 бит?

Еще хотели SD и MMC частично подружить, а частично растащить. В общем, как я понимаю, тут больше политические причины повлияли, нежели технические.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 17 2011, 19:34
Сообщение #36


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



А какую файловую систему используют SD карты?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 17 2011, 19:59
Сообщение #37


Гуру
******

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



Стандарт подразумевает использование FAT16 и FAT32. Но на деле можно использовать любую по большому счету.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 20 2011, 18:59
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Еще раз доброго времени суток.
Перед тем, как использовать передачи данных, необходимо указать размер блока данных, которые будут передаваться (поскольку это SDSC).
Итак, передаем команду CMD16, с аргументом 512 (длина блока данных 512 байт).
Это как раз равно физическому сектору.
Но, если я использую длину блока данных, например, 1 байт, можно ли мне адресовать их побайтно, например - 0x00 - первый байт, 0x1FF - конец адресного пространства первого физического сектора.
А если, например, установили длину блока данных 16 байт, то указываем начало первого блока данных:
0x00 - и с него читаем, при этом конец первого блока будет 0x1F, а начало второго блока данных в этом же секторе 0x20.
Нельзя будет обратиться по адресу одного элемента, например 0x01, поскольку мы должны считать сразу 16 элементов, а потом уже из этого массива 16ти чисел выбирать нужный элемент, а адрес можно задавать любой, он определяет начальную ячейку, с которой будет начата передача данных.
НО!
В спецификации на SD карту памяти указано, что нельзя при передачах данных нарушать границы одного сектора. Верно ли я понимаю, что, к примеру, нельзя при длине блока данных 16 байт указать адрес передачи данных 0x1FE, поскольку произойдет нарушение границ чтения одного сектора, ведь останется 2 байта в секторе №1, и 14 байтов в следующем секторе, а карта памяти непосредственно выдаст ошибку?

Пожалуйста, проверьте все до слова, что я тут написал, поскольку сейчас это для меня важный шаг понимания структуры организации ячеек памяти SD карты.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 20 2011, 21:45
Сообщение #39


Гуру
******

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



Цитата(Arlleex @ Nov 20 2011, 22:59) *
Верно ли я понимаю, что, к примеру, нельзя при длине блока данных 16 байт указать адрес передачи данных 0x1FE, поскольку произойдет нарушение границ чтения одного сектора, ведь останется 2 байта в секторе №1, и 14 байтов в следующем секторе, а карта памяти непосредственно выдаст ошибку?

Совершенно верно.

В стандарте есть один очень важный момент: все без исключения карты обязаны работать с блоками по 512 байт. Остальное на усмотрение производителя. Поэтому единственный универсальный подход - оперировать тоже исключительно 512-байтными блоками и никак иначе.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 23 2011, 18:22
Сообщение #40


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата
7.3.3.2 Start Block Tokens and Stop Tran Token
Read and write commands have data transfers associated with them. Data is being transmitted or
received via data tokens. All data bytes are transmitted MSB first.
Data tokens are 4 to 515 bytes long and have the following format:
For Single Block Read, Single Block Write and Multiple Block Read:
...

Как верно переводится данная строка из спецификации? И что она означает?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 23 2011, 18:38
Сообщение #41


Гуру
******

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



В этой строке представляется не совсем корректным употребление термина "token" для описания всего блока данных, включающего в себя стартовый байт (который, собственно, и является token'ом) + 1..512 байт данных + 2 байта CRC.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 23 2011, 18:49
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Ясно, т.е. они имели ввиду длину всего передаваемого блока данных.
А что насчет содержимого памяти SD карты? Если я ни разу не форматировал SD карту памяти на компьютере, да и нигде вообще, а только инициализировал и прочитал блок данных, содержимое всех байтов в секторе обязательно должно быть равно значению "0"? У меня большинство байтов равны "0", но встречаются и такие, где байты отличны от значения "0". Это нормально? Ведь с завода они идут уже форматированными вроде бы?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 23 2011, 18:59
Сообщение #43


Гуру
******

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



Цитата(Arlleex @ Nov 23 2011, 22:49) *
Это нормально? Ведь с завода они идут уже форматированными вроде бы?

Это нормально. С завода идут уже отформатированными. В тех областях, которые не содержат структур файловой системы, может быть все что угодно.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Nov 27 2011, 18:32
Сообщение #44


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Доброго времени суток.
При передаче данных на SD карту памяти (при записи одного сектора) необходимо указать верный CRC. Но мне не нужно подсчитывать каждый раз CRC, необходимо отключить проверку CRC. Это можно сделать командой CMD59, как я понял. Но почему же предыдущие команды не принимали во внимание поле CRC в ее передаваемом слове?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 27 2011, 18:39
Сообщение #45


Гуру
******

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



В режиме SPI CRC по умолчанию отключен.
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 Текстовая версия Сейчас: 30th June 2025 - 04:30
Рейтинг@Mail.ru


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