|
|
|
Снова SD/MMC, Вопросы, на которые не нащел пока ответов |
|
|
|
Apr 17 2008, 10:15
|
Местный
Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469
|
Подключаю карту SD к AVR. Вот вроде все, пишет, читает, регистры читает и все такое. Но вот возникли вопросы.
1. Правельно ли утверждение, что я могу писать в блок/сектор сколько угодно раз без стирания? 2. Если да, то нафига стирание (т. е. зачем сама операция)? 3. Как происходит адресация? Т. е. например в блоке/секторе 512 байт. Если я записываю 512 байт по адресу 0x00000001, то следующие 512 байт "начнуться" с адреса 0x00000001 + 0x00000200 (512) = 0x00000201 (513)? 4. Из регистра CSD судя по SDProdManual для карточек SanDisk можно вытащить информацию обо все параметрах-размерах (размер сектора/блока, их число, число байт => вычислить весь объем карточки). Справедливо ли это для карт прочих производителей? Как узнать объем вставленной карточки? 5. Часть секторов/блоков именуются как write protected. Как узнать об их распределении по адресному пространству карточки, где они расположены? Т. е. я, к примеру, пишу блок/сектор, а потом оказывается что туда нельзя писать, т. к. он защищен.
P. S. "блок/сектор" - единица информации, обычно в 512 байт. По непонятным причинам, как я понял, эти совершенно разные понятия конфликтуют в доках на карты SD (блок) и MMC (сектор).
|
|
|
|
|
Apr 18 2008, 05:56
|
Местный
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476
|
Цитата(InvisibleFed @ Apr 18 2008, 08:12) Неужели никто не может помочь? Наверняка кто-нить разобрался как следует... Ну,практически сами ответили на свои вопросы. На карточке действительно работа посекторная(блочная) и вычисления так и происходят Nсект*512. В бут секторе есть информация про количество секторов в кластере. Размер кластера увеличивается в прогрессии с обьемом карточки. В пример 32мб 1сектор в кластере, 64мб 2 сектора в ластере .......................... 2гб 64сектора в кластере
--------------------
|
|
|
|
|
Apr 18 2008, 12:41
|
Гуру
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448
|
Цитата(InvisibleFed @ Apr 17 2008, 14:15) 1. Правельно ли утверждение, что я могу писать в блок/сектор сколько угодно раз без стирания? Да. Цитата(InvisibleFed @ Apr 17 2008, 14:15) 2. Если да, то нафига стирание (т. е. зачем сама операция)? Для ускорения записи. Цитата(InvisibleFed @ Apr 17 2008, 14:15) 3. Как происходит адресация? Т. е. например в блоке/секторе 512 байт. Если я записываю 512 байт по адресу 0x00000001, то следующие 512 байт "начнуться" с адреса 0x00000001 + 0x00000200 (512) = 0x00000201 (513)? 512 байт по адресу 0x01 никто записать не позволит. Адреса в байтах, но работать можно только блоками по 512 байт. Цитата(InvisibleFed @ Apr 17 2008, 14:15) 4. Из регистра CSD судя по SDProdManual для карточек SanDisk можно вытащить информацию обо все параметрах-размерах (размер сектора/блока, их число, число байт => вычислить весь объем карточки). Справедливо ли это для карт прочих производителей? Как узнать объем вставленной карточки? CSD одинаков для всех.
|
|
|
|
|
Apr 18 2008, 13:35
|
Знающий
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640
|
Цитата(InvisibleFed @ Apr 17 2008, 14:15) 5. Часть секторов/блоков именуются как write protected. Как узнать об их распределении по адресному пространству карточки, где они расположены? Т. е. я, к примеру, пишу блок/сектор, а потом оказывается что туда нельзя писать, т. к. он защищен. Т.е. это сбойные секторы? Я вот подумываю о том, чтоб SD/MMC карточку в качестве таблицы использовать. Т.е. только для чтения. По рассчётам получается, что мне 4 гБайта таблица нужна. И время доступа ограниченное. Если бы сбойных секторов не было, то SD/MMC хорошо подходила бы. По адресу читаешь блок и всё. А так придётся за 2 раза это делать. Сначала таблицу соответствия физических секторов логическим (аналог FAT), а затем уже сами данные. Или я тут бред полный написал? Я работал с AT45DB642D, так у неё сбойных блоков в принципе не было.
|
|
|
|
|
Apr 18 2008, 14:01
|
Знающий
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640
|
Цитата(aaarrr @ Apr 18 2008, 17:41) Сбойные сектора у SD обрабатываются и маскируются встроенным в карту контроллером. Т.е. можно читать не задумываясь о сбойных блоках. И 4 гБайта это размер уже после отбрасывания сбойных блоков? А что такое write protected блоки? Это действительно защищённые от записи? И защита программно не снимается? Цитата(aaarrr @ Apr 18 2008, 17:41) У AT45 это надо делать руками, Atmel гарантирует только то, что у свежих кристаллов их нет, но это не значит, что они не могут появиться в процессе работы. Атмел гарантирует, что сбойные блоки не появятся до 100000 перезаписей. Но для этого после 10000 перезаписей в одной странице надо перезаписать те блоки, которые не перезаписывались за эти 10000 раз. Иначе информация в них повреждена м.б. Для этого и команда специальная есть.
|
|
|
|
|
Apr 18 2008, 14:11
|
Гуру
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448
|
Цитата(galjoen @ Apr 18 2008, 18:01) Т.е. можно читать не задумываясь о сбойных блоках. И 4 гБайта это размер уже после отбрасывания сбойных блоков? А что такое write protected блоки? Это действительно защищённые от записи? И защита программно не снимается? Ровно 4ГБайта Вам никто не обещает. Реальный объем, конечно, будет заметно меньше. Write protected блоки устанавливаются и снимаются программно. Цитата(galjoen @ Apr 18 2008, 18:01) Атмел гарантирует, что сбойные блоки не появятся до 100000 перезаписей. Но для этого после 10000 перезаписей в одной странице надо перезаписать те блоки, которые не перезаписывались за эти 10000 раз. Иначе информация в них повреждена м.б. Для этого и команда специальная есть. Гарантии Atmel'а - дело крайне темное. Когда-то число циклов стирания/записи не упоминалось вообще, потом были цифры 10K, 50K...
|
|
|
|
|
Apr 18 2008, 14:47
|
Знающий
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640
|
Цитата(aaarrr @ Apr 18 2008, 18:11) Ровно 4ГБайта Вам никто не обещает. Реальный объем, конечно, будет заметно меньше. Понял. Придётся брать 8ГБайт SD. Цитата(aaarrr @ Apr 18 2008, 18:11) Гарантии Atmel'а - дело крайне темное. Когда-то число циклов стирания/записи не упоминалось вообще, потом были цифры 10K, 50K... В своё время проверил на 2х AT45DB642D. Пол-года непрерывной циклической записи выдержали. Они пишутся медленнее чем Атмел в своих pdf обещает. Не более 80 кБайт (блоков) в секунду (у AD45DB642D блок = 1 кБайт = 1056 байт если точно). За пол-года наверное 120000 записей набралось, но точно более 100000. Потом уже сделал счётчик кол-ва записей в блок. Если блок сдохнет можно будет максимальный по всей FLASH узнать. Но пока ещё ни одна не сдохла - заказчики молчат. А вообще 'aaarrr' большое спасибо за ответы. За счёт таблицы в SD - задача, которая раньше сложной казалась, теперь - детский сад.
|
|
|
|
|
Apr 18 2008, 22:50
|
Местный
Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469
|
Цитата 512 байт по адресу 0x01 никто записать не позволит. Адреса в байтах, но работать можно только блоками по 512 байт. Возвращаясь к своему примеру: Если я записываю 512 байт по адресу 0x00000000, то следующие 512 байт "начнуться" с адреса 0x00000000 + 0x00000200 (512) = 0x00000200 (512)? Верно? Странно то, что в адрес 0x00000000 я ничего записать не смог, а вот в 0x00000001 с легкостью. Хотя надо проверить код... Цитата Write protected блоки устанавливаются и снимаются программно. Значит, не на все блоки я могу установить защиту от записи (WP_SET)? Потому как число этих блоков ГОРАЗДО меньше общего числа блоков. Или что-то я не догоняю? И тогда как все-таки они распределены по адресному пространству?
|
|
|
|
|
Apr 21 2008, 08:33
|
Местный
Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349
|
Цитата(InvisibleFed @ Apr 19 2008, 05:50) Возвращаясь к своему примеру: Если я записываю 512 байт по адресу 0x00000000, то следующие 512 байт "начнуться" с адреса 0x00000000 + 0x00000200 (512) = 0x00000200 (512)? Верно? Странно то, что в адрес 0x00000000 я ничего записать не смог, а вот в 0x00000001 с легкостью. Хотя надо проверить код... Адрес следующего бока Вы расчитали верно. Однако, если длина блока 512байт (по умолчанию) то в адрес 0x00000001 запись не идет. Я специально попробовала на своей флэшке. Одрес записи должен начинаться кратно блокам, т.е.0x00000000, 0x00000200, 0x00000400 и т.д. Так ште скорее всего у Вас ошибка в формировании адреса в проге .
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Apr 21 2008, 12:25
|
Местный
Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469
|
Спасибо за помощь. Ошибка действительно была в моей проге. P. S. SALOME, если это конечно не "сценический образ", - очень редко встретишь девушку в нашей области, да еще и... Цитата Я специально попробовала на своей флэшке.
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|