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

 
 
> Работа с SD card, Работа с SD card, с объемом блока > 512 байт
sergeeff
сообщение Mar 15 2007, 20:08
Сообщение #1


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

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



Коллеги!

Для теста купил карту Extrememory Allround 2 Gb. У нее оказался блок = 1024 байта. Соответственно библиотека EFSL не работает. Как решать проблему? Я так понимаю, что с ростом обьемов карт и скоростей обмена могут и другие обьемы блоков быть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
elfsoft
сообщение Oct 30 2007, 15:35
Сообщение #2





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



Здесь явно идёт речь о блоке на SD-карте (аналог сектора на HDD). То есть это единица, которая, в общем случае, к логическому формату и файловой системе не имеет отношения. Я столкнулся с такой же проблемой - при попытке использования 2-гиговой SD-карточки (с размером блока 1024 байта) выяснил, что AT91RM9200 неправильно читает 1024-байтные блоки - в старших 512 байтах читается ерунда (в смысле, даже не нули, а просто иногда что-то случайное). И, похоже, неправильно себя ведёт именно контроллер SD/MMC в Атмеле.
..пока просто запретил заказчику использовать в моём проекте карточки объёмом больше 1ГБ smile.gif Хотел попробовать посмотреть, как будет себя вести карточка и контроллер, если к ней обращаться в режиме SPI, но это в любом случае меня не устраивает, т.к. сильно медленная скорость для моего случая получится.
ЗЫ Насколько мне известно, размер блока в SD-карточках поменять/перешить нельзя sad.gif На всех карточках размером от 32 МБ до 1 ГБ включительно, которые мне попадплись в руки, размер блока был 512 байт. Кстати, может и с этим связано то, что некоторые картридеры (обычные комповые usb-шные) не хотят работать с 2 и 4-гиговыми SD (не SDHC) картами.
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Oct 30 2007, 16:50
Сообщение #3


Участник
*

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



Цитата(elfsoft @ Oct 30 2007, 18:35) *
ЗЫ Насколько мне известно, размер блока в SD-карточках поменять/перешить нельзя sad.gif На всех карточках размером от 32 МБ до 1 ГБ включительно, которые мне попадплись в руки, размер блока был 512 байт. Кстати, может и с этим связано то, что некоторые картридеры (обычные комповые usb-шные) не хотят работать с 2 и 4-гиговыми SD (не SDHC) картами.

Самое простое это считать и декодировать CSD регистр. Там есть вся информация
Go to the top of the page
 
+Quote Post
elfsoft
сообщение Oct 31 2007, 08:37
Сообщение #4





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



Цитата(MiniMax @ Oct 30 2007, 18:50) *
Самое простое это считать и декодировать CSD регистр. Там есть вся информация

Ну, собственно, GetCSD я чуть ли не в первую очередь делаю - мне ж нужно знать, что у меня за карточка запихнута smile.gif (я на ней свою FAT16/32-библиотечку использую). Именно когда у меня начались проблемы с большими карточками, я и начал копать, кто виноват, я и накнулся, что дело именно в 1024-байтном секторе. Сначала было подумал, что FAT-овская библиотечка глючит, но потом, когда полез глубже/на более низкий уровень, увидел, что творится при чтении/записи блоков. "С помощью лома и какой-то матери" (с) заставить читаться/писаться эту карточку правильно не получилось sad.gif
PS. Эх, жаль, что поле READ_BLOCK_LENGTH в CSD - Read-Only.. а так бы поменял размер - и нет проблем! smile.gif (ну ладно, это я уже несерьёзно... хотя в том же DataFlash-е можно один раз в жизни (жизни этого DataFlash-а smile.gif ) поменять размер сектора с 528 на 512 байт, но это, всё-таки, чуть-чуть другой случай)
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Oct 31 2007, 09:00
Сообщение #5


Участник
*

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



Цитата(elfsoft @ Oct 31 2007, 11:37) *
дело именно в 1024-байтном секторе. Сначала было подумал, что FAT-овская библиотечка глючит, но потом, когда полез глубже/на более низкий уровень, увидел, что творится при чтении/записи блоков.

Самое простое - это подлатать немного драйвер ( то место , где идет запись/чтение 512 байтового сектора в очередной блок данных карточки) используя кэширование. Другими словами,
имеем буфер на 1024 байт в RAM, который отображается на два соседних 512-byte сектора FAT.
При попытке записи 1-го сектора копируем его только в 1024-байт RAM буфер. Реальную запись делаем только при заполненном 1024-байт буфере. Если очередной записываемый сектор не отображается на 2-й сектор RAM буфера, то cчитать его с SD и закончить операцю записи предыдущего блока. И т.д.
Go to the top of the page
 
+Quote Post
elfsoft
сообщение Nov 6 2007, 08:40
Сообщение #6





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



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

Не, ну так естественно, что я так и делаю!.. smile.gif (тем более, что у меня в большинстве случаев приходится работать с целыми кластерами, которые часто по нескольку килобайт).
Проблема тут находится "ниже" и состоит в том, что если просто, не глядя на файловую систему и т.д., в "сыром" режиме попробовать взять и прочитать или записать 1024-байтный блок, то при чтении в верхних 512 байтах лежит туфта вместо данных (при этом старые данные - те, что были в памяти, - затираются), а при записи блок тоже портится. Под туфтой я имею ввиду довольно много нулей с изредка попадающимися ненулевыми битами.
ЗЫ Правда тут у меня очень нехорошее предположение возникло.. попробую-ка я при случае (сейчас плата недоступна) точно повыключить весь кэш и т.д. Хотя, может, я это уже и пробовал делать.. с другой стороны, если б это из-за кэша было, то тогда бы и с 512-байтными секторами глюки вылазили бы..
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergeeff   Работа с SD card   Mar 15 2007, 20:08
- - etoja   Карта на заводе сформатирована под FAT32. Сформати...   Mar 16 2007, 07:08
|- - ivstech   Цитата(etoja @ Mar 16 2007, 10:08) Самые ...   Mar 16 2007, 07:23
|- - sonycman   Цитата(etoja @ Mar 16 2007, 08:08) Карта ...   Mar 16 2007, 22:52
|- - ivstech   Цитата(sonycman @ Mar 17 2007, 01:52) Инт...   Mar 17 2007, 05:34
- - etoja   Сплетни не нужны.   Mar 16 2007, 07:34
|- - ivstech   Цитата(etoja @ Mar 16 2007, 10:34) Сплетн...   Mar 16 2007, 08:09
|- - sergeeff   Переформатировать попробую в понедельник. Два воп...   Mar 16 2007, 20:57
- - sergeeff   Для прояснения. Ну да, наверное, правильнее сказат...   Mar 17 2007, 18:20
|- - MiniMax   Цитата(elfsoft @ Nov 6 2007, 11:40) ЗЫ Пр...   Nov 6 2007, 09:08
|- - elfsoft   Цитата(MiniMax @ Nov 6 2007, 11:08) Я гов...   Nov 29 2007, 14:06
- - Calculator   В начале работы с карточкой подается команда устан...   Nov 6 2007, 12:24
- - Abo   По моему, поле размера блока в CSD используется ли...   Nov 29 2007, 22:09
|- - elfsoft   Цитата(Abo @ Nov 30 2007, 00:09) По моему...   Nov 30 2007, 11:41
|- - MiniMax   Это очень хорошо. Значит и мне не придется ничего ...   Nov 30 2007, 11:55
|- - Abo   Цитата(elfsoft @ Nov 30 2007, 14:41) ЗЗЫ ...   Nov 30 2007, 14:38
- - sergeeff   Вернувшись после некоторого перерыва к работе с SD...   Dec 4 2007, 19:20


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

 


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


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