Jump to content

    

Снова SD/MMC

я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных.

теперь вопрос как мне узнать диапазон секторов для любой вставленной флешки с которыми можно работать?

Ну обычно в секторе размещается 512 байт. Поделите объем флэшки (написано на самой карте) на 512 и получите количество секторов.

Share this post


Link to post
Share on other sites
Поделите объем флэшки (написано на самой карте) на 512 и получите количество секторов.

Да уж :(. Вся информация выдается самой флешкой, размер сектора можно задать в случае необходимости. Для этого просто следует ознакомиться с системой команд (CMD9 Get CSD). То, что написано на флешке к реальности отношения не имеет, да и читать этикетки прграммно сложно :).

Share this post


Link to post
Share on other sites
Да уж :(. Вся информация выдается самой флешкой, размер сектора можно задать в случае необходимости. Для этого просто следует ознакомиться с системой команд (CMD9 Get CSD). То, что написано на флешке к реальности отношения не имеет, да и читать этикетки прграммно сложно :).

Вы все правильно говорите. Вся информация находится в самой флэшке. Но судя по всему у аффтора проблемы с доступом в регистр CSD, на который уже не однократно указывалось:

"я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных". Боюсь, что здесь не тот уровень, на котором можно получить доступ к регистру CSD найти где в нем храниться информация о размере карты и сделать правильный расчет. Хорошо бы в этой "программке си" найти процедуру определения размера карты. Это был бы лучший вариант.

А по поводу несоответствия надписи на флэшке: Вы имеете ввиду тот факт, что 1Кбайт=1024байт? или еще что-то?

Share this post


Link to post
Share on other sites
.. по поводу несоответствия надписи на флэшке: Вы имеете ввиду тот факт, что 1Кбайт=1024байт? или еще что-то?

Разумеется нет. Вот, например, гигабайтовая флешка:

mount
Card:SDC[22] Size:995.656MB/512 F:25MHz(14745600) WP:[Off]

stat
FAT32. Number of FATs: 2. Bytes per Cluster: 16384
Root entries  : 512. Sectors per FAT: 243
Total Clusters: 62184. Free: 52927
FAT  start (LBA)         : 250
DIR  start (LBA, Cluster): 736
DATA start (LBA)         : 768

 

Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков. Посему размер спрашивать только у самой флешки.

Share this post


Link to post
Share on other sites
Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков. Посему размер спрашивать только у самой флешки.

Я правильно понимаю, что с ростом количества битых блоков будет уменьшаться размер памяти, выдаваемый регистром CSD?

Share this post


Link to post
Share on other sites

спасибо уже становиться понятнее, мне кажется в этой программке должна быть функция какаято возвращающая каое какую инфу о флешке надо порыться)

Share this post


Link to post
Share on other sites
Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков.

И еще такой вопрос. Если флэшка отформатирована под FAT, то по логике вещей при многократной перезаписи должны появляться битые секторы. Windows это как то отслеживает? Или битые секторы выявляются только при форматировании? Или как?

Share this post


Link to post
Share on other sites

это всё определяет контроллер на борту самой флешки нам я так поня из мануала нестоит об этом переживать)

 

почему я немогу файл выложить небольшой текстовый сюда?

Share this post


Link to post
Share on other sites
Я правильно понимаю, что с ростом количества битых блоков будет уменьшаться размер памяти, выдаваемый регистром CSD?

Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.

Share this post


Link to post
Share on other sites
Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.

Спасибо за информацию.

Share this post


Link to post
Share on other sites
Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.

Что-то я не понял, что в CSD есть сведения о файловой системе на этой флешке? Это ведь ОС будет если захочет/сможет их маркировать как битые?

В своё время я пробовал при записи в свой самодельный MassStorage возвращать Sense Key=3, ASC=3, ASCQ=0 (WRITE FAULT) - Win зацикливалась на записи. Хотя м.б. это у меня какой-то другой глюк был. Или ОС как-то подругому узнаёт, что сектор битый?

Share this post


Link to post
Share on other sites
Что-то я не понял, что в CSD есть сведения о файловой системе на этой флешке? Это ведь ОС будет если захочет/сможет их маркировать как битые?

Сначала маскировать будет сама карта, система об этом и не узнает.

Share this post


Link to post
Share on other sites
Сначала маскировать будет сама карта, система об этом и не узнает.

Ну это понятно. А когда запас секторов кончится?

Я столкнулся с такой ситуацией: имеется совершенно новая флешка, она есс-но не отформатирована, и при чтении всех секторов в т.ч. 0го у неё есс-но ошибка CRC. Я и выдавал эту ошибку (Sense Key=3, ASC=0x10, ASCQ=0). Тогда Win зацикливалась на чтении 0го сектора, и отформатировать флешку я не мог. Получался замкнутый круг. Пришлось установить специальное условие - при чтении 0го сектора считать, что CRC верна. Мне показалось, что и при записи сектора в Win подобный глюк, т.к. при возврате ошибки Win зацикливается на записи в этот сектор. А такими командами, как Write and Verifu, Win вообще не пользуется. В каком-же случае Win помечает сектор как битый?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this