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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Работа с SD card, Работа с SD card, с объемом блока > 512 байт
Calculator
сообщение Nov 6 2007, 12:24
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 19-04-07
Пользователь №: 27 172



В начале работы с карточкой подается команда установки размера используемого блока (CMD16, SET_BLOCKLEN). Скорее всего это делает библиотечная процедура и устанавливает размер 512 байт.
Go to the top of the page
 
+Quote Post
elfsoft
сообщение Nov 29 2007, 14:06
Сообщение #17





Группа: Новичок
Сообщений: 6
Регистрация: 6-07-07
Из: Минск, Беларусь
Пользователь №: 28 923



Цитата(MiniMax @ Nov 6 2007, 11:08) *
Я говорил не про FAT кэширование, а про низкоуровневое SD кэширование,
которе надо добавитьь для поддержки новых карт.
Это принципиально разные вещи.

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

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 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Go to the top of the page
 
+Quote Post
Abo
сообщение Nov 29 2007, 22:09
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 9-01-06
Пользователь №: 12 967



По моему, поле размера блока в CSD используется лишь для рассчета объема карточки и ни в коем случае не для указания настоящего размера блока, который всегда равен 512 байт. Только таким образом можно объяснить наличие не SDHC карт объемом более 1G. Для SDHC карт размер блока тоже 512 байт, но размер карты в CSD указывается не в байтах а в блоках.
Go to the top of the page
 
+Quote Post
elfsoft
сообщение Nov 30 2007, 11:41
Сообщение #19





Группа: Новичок
Сообщений: 6
Регистрация: 6-07-07
Из: Минск, Беларусь
Пользователь №: 28 923



Цитата(Abo @ Nov 30 2007, 00:09) *
По моему, поле размера блока в CSD используется лишь для рассчета объема карточки и ни в коем случае не для указания настоящего размера блока, который всегда равен 512 байт. Только таким образом можно объяснить наличие не SDHC карт объемом более 1G. Для SDHC карт размер блока тоже 512 байт, но размер карты в CSD указывается не в байтах а в блоках.


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

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

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

ЗЗЫ У кого-нибудь спецификация SDHC есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут.
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Nov 30 2007, 11:55
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Это очень хорошо. Значит и мне не придется ничего латать, когда я перейду на 2GB карты :-)
Go to the top of the page
 
+Quote Post
Abo
сообщение Nov 30 2007, 14:38
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 9-01-06
Пользователь №: 12 967



Цитата(elfsoft @ Nov 30 2007, 14:41) *
ЗЗЫ У кого-нибудь спецификация SDHC есть? Хочется посмотреть, что за зверь такой, и можно ли его заставить работать тут.


Тут и про SD и про SDHC
Прикрепленные файлы
Прикрепленный файл  Simplified_Physical_Layer_Specification.pdf ( 1.04 мегабайт ) Кол-во скачиваний: 240
 
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 4 2007, 19:20
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Вернувшись после некоторого перерыва к работе с 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.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 22:36
Рейтинг@Mail.ru


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