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

elfsoft

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о elfsoft

  • День рождения 01.05.1980

Информация

  • Город
    Array
  1. функция memcpu

    А можно где-нить на исходник этой функции посмотреть?.. :rolleyes:
  2. Работа с SD card

    Всё, таки нашёл, в чём была трабла. 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 есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут.
  3. Работа с SD card

    Не-не-не, я тут уже вообще забыл про 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 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  4. Работа с SD card

    Не, ну так естественно, что я так и делаю!.. :) (тем более, что у меня в большинстве случаев приходится работать с целыми кластерами, которые часто по нескольку килобайт). Проблема тут находится "ниже" и состоит в том, что если просто, не глядя на файловую систему и т.д., в "сыром" режиме попробовать взять и прочитать или записать 1024-байтный блок, то при чтении в верхних 512 байтах лежит туфта вместо данных (при этом старые данные - те, что были в памяти, - затираются), а при записи блок тоже портится. Под туфтой я имею ввиду довольно много нулей с изредка попадающимися ненулевыми битами. ЗЫ Правда тут у меня очень нехорошее предположение возникло.. попробую-ка я при случае (сейчас плата недоступна) точно повыключить весь кэш и т.д. Хотя, может, я это уже и пробовал делать.. с другой стороны, если б это из-за кэша было, то тогда бы и с 512-байтными секторами глюки вылазили бы..
  5. Работа с SD card

    Ну, собственно, GetCSD я чуть ли не в первую очередь делаю - мне ж нужно знать, что у меня за карточка запихнута :) (я на ней свою FAT16/32-библиотечку использую). Именно когда у меня начались проблемы с большими карточками, я и начал копать, кто виноват, я и накнулся, что дело именно в 1024-байтном секторе. Сначала было подумал, что FAT-овская библиотечка глючит, но потом, когда полез глубже/на более низкий уровень, увидел, что творится при чтении/записи блоков. "С помощью лома и какой-то матери" (с) заставить читаться/писаться эту карточку правильно не получилось :( PS. Эх, жаль, что поле READ_BLOCK_LENGTH в CSD - Read-Only.. а так бы поменял размер - и нет проблем! :) (ну ладно, это я уже несерьёзно... хотя в том же DataFlash-е можно один раз в жизни (жизни этого DataFlash-а :) ) поменять размер сектора с 528 на 512 байт, но это, всё-таки, чуть-чуть другой случай)
  6. Работа с SD card

    Здесь явно идёт речь о блоке на SD-карте (аналог сектора на HDD). То есть это единица, которая, в общем случае, к логическому формату и файловой системе не имеет отношения. Я столкнулся с такой же проблемой - при попытке использования 2-гиговой SD-карточки (с размером блока 1024 байта) выяснил, что AT91RM9200 неправильно читает 1024-байтные блоки - в старших 512 байтах читается ерунда (в смысле, даже не нули, а просто иногда что-то случайное). И, похоже, неправильно себя ведёт именно контроллер SD/MMC в Атмеле. ..пока просто запретил заказчику использовать в моём проекте карточки объёмом больше 1ГБ :) Хотел попробовать посмотреть, как будет себя вести карточка и контроллер, если к ней обращаться в режиме SPI, но это в любом случае меня не устраивает, т.к. сильно медленная скорость для моего случая получится. ЗЫ Насколько мне известно, размер блока в SD-карточках поменять/перешить нельзя :( На всех карточках размером от 32 МБ до 1 ГБ включительно, которые мне попадплись в руки, размер блока был 512 байт. Кстати, может и с этим связано то, что некоторые картридеры (обычные комповые usb-шные) не хотят работать с 2 и 4-гиговыми SD (не SDHC) картами.
×
×
  • Создать...