ATmega + SD | SDmmc. Как подружить?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
14-th
Родился
Сообщения: 3
Зарегистрирован: Вс мар 18, 2012 11:41:35

ATmega + SD | SDmmc. Как подружить?

Сообщение 14-th »

Доброго времени суток, уважаемые.
За микроконтролеры схватился недавно, за сим, если сильно туплю, прошу сильно не ругать.
Есть желание состряпать что-то типа записной книжки. К микроконтроллеру прикручиваем дисплей (в моем случае от Ноклы 3310), прикручиваем карту памяти (SD или SDmmc) и радуемся жизни.
Для экспериментов взял ATmega8. Так как у нее всего один SPI, то придется прикручивать еще одну восьмерку. Одна читает с карты и побайтово выкидывает прочитаное, другая побайтно принимает и выводит на дисплей.
Как пользоваться дисплеем, я примерно понял. Устроить канал передачи от одной атмеги к другой, думаю, будет не сложно. Порт D - прием/передача байта, на порт C развесить всякие флаги готовности приема/передачи.
Проблема заключается в том, что я никак не могу понять, как прикрутить карту памяти. Пытался читать интернеты, единственный вариант, насколько я понял, использовать FatFs. Причем, как я понял, для восьмерки лучше пользовать Petit FatFs, для экономии памяти. Да и к тому же, все равно, особо мощной системы мне не надо, надо будет только из корня читать *.txt файлы.
В итернетах скачaл Petit FatFs R0.02a (архив прикладываю). В ридми написано, что Low level disk I/O module не включен в архив и, что этот модуль я должен предоставить сам. Что это за модуль и где его искать?
Если не затруднит, расскажите что к чему и как всем этим пользоваться. Еще одна загвоздка заключается в том, что я пишу в IAR_AVR. И, кроме меня, похоже, в интернетах никто не пытался осуществлять чтение с карты в IARке. =/
Вложения
pff2a.zip
(38.32 КБ) 141 скачивание
Реклама
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение SubDia »

Замечание мимоходом.
Кто мешает использовать софтовый SPI? Для работы с дисплеем - проще не придумаешь. А карту - на аппаратный повесить.
В ридми написано, что этот Petit FatFS - это собственно файловая система, а осуществление взаимодействия с конкретной аппаратной частью - забота Ваша (зависит ведь от конкретного носителя). Однако в архиве любезно предоставлен "скелет" аппаратного слоя - это исходник "discio.c" и хидер "discio.h". Дописать все функции обработки придется самостоятельно. :)
ЗЫ. И хватит страдать "ардуинозависимостью". Зачем городить этажерки, если можно взять камень помощнее да пообъемистее? Уж простите, если что не так. Я-то не знаю - может, у Вас там склад восьмых "мег". =)
ЗЗЫ. Со стекляшкой от N3310 сильно жизни не нарадуетесь..
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение phanis »

Я тоже писал на IAR, плеер ATtiny2313_wav, использовал этот материал 103244835avr_sd.rar и кое что из библиотек Чена. Может и вам пригодится.
14-th
Родился
Сообщения: 3
Зарегистрирован: Вс мар 18, 2012 11:41:35

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение 14-th »

SubDia, благодарствую за замечание.
Что есть софтовый SPI и как его прикрутить?
Я верно понимаю, что в проект включаем все файлы из архива, в новом файле подключаем хидер discio.h и начинаем писать майн (инициализируем диск, открываем, читам и т.д.)?
P.s. Мне и самомубольше по душе все собрать на одном камне. Ибо про софтовый SPI слышу впервые, поэтому и начал выдумывать схемы на двух МК. Да и 8 мега просто дома валялась, на ней и эксперементирую. За более мощным камнем ехать далеко и лениво :)
P.p.s. Это-то да, но все же, мне, по большому счету, много не надо, лишь блоки текста выводить. А там, когда уже пойму что к чему, можно будет прикрутить и что-нибудь более интересное. :)

phanis, благодарствую, сейчас буду изучать.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение SubDia »

14-th, софтовый (программный то есть) SPI реализуется довольно просто - мы просто будем определенным образом дергать ногами МК, осуществляя передачу. Я до сих пор его иногда использую при работе с небольшими LCD, которые последовательный интерфейс поддерживают. Приведу код функции отправки байта данных (видал в сети и покороче, но этот мне привычнее всего):

Код: Выделить всё

void SendByte_LCD(unsigned char byte, unsigned char com)
{
unsigned char i;
    SPI_CLK = 0;                   //сбросили SPI_CLK
    CS = 0;                        //сбросили CS 
    if (com) SDATA = 1;            //если команда - устанавливаем SDATA
    else SDATA = 0;                //если нет - сбрасываем в ноль SDATA  
    SPI_CLK = 1;                   //по переднему фронту тактового сигнала защелкиваем сигнал D/C
    for (i=0; i<8; i++)            //а теперь уже передаем байт данных
      {SPI_CLK = 0;
        if (byte&0x80) SDATA = 1;
            else SDATA = 0;
            SPI_CLK = 1;
            byte <<= 1;}
    SPI_CLK = 1;
    CS = 1;
return;
}
Здесь операции сброса или установки сигналов CS, SDATA, SPI_CLK указаны примерно; просто наглядно показано, что в данном месте такой-то сигнал должен быть установлен в единицу или сброшен в ноль.
Понадобятся четыре вывода МК - это будут выводы, отвечающие за сигналы RESET (сброс), CLK (тактовый сигнал), SDATA (линия передачи данных) и CS (chipselect, "выбор микросхемы"). И соответственно, в представленном мной коде нужно будет установку/сброс соответствующих сигналов прописать. Мы видим, что в функцию передаются два параметра. Первый - byte - это байт данных для передачи. Второй же - com - это признак "данные/команда". Я обычно прописываю в хидере основного исходника следующие дефайны:

Код: Выделить всё

#define DATA 1
#define COM  0
И пользуюсь функцией так:

Код: Выделить всё

SendByte_LCD(0x1E, DATA);
Что означает передать байт 0x1E в качестве данных.
14-th писал(а):Я верно понимаю, что в проект включаем все файлы из архива, в новом файле подключаем хидер discio.h и начинаем писать майн (инициализируем диск, открываем, читам и т.д.)?
Да. А в discio.c пишем функции для работы с карточкой (железом).
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение phanis »

SubDia А в вашу функцию можно добавить и чтение сразу например по спаду?

Код: Выделить всё

unsigned char SendByte_LCD(unsigned char byte, unsigned char com)
{unsigned char i,read_ byte;
//---//
return read_ byte;
}
Реклама
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение SubDia »

Ну а почему нет? Только нужно настраивать дополнительный вывод (т.е. линию MISO) на чтение, вот и все.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
14-th
Родился
Сообщения: 3
Зарегистрирован: Вс мар 18, 2012 11:41:35

Re: ATmega + SD | SDmmc. Как подружить?

Сообщение 14-th »

SubDia, благодарю за столь подробные разъяснения.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»