четверг, 3 ноября 2011 г.

SD-card reading..

Суссес-стори :)

В протеусе сделал такую вот схему:

На виртуальный диск записал 3 текстовых файла, которые нашлись и считались контроллером. Правда - читался образ диска и все работает только, если при создании образа указать, что он FAT12/16, что естественно не очень хорошо. С другой стороны, FatFs поддерживает FAT32, так что думаю/надеюсь это глюки протеуса/создателя образа диска (про финт с протеусом и образом прочитал здесь, а то бы морочил голову очень долго)
На меге16 потратилось 68% памяти под программу и 73% "оперативки"; правда если повыкидать все, что используется для отладки (rpring/uart), то что-то еще сэкономится. Прошивка пока представляет собой подпиленый пример из FatFs, в основном для совместимости с avr-lib и для разделения "железа" и программы. Чтобы (вдруг кому понадобится) все заработало:
- создается проект, обзывается у меня testSD;
- в него из avr-lib добавляется avrlibdefs.h - тут разные дефайны
- в него из avr-lib добавляется avrlibtypes.h - там полезные определения типов, в т.ч. и нужные для FatFs (так что integer.h оттуда уже не нужен);
- добавляется global.h - тут указывается частота процессора и выносятся настройки, связанные с железом (что к чему подключено, чтобы при другой схеме подключения не искать по коду, что надо поменять);
- добавляются (опять из avr-lib)  uart.h/.c, rprint.h/.c, buffer.h/.c - нужны для отладки, т.е. для удобного вывода в терминал строковых сообщений;
- добавляются ff.c/.h, в ff.h небольшое изменение - удаляется ссылка на integer.h и добавляется на global.h - это собственно работа с файловой системой;
- добавляется ffconf.h - это настройки библиотеки: поддержка длинных имен, записи и т.д.
- из примеров к ff добавляются diskio.h/.c - это функции чтения конкретного устройства; diskio.c - это переименованый mmc.c из примера, я его немного подправил - там была жестко указана инициализация по портам, добавил #include "globals.h", чтобы можно было легко менять привязку к ножкам; кроме того, схема из примера умела управлять питанием SD-карты (ф-ции power_on/power_off/power_status) и проверять ее наличие/защиту от записи, все это тоже проигнорировано (точнее порты соотв. заведены в "0", так что прошивка думает, что все на месте)
Проектик в текущем состоянии - архивчик здесь

Комментариев нет:

Отправить комментарий