Перейти к содержанию
    

В начале работы с карточкой подается команда установки размера используемого блока (CMD16, SET_BLOCKLEN). Скорее всего это делает библиотечная процедура и устанавливает размер 512 байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я говорил не про FAT кэширование, а про низкоуровневое SD кэширование,

которе надо добавитьь для поддержки новых карт.

Это принципиально разные вещи.

Не-не-не, я тут уже вообще забыл про FAT и говорил исключительно про обмен с SD-карточкой.

А кэш я имел ввиду процессорный (I- и D-cache) - просто подумалось, вдруг это из-за неправильной работы MCI DMA при включенном кэше (хотя я уже проверил - кэш данных у меня всё равно выключен, кэш команд вроде как на это влиять не должен, но и его я тоже выключал, результат тот же).

Короче, проблема остаётся - прочитать с SD-шки (правильно, само собой) или записать сектор (блок) размером больше 512 байт (т.е. если у SD-шки блок больше 512 байт) пока не представляется возможным :( Эх.

 

PS Вот что появляется в памяти при попытке чтения 1024-байтного блока: (на всякий случай - пугаться насчёт перевёрнутых DWORD-ов в boot-секторе не надо)

Первые 512 байт - такие, какие и должны быть. Интересно, что в байтах 0x200-0x207 что-то почти осмысленное, потом всегда идут FF-ки. Но это самое "осмысленное" на самом деле нигде на флэшке не встречается (сканировал всю флэшку))

Total SDCard capacity = 2032664576 bytes

MaxReadDatablock = 1024

MaxWriteDataBlock = 1024

Sector size = 32

Read partial = true

WritePartial = false

ReadBlockMisalignment = false

WriteBlockMisalignment = false

sectorsize=1024, addr2read=0, offs=0

was read:

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000001A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000001B0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 ................

000001C0 3F 06 00 3D 00 F9 D7 FF 89 07 00 00 00 00 00 3C ?..=.ù×ÿ‰......<

000001D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000001F0 00 00 00 00 00 00 00 00 00 00 00 00 AA 55 00 00 ............ªU..

00000200 33 FB 0B 94 64 3F F2 ED FF FF FF FF FF FF FF FF 3û.”d?òíÿÿÿÿÿÿÿÿ

00000210 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000220 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000230 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000240 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000250 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000260 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000270 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000280 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000290 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000002F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000300 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000310 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000320 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000330 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000340 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000350 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000360 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000370 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000380 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

00000390 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

000003F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По моему, поле размера блока в CSD используется лишь для рассчета объема карточки и ни в коем случае не для указания настоящего размера блока, который всегда равен 512 байт. Только таким образом можно объяснить наличие не SDHC карт объемом более 1G. Для SDHC карт размер блока тоже 512 байт, но размер карты в CSD указывается не в байтах а в блоках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По моему, поле размера блока в CSD используется лишь для рассчета объема карточки и ни в коем случае не для указания настоящего размера блока, который всегда равен 512 байт. Только таким образом можно объяснить наличие не SDHC карт объемом более 1G. Для SDHC карт размер блока тоже 512 байт, но размер карты в CSD указывается не в байтах а в блоках.

 

Всё, таки нашёл, в чём была трабла. Abo, Большое пасиба за подсказку! Я тут полдня писал ответ, попутно проверяя разные вещи, и, в конце концов выяснил, что таки да, с 2/4-гиговой карточкой нужно работать точно так же, как и с обычной (а я зачем-то изначально сделал поддержку 1024-байтных (и более) секторов для больших карточек, думая, что нужно работать такими блоками). Плюс трабла была в READ_MULTIPLE_BLOCK - оно у меня, похоже, неправильно работало. Ответ пришлось стереть :)

Для всех - в Simplified Physical Layer Spec ( http://www.sdcard.org/about/memory_card/pl..._Layer_Spec.pdf ) в пунктах 4.3.2-4.3.4 написано, что, независимо от того, какой размер блока указан в MaxReadDatablock/MaxWriteDataBlock, SetBlockLength всё равно нужно делать не больше, чем 512. И, главное, даже если Read/WriteBlockMisalignment=0, читать/писать с адреса, кратного 512 можно (нельзя читать с совсем произвольного адреса).

 

Calculator, предположения насчёт размера блока подтолкнули, в общем-то, на правильный путь (только в другую сторону :) )

 

MiniMax, наши обоюдные предположения ("Самое простое - это подлатать немного драйвер ( то место , где идет запись/чтение 512 байтового сектора в очередной блок данных карточки) используя кэширование. Другими словами, имеем буфер на 1024 байт в RAM, который отображается на два соседних 512-byte сектора FAT. При попытке записи 1-го сектора копируем его только в 1024-байт RAM буфер. Реальную запись делаем только при заполненном 1024-байт буфере. Если очередной записываемый сектор не отображается на 2-й сектор RAM буфера, то cчитать его с SD и закончить операцю записи предыдущего блока. И т.д.") оказались неверными, но, главное, что в конце концов разобрались :)

 

ЗЫ Всем огромное спасибо!..

 

ЗЗЫ У кого-нибудь спецификация SDHC есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это очень хорошо. Значит и мне не придется ничего латать, когда я перейду на 2GB карты :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЗЗЫ У кого-нибудь спецификация SDHC есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут.

 

Тут и про SD и про SDHC

Simplified_Physical_Layer_Specification.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вернувшись после некоторого перерыва к работе с SD. Применил новый вариант драйвера для MCI от Atmel (AT91SAM9263-EK Software Package на http://www.atmel.com/dyn/products/tools_ca...p?tool_id=4227). Все это вместе с efsl благополучно работает с картой в 2 Gb и блоками по 512 bytes.

 

Однако осталась загадкой фантастически низкая скорость записи в 1 Gb SD Transcend, по-прежнему ок. 7 Kb/s, a чтение ~1 Mb/s. Другие карточки пишутся на 130-150 Kb/s.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...