|
SDC: ответ на CMD8 не корректен |
|
|
|
Nov 15 2011, 19:47
|
Гуру
     
Группа: Свой
Сообщений: 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 частично подружить, а частично растащить. В общем, как я понимаю, тут больше политические причины повлияли, нежели технические.
|
|
|
|
|
Nov 20 2011, 18:59
|

Местный
  
Группа: Участник
Сообщений: 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 карты.
|
|
|
|
|
Nov 23 2011, 18:22
|

Местный
  
Группа: Участник
Сообщений: 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: ... Как верно переводится данная строка из спецификации? И что она означает?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|