Перейти к содержанию
    

Всем привет!
Первый опыт общения с FatFs в режиме записи. Сделал проект кубом (да, прошу не кидаться тапками), версия FatFs 0.11 (да, знаю что старая). МК - STM32F103, SDIO. Сделал проект с периодической записью.
Так вот с флэшкой 2Гб (Fat32, cluster size = 16kB) все работает отлично. Вставляю карту на 16Гб (Fat32, cluster size = 32kB) и при первой же записи f_write появляется ошибка: FR_INVALID_OBJECT, хотя f_mount и f_open проходят без проблем - FR_OK. Обе карты форматировал с помощью SD Card Formatter. Cluster size у 16Гб карты пробовал и 16Кб и 32Кб - роли не играет, всегда вылазит ошибка.
Прошел отладчиком по функции записи, так ошибка вылазит сразу в начале при res = validate(fp); /* Check validity */
При этом от SDIO приходит ошибка 0x200 - SDMMC_ERROR_BAD_ERASE_PARAM /*!< An invalid selection for erase groups/ - информации по этой ошибке я вообще не нашел.
Когда смотрю обе карты в Acronis Disk Director, то у 2Гб карты единая область на весь объем, а у 16Гб почему то перед основным разделом всегда появляется не размеченная область 4Мб...не понимаю почему. Почему карты ведут себя по разному? Может быть для SDHC нужна еще какие то настройки в FATFs?

UPD. Нашел еще карту SDHC на 8Гб - тоже работает отлично, так же как и SD на 2Гб...Вопрос  с картами на 16Гб остается открытым...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Arxi said:

 Может быть для SDHC нужна еще какие то настройки в FATFs?

Проблема в вашей файловой системе. На картах большого объема меняется способ адресации секторов.
Почитайте эту ветку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, AlexandrY said:

Проблема в вашей файловой системе. На картах большого объема меняется способ адресации секторов.
Почитайте эту ветку

Ветку прочитал. Но вопрос это не прояснило. Я бы понял если бы не работали вообще SDHC карты, но ведь карта SDHC на 8Гб отлично работает. Отказывается работать именно на 16Гб. Обе отформатировал FAT32, у обеих карт cluster size 32kB. Но одна работает, а вторая нет. И не могу понять на какой стороне проблема...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Arxi сказал:

Я бы понял если бы не работали вообще SDHC карты, но ведь карта SDHC на 8Гб отлично работает.

Смотрите на работу функций чтения и записи,с какими размерами блоков они работают. Были случаи, когда 512 байт работало все отлично, а именно таким размером читает f_open, а далее шли запросы на чтение или запись уже больших размеров, тут и обламывалось все. Если так и есть, разбирайтесь с низкоуровневыми функциями, может там чего куб накубил:biggrin:

4 часа назад, Arxi сказал:

а у 16Гб почему то перед основным разделом всегда появляется не размеченная область 4Мб...не понимаю почему.

Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было..

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, mantech сказал:

Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было..

Возможно это из-за выравнивание начала FAT на границу блока стирания карты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, jcxz сказал:

Возможно это из-за выравнивание начала FAT на границу блока стирания карты.

Я понял бы, если это 4КБайта, но мегабайты для выравнивания??? Странновато.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, mantech said:

Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было..

Эта область есть как на 8Гб карте, так и на 16Гб. Видно ее только в Acronis Disk Director. Но одна карта работает, а вторая нет...Видел советы форматировать SD карты специальной программой - так и делаю.

15 minutes ago, mantech said:

Смотрите на работу функций чтения и записи,с какими размерами блоков они работают. Были случаи, когда 512 байт работало все отлично, а именно таким размером читает f_open, а далее шли запросы на чтение или запись уже больших размеров, тут и обламывалось все. Если так и есть, разбирайтесь с низкоуровневыми функциями, может там чего куб накубил:biggrin:

До самой записи и не доходит, ошибка вылазит в самом первой функции res = validate(fp), а именно из-за того, что disk_status(fil->fs->drv) возвращает единичку - STA_NOINIT .

 

 

Изменено пользователем Arxi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, mantech сказал:

Я понял бы, если это 4КБайта, но мегабайты для выравнивания??? Странновато.

Странновато было бы как если бы было 4кБ. Так как на таких картах типичный размер блока стирания насколько помню == сотни кБ. А учитывая то, что программа форматирования может и не знает о размере блока стирания, может она закладывается на максимально возможный размер блока стирания для всех возможных карт? Какой максимально возможный размер блока стирания? Поднимать доки - лень.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, Arxi сказал:

При этом от SDIO приходит ошибка 0x200 - SDMMC_ERROR_BAD_ERASE_PARAM /*!< An invalid selection for erase groups/ - информации по этой ошибке я вообще не нашел.

Видимо нужно смотреть какие именно команды отправляются в карту, статусы их выполнения. И сравнить это всё с таблицей возможностей карты (CSD).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, jcxz сказал:

Какой максимально возможный размер блока стирания? Поднимать доки - лень.

Дак скорей всего такой-же, как у НАНДа, порядка 128кбайт, никак не мегабайты..

И самое главное, зачем чего-то выравнивать, т.к. первый сектор или блок все-равно с адреса 0 начинается...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что то я сам провтыкал. Был уверен что f_open проходит без проблем, а сейчас еще раз прошел все по шагам и посмотрел все статусы и оказалось что f_mount проходит с FR_OK, а вот дальше на f_open получаю в ответ FR_NO_FILESYSTEM...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 минут назад, mantech сказал:

Дак скорей всего такой-же, как у НАНДа, порядка 128кбайт, никак не мегабайты..

По старенькому мануалу v1.9 вижу что длина блока уже тогда могла достигать 256кБ (2кБ * 128). А ведь там были ещё зарезервированные значения. :wink:

Цитата

И самое главное, зачем чего-то выравнивать, т.к. первый сектор или блок все-равно с адреса 0 начинается...

Выравнивать начало FAT. Так как она не с 0 начинается - перед ней есть bootrecord. И если FAT всё время модифицируется в процессе работы, то bootrecord - обычно нет. Если не выровнять - будут лишние операции по стиранию/записи этой bootrecord.

 

PS: Ну вобщем - я это только предположил такую причину. Что на самом деле - только ТС может разобраться. Да и не известно - какая у него ФС на карте: MBR? Или может он туда GPT запихнул?  :wink:

14 минут назад, Arxi сказал:

Что то я сам провтыкал. Был уверен что f_open проходит без проблем, а сейчас еще раз прошел все по шагам и посмотрел все статусы и оказалось что f_mount проходит с FR_OK, а вот дальше на f_open получаю в ответ FR_NO_FILESYSTEM...

Так может Вы её (карту) не под MBR вообще отформатировали?  :dash2:  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, jcxz сказал:

Так может Вы её (карту) не под MBR вообще отформатировали?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, mantech said:

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

С разделами я баловался, когда увидел что есть какая то неразмеченная область в начале карты. Думал вдруг проблема в ней, но что бы я не делал, эта область всегда возращалась. Делал полное форматирование как SD Card Formatter, так и Acronis Disk Director. Сейчас для проверки поставил на полное форматирование средствами Windows. Но в любом случае Windows эту карту видит и нормально с ней работает. Acronis показывает раздел, показывает тип - Primary MBR, показывает файловую систему FAT32....но все равно не едет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Arxi сказал:

Но в любом случае Windows эту карту видит и нормально с ней работает.

Это совсем не показатель, ибо винда "знает" больше всяких наворотов с разделами, чем фатфс.  Смотрите, что за тип MBR и т.д.  Раньше смотрел такие дела WinHex-ом..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...