Arxi 0 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба Всем привет! Первый опыт общения с 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Гб остается открытым... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 2 hours ago, Arxi said: Может быть для SDHC нужна еще какие то настройки в FATFs? Проблема в вашей файловой системе. На картах большого объема меняется способ адресации секторов.Почитайте эту ветку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arxi 0 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 5 minutes ago, AlexandrY said: Проблема в вашей файловой системе. На картах большого объема меняется способ адресации секторов.Почитайте эту ветку Ветку прочитал. Но вопрос это не прояснило. Я бы понял если бы не работали вообще SDHC карты, но ведь карта SDHC на 8Гб отлично работает. Отказывается работать именно на 16Гб. Обе отформатировал FAT32, у обеих карт cluster size 32kB. Но одна работает, а вторая нет. И не могу понять на какой стороне проблема... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 августа, 2019 Опубликовано 28 августа, 2019 (изменено) · Жалоба 1 час назад, Arxi сказал: Я бы понял если бы не работали вообще SDHC карты, но ведь карта SDHC на 8Гб отлично работает. Смотрите на работу функций чтения и записи,с какими размерами блоков они работают. Были случаи, когда 512 байт работало все отлично, а именно таким размером читает f_open, а далее шли запросы на чтение или запись уже больших размеров, тут и обламывалось все. Если так и есть, разбирайтесь с низкоуровневыми функциями, может там чего куб накубил 4 часа назад, Arxi сказал: а у 16Гб почему то перед основным разделом всегда появляется не размеченная область 4Мб...не понимаю почему. Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было.. Изменено 28 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 5 минут назад, mantech сказал: Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было.. Возможно это из-за выравнивание начала FAT на границу блока стирания карты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 2 минуты назад, jcxz сказал: Возможно это из-за выравнивание начала FAT на границу блока стирания карты. Я понял бы, если это 4КБайта, но мегабайты для выравнивания??? Странновато. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arxi 0 28 августа, 2019 Опубликовано 28 августа, 2019 (изменено) · Жалоба 15 minutes ago, mantech said: Это тоже может мешать нормальной работе, разбирайтесь, почему так форматирует. Я всегда форматировал в винде стандартным форматированием, что в ХР, что в семерке, никаких "лишних" областей не было.. Эта область есть как на 8Гб карте, так и на 16Гб. Видно ее только в Acronis Disk Director. Но одна карта работает, а вторая нет...Видел советы форматировать SD карты специальной программой - так и делаю. 15 minutes ago, mantech said: Смотрите на работу функций чтения и записи,с какими размерами блоков они работают. Были случаи, когда 512 байт работало все отлично, а именно таким размером читает f_open, а далее шли запросы на чтение или запись уже больших размеров, тут и обламывалось все. Если так и есть, разбирайтесь с низкоуровневыми функциями, может там чего куб накубил До самой записи и не доходит, ошибка вылазит в самом первой функции res = validate(fp), а именно из-за того, что disk_status(fil->fs->drv) возвращает единичку - STA_NOINIT . Изменено 28 августа, 2019 пользователем Arxi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 2 минуты назад, mantech сказал: Я понял бы, если это 4КБайта, но мегабайты для выравнивания??? Странновато. Странновато было бы как если бы было 4кБ. Так как на таких картах типичный размер блока стирания насколько помню == сотни кБ. А учитывая то, что программа форматирования может и не знает о размере блока стирания, может она закладывается на максимально возможный размер блока стирания для всех возможных карт? Какой максимально возможный размер блока стирания? Поднимать доки - лень. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 4 часа назад, Arxi сказал: При этом от SDIO приходит ошибка 0x200 - SDMMC_ERROR_BAD_ERASE_PARAM /*!< An invalid selection for erase groups/ - информации по этой ошибке я вообще не нашел. Видимо нужно смотреть какие именно команды отправляются в карту, статусы их выполнения. И сравнить это всё с таблицей возможностей карты (CSD). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 августа, 2019 Опубликовано 28 августа, 2019 (изменено) · Жалоба 29 минут назад, jcxz сказал: Какой максимально возможный размер блока стирания? Поднимать доки - лень. Дак скорей всего такой-же, как у НАНДа, порядка 128кбайт, никак не мегабайты.. И самое главное, зачем чего-то выравнивать, т.к. первый сектор или блок все-равно с адреса 0 начинается... Изменено 28 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arxi 0 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба Что то я сам провтыкал. Был уверен что f_open проходит без проблем, а сейчас еще раз прошел все по шагам и посмотрел все статусы и оказалось что f_mount проходит с FR_OK, а вот дальше на f_open получаю в ответ FR_NO_FILESYSTEM... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 40 минут назад, mantech сказал: Дак скорей всего такой-же, как у НАНДа, порядка 128кбайт, никак не мегабайты.. По старенькому мануалу v1.9 вижу что длина блока уже тогда могла достигать 256кБ (2кБ * 128). А ведь там были ещё зарезервированные значения. Цитата И самое главное, зачем чего-то выравнивать, т.к. первый сектор или блок все-равно с адреса 0 начинается... Выравнивать начало FAT. Так как она не с 0 начинается - перед ней есть bootrecord. И если FAT всё время модифицируется в процессе работы, то bootrecord - обычно нет. Если не выровнять - будут лишние операции по стиранию/записи этой bootrecord. PS: Ну вобщем - я это только предположил такую причину. Что на самом деле - только ТС может разобраться. Да и не известно - какая у него ФС на карте: MBR? Или может он туда GPT запихнул? 14 минут назад, Arxi сказал: Что то я сам провтыкал. Был уверен что f_open проходит без проблем, а сейчас еще раз прошел все по шагам и посмотрел все статусы и оказалось что f_mount проходит с FR_OK, а вот дальше на f_open получаю в ответ FR_NO_FILESYSTEM... Так может Вы её (карту) не под MBR вообще отформатировали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 8 минут назад, jcxz сказал: Так может Вы её (карту) не под MBR вообще отформатировали? Так-то форматом он там ничего бы не испортил, а вот если с разделами баловался - там может быть все, что угодно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arxi 0 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 1 minute ago, mantech said: Так-то форматом он там ничего бы не испортил, а вот если с разделами баловался - там может быть все, что угодно... С разделами я баловался, когда увидел что есть какая то неразмеченная область в начале карты. Думал вдруг проблема в ней, но что бы я не делал, эта область всегда возращалась. Делал полное форматирование как SD Card Formatter, так и Acronis Disk Director. Сейчас для проверки поставил на полное форматирование средствами Windows. Но в любом случае Windows эту карту видит и нормально с ней работает. Acronis показывает раздел, показывает тип - Primary MBR, показывает файловую систему FAT32....но все равно не едет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 августа, 2019 Опубликовано 28 августа, 2019 · Жалоба 2 минуты назад, Arxi сказал: Но в любом случае Windows эту карту видит и нормально с ней работает. Это совсем не показатель, ибо винда "знает" больше всяких наворотов с разделами, чем фатфс. Смотрите, что за тип MBR и т.д. Раньше смотрел такие дела WinHex-ом.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться