Arduino Due + SD + mkdir - файл вместо папки
- Войдите на сайт для отправки комментариев
Вс, 17/12/2017 - 19:31
Приветствую!
Адаптирую прошивку под 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 - такая же дичь. Кто сталкивался - как это гумно лечить?
Да, в первом куске кода ошибся - конечно же, SD с больших букв.
Короче, мигрирую на SdFat, там поднялось всё. В топку стандартную SD-библиотеку.
Тему можно считать закрытой.
Короче, мигрирую на SdFat, там поднялось всё. В топку стандартную SD-библиотеку.
Тему можно считать закрытой.
Очень правильное решение, мне, например , всегда не хватало функционала стандартной бибилиотеки. Уже одно то , что у нее проблемы с установкой времени создания/изменения файла наводит на грустные мысли.
Очень правильное решение, мне, например , всегда не хватало функционала стандартной бибилиотеки. Уже одно то , что у нее проблемы с установкой времени создания/изменения файла наводит на грустные мысли.
Ну да, библиотека годная, огорчает то - почему раньше не прикрутил её: всю ночь продрюкался, переписывая код, и ещё не факт, что косяков не наплодил. Зато теперь работает и под Due, и под Mega.
Только одна странность - не всегда под Due инициализируется библиотека - сделал костыль: пять раз в цикле через промежутки времени вызываю SdFat.begin - вот тогда норм. Не сталкивались - что Due не нравится, чего она капризничает?
Очень давно было. Помоему наступал на такие грабли. Была выявлена зависимость от экземпляра SD. Контроллер был тот что на плате с W5100. А решение оказалось в переключении скорости обмена с картой, кажись дефайнами где то там крутится.
Очень давно было. Помоему наступал на такие грабли. Была выявлена зависимость от экземпляра SD. Контроллер был тот что на плате с W5100. А решение оказалось в переключении скорости обмена с картой, кажись дефайнами где то там крутится.
Скорости перебирал, самое устойчивое под Due - в моём случае SPI_HALF_SPEED, но и в этом режиме, как я писал - с неопределённой вероятностью были неинициализации, если просто вызывать один раз SdFat.begin. Решил, как я и сказал - попытками многократной инициализации через интервалы времени.
Ясное дело, что это костыль, и надо бы докопаться до самой причины - на, как всегда - то вёдер не завезли, то ...на на всех не хватает :) Со временем доползу и до этого нюанса.