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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Снова SD/MMC, Вопросы, на которые не нащел пока ответов
InvisibleFed
сообщение Apr 17 2008, 10:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 (сектор).
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 18 2008, 05:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Неужели никто не может помочь? Наверняка кто-нить разобрался как следует...
Go to the top of the page
 
+Quote Post
yarunt
сообщение Apr 18 2008, 05:56
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476



Цитата(InvisibleFed @ Apr 18 2008, 08:12) *
Неужели никто не может помочь? Наверняка кто-нить разобрался как следует...

Ну,практически сами ответили на свои вопросы. На карточке действительно работа посекторная(блочная) и вычисления так и происходят Nсект*512. В бут секторе есть информация про количество секторов в кластере. Размер кластера увеличивается в прогрессии с обьемом карточки.
В пример
32мб 1сектор в кластере,
64мб 2 сектора в ластере
..........................
2гб 64сектора в кластере


--------------------
Нельзя впихнуть,невпихуемое?МОЙ БЛОГ
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 18 2008, 12:36
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Если Вы давали ответ на 3-й вопрос, то я немного про другое спрашивал... ли не понял ответа. Есть у меня 32 разряда адреса (4 байта из 6-и в команде). Что в тих 32 битах есть что? Т. е. "географически" куда укажет адрес 0x00000001, а куда 0x00000002? Сколько между ними пространства, если иначе. И что такое бут-сектор? Я фат не пользуюсь. Ну и остальные вопросы тоже пока без ответов...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2008, 12:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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 одинаков для всех.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Apr 18 2008, 13:35
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(InvisibleFed @ Apr 17 2008, 14:15) *
5. Часть секторов/блоков именуются как write protected. Как узнать об их распределении по адресному пространству карточки, где они расположены? Т. е. я, к примеру, пишу блок/сектор, а потом оказывается что туда нельзя писать, т. к. он защищен.

Т.е. это сбойные секторы?
Я вот подумываю о том, чтоб SD/MMC карточку в качестве таблицы использовать. Т.е. только для чтения. По рассчётам получается, что мне 4 гБайта таблица нужна. И время доступа ограниченное. Если бы сбойных секторов не было, то SD/MMC хорошо подходила бы. По адресу читаешь блок и всё. А так придётся за 2 раза это делать. Сначала таблицу соответствия физических секторов логическим (аналог FAT), а затем уже сами данные.
Или я тут бред полный написал? Я работал с AT45DB642D, так у неё сбойных блоков в принципе не было.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2008, 13:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(galjoen @ Apr 18 2008, 17:35) *
Или я тут бред полный написал? Я работал с AT45DB642D, так у неё сбойных блоков в принципе не было.

Сбойные сектора у SD обрабатываются и маскируются встроенным в карту контроллером.
У AT45 это надо делать руками, Atmel гарантирует только то, что у свежих кристаллов их нет, но это не значит, что они не могут появиться в процессе работы.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Apr 18 2008, 14:01
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 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 раз. Иначе информация в них повреждена м.б. Для этого и команда специальная есть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2008, 14:11
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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...
Go to the top of the page
 
+Quote Post
galjoen
сообщение Apr 18 2008, 14:47
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 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 - задача, которая раньше сложной казалась, теперь - детский сад.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 18 2008, 22:50
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
512 байт по адресу 0x01 никто записать не позволит. Адреса в байтах, но работать можно только блоками по 512 байт.

Возвращаясь к своему примеру: Если я записываю 512 байт по адресу 0x00000000, то следующие 512 байт "начнуться" с адреса 0x00000000 + 0x00000200 (512) = 0x00000200 (512)? Верно? Странно то, что в адрес 0x00000000 я ничего записать не смог, а вот в 0x00000001 с легкостью. Хотя надо проверить код...

Цитата
Write protected блоки устанавливаются и снимаются программно.

Значит, не на все блоки я могу установить защиту от записи (WP_SET)? Потому как число этих блоков ГОРАЗДО меньше общего числа блоков. Или что-то я не догоняю? И тогда как все-таки они распределены по адресному пространству?
Go to the top of the page
 
+Quote Post
SALOME
сообщение Apr 21 2008, 08:33
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 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 и т.д. Так ште скорее всего у Вас ошибка в формировании адреса в проге smile.gif.


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 21 2008, 12:25
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Спасибо за помощь. Ошибка действительно была в моей проге.

P. S. SALOME, если это конечно не "сценический образ", a14.gif - очень редко встретишь девушку в нашей области, да еще и...
Цитата
Я специально попробовала на своей флэшке.
Go to the top of the page
 
+Quote Post
wwweider
сообщение Apr 22 2008, 04:04
Сообщение #14


Местный
***

Группа: Validating
Сообщений: 301
Регистрация: 5-07-07
Пользователь №: 28 894



я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных.
теперь вопрос как мне узнать диапазон секторов для любой вставленной флешки с которыми можно работать?
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Apr 22 2008, 06:12
Сообщение #15


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



прочитать документацию
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 21:57
Рейтинг@Mail.ru


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