Arduino Due + SD + mkdir - файл вместо папки

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Приветствую!

Адаптирую прошивку под Due, и столкнулся со странной дичью, щас опишу вводные:

1. Arduino IDE 1.6.7;

2. Arduino Due;

3. Стандартная библиотека SD;

4. SD-карта на 2 Гб SanDisk, форматирована в FAT16, класс - 10-й.

 

В общем, дичь в следующем: карточка инициализируется, всё норм, но дальше - начинаются забавы. Вот такой код:

File f = sd.open("DIRNAME");
if(f)
{
f.close();
}

наглухо вешает камень, если папки нет на SD. Вот такой код:

SD.mkdir("DIRNAME");

создаёт не папку с именем DIRNAME, а ФАЙЛ с именем DIRNAME. Добавление leading/trailing slashes - не помогает, т.е. пофик, в каких комбинациях пробовать:

SD.mkdir("DIRNAME");
SD.mkdir("DIRNAME/");
SD.mkdir("/DIRNAME/");
SD.mkdir("/DIRNAME");

на карточке всё равно файл, а не папка. Если переформатировать в FAT32 - такая же дичь. Кто сталкивался - как это гумно лечить?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Да, в первом куске кода ошибся - конечно же, SD с больших букв.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Короче, мигрирую на SdFat, там поднялось всё. В топку стандартную SD-библиотеку.

Тему можно считать закрытой.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DIYMan пишет:

Короче, мигрирую на SdFat, там поднялось всё. В топку стандартную SD-библиотеку.

Тему можно считать закрытой.

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

brokly пишет:

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

Ну да, библиотека годная, огорчает то - почему раньше не прикрутил её: всю ночь продрюкался, переписывая код, и ещё не факт, что косяков не наплодил. Зато теперь работает и под Due, и под Mega.

Только одна странность - не всегда под Due инициализируется библиотека - сделал костыль: пять раз в цикле через промежутки времени вызываю SdFat.begin - вот тогда норм. Не сталкивались - что Due не нравится, чего она капризничает?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Очень давно было. Помоему наступал на такие грабли. Была выявлена зависимость от экземпляра SD. Контроллер был тот что на плате с W5100. А решение оказалось в переключении скорости обмена с картой, кажись дефайнами где то там крутится.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

brokly пишет:

Очень давно было. Помоему наступал на такие грабли. Была выявлена зависимость от экземпляра SD. Контроллер был тот что на плате с W5100. А решение оказалось в переключении скорости обмена с картой, кажись дефайнами где то там крутится.

Скорости перебирал, самое устойчивое под Due - в моём случае SPI_HALF_SPEED, но и в этом режиме, как я писал - с неопределённой вероятностью были неинициализации, если просто вызывать один раз SdFat.begin. Решил, как я и сказал - попытками многократной инициализации через интервалы времени.

Ясное дело, что это костыль, и надо бы докопаться до самой причины - на, как всегда - то вёдер не завезли, то ...на на всех не хватает :) Со временем доползу и до этого нюанса.