Calculator 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба В начале работы с карточкой подается команда установки размера используемого блока (CMD16, SET_BLOCKLEN). Скорее всего это делает библиотечная процедура и устанавливает размер 512 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elfsoft 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Я говорил не про 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 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abo 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба По моему, поле размера блока в CSD используется лишь для рассчета объема карточки и ни в коем случае не для указания настоящего размера блока, который всегда равен 512 байт. Только таким образом можно объяснить наличие не SDHC карт объемом более 1G. Для SDHC карт размер блока тоже 512 байт, но размер карты в CSD указывается не в байтах а в блоках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elfsoft 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба По моему, поле размера блока в 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 есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiniMax 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Это очень хорошо. Значит и мне не придется ничего латать, когда я перейду на 2GB карты :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abo 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба ЗЗЫ У кого-нибудь спецификация SDHC есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут. Тут и про SD и про SDHC Simplified_Physical_Layer_Specification.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 4 декабря, 2007 Опубликовано 4 декабря, 2007 · Жалоба Вернувшись после некоторого перерыва к работе с 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться