Доброго времени суток, уважаемые.
За микроконтролеры схватился недавно, за сим, если сильно туплю, прошу сильно не ругать.
Есть желание состряпать что-то типа записной книжки. К микроконтроллеру прикручиваем дисплей (в моем случае от Ноклы 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ке. =/
ATmega + SD | SDmmc. Как подружить?
ATmega + SD | SDmmc. Как подружить?
- Вложения
-
- pff2a.zip
- (38.32 КБ) 141 скачивание
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: ATmega + SD | SDmmc. Как подружить?
Замечание мимоходом.
Кто мешает использовать софтовый SPI? Для работы с дисплеем - проще не придумаешь. А карту - на аппаратный повесить.
В ридми написано, что этот Petit FatFS - это собственно файловая система, а осуществление взаимодействия с конкретной аппаратной частью - забота Ваша (зависит ведь от конкретного носителя). Однако в архиве любезно предоставлен "скелет" аппаратного слоя - это исходник "discio.c" и хидер "discio.h". Дописать все функции обработки придется самостоятельно.
ЗЫ. И хватит страдать "ардуинозависимостью". Зачем городить этажерки, если можно взять камень помощнее да пообъемистее? Уж простите, если что не так. Я-то не знаю - может, у Вас там склад восьмых "мег". =)
ЗЗЫ. Со стекляшкой от N3310 сильно жизни не нарадуетесь..
Кто мешает использовать софтовый SPI? Для работы с дисплеем - проще не придумаешь. А карту - на аппаратный повесить.
В ридми написано, что этот Petit FatFS - это собственно файловая система, а осуществление взаимодействия с конкретной аппаратной частью - забота Ваша (зависит ведь от конкретного носителя). Однако в архиве любезно предоставлен "скелет" аппаратного слоя - это исходник "discio.c" и хидер "discio.h". Дописать все функции обработки придется самостоятельно.
ЗЫ. И хватит страдать "ардуинозависимостью". Зачем городить этажерки, если можно взять камень помощнее да пообъемистее? Уж простите, если что не так. Я-то не знаю - может, у Вас там склад восьмых "мег". =)
ЗЗЫ. Со стекляшкой от N3310 сильно жизни не нарадуетесь..
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: ATmega + SD | SDmmc. Как подружить?
Я тоже писал на IAR, плеер ATtiny2313_wav, использовал этот материал 103244835avr_sd.rar и кое что из библиотек Чена. Может и вам пригодится.
Re: ATmega + SD | SDmmc. Как подружить?
SubDia, благодарствую за замечание.
Что есть софтовый SPI и как его прикрутить?
Я верно понимаю, что в проект включаем все файлы из архива, в новом файле подключаем хидер discio.h и начинаем писать майн (инициализируем диск, открываем, читам и т.д.)?
P.s. Мне и самомубольше по душе все собрать на одном камне. Ибо про софтовый SPI слышу впервые, поэтому и начал выдумывать схемы на двух МК. Да и 8 мега просто дома валялась, на ней и эксперементирую. За более мощным камнем ехать далеко и лениво
P.p.s. Это-то да, но все же, мне, по большому счету, много не надо, лишь блоки текста выводить. А там, когда уже пойму что к чему, можно будет прикрутить и что-нибудь более интересное.
phanis, благодарствую, сейчас буду изучать.
Что есть софтовый SPI и как его прикрутить?
Я верно понимаю, что в проект включаем все файлы из архива, в новом файле подключаем хидер discio.h и начинаем писать майн (инициализируем диск, открываем, читам и т.д.)?
P.s. Мне и самомубольше по душе все собрать на одном камне. Ибо про софтовый SPI слышу впервые, поэтому и начал выдумывать схемы на двух МК. Да и 8 мега просто дома валялась, на ней и эксперементирую. За более мощным камнем ехать далеко и лениво
P.p.s. Это-то да, но все же, мне, по большому счету, много не надо, лишь блоки текста выводить. А там, когда уже пойму что к чему, можно будет прикрутить и что-нибудь более интересное.
phanis, благодарствую, сейчас буду изучать.
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: ATmega + SD | SDmmc. Как подружить?
14-th, софтовый (программный то есть) SPI реализуется довольно просто - мы просто будем определенным образом дергать ногами МК, осуществляя передачу. Я до сих пор его иногда использую при работе с небольшими LCD, которые последовательный интерфейс поддерживают. Приведу код функции отправки байта данных (видал в сети и покороче, но этот мне привычнее всего):
Здесь операции сброса или установки сигналов CS, SDATA, SPI_CLK указаны примерно; просто наглядно показано, что в данном месте такой-то сигнал должен быть установлен в единицу или сброшен в ноль.
Понадобятся четыре вывода МК - это будут выводы, отвечающие за сигналы RESET (сброс), CLK (тактовый сигнал), SDATA (линия передачи данных) и CS (chipselect, "выбор микросхемы"). И соответственно, в представленном мной коде нужно будет установку/сброс соответствующих сигналов прописать. Мы видим, что в функцию передаются два параметра. Первый - byte - это байт данных для передачи. Второй же - com - это признак "данные/команда". Я обычно прописываю в хидере основного исходника следующие дефайны:
И пользуюсь функцией так:
Что означает передать байт 0x1E в качестве данных.
Код: Выделить всё
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;
}
Понадобятся четыре вывода МК - это будут выводы, отвечающие за сигналы RESET (сброс), CLK (тактовый сигнал), SDATA (линия передачи данных) и CS (chipselect, "выбор микросхемы"). И соответственно, в представленном мной коде нужно будет установку/сброс соответствующих сигналов прописать. Мы видим, что в функцию передаются два параметра. Первый - byte - это байт данных для передачи. Второй же - com - это признак "данные/команда". Я обычно прописываю в хидере основного исходника следующие дефайны:
Код: Выделить всё
#define DATA 1
#define COM 0
Код: Выделить всё
SendByte_LCD(0x1E, DATA);
Да. А в discio.c пишем функции для работы с карточкой (железом).14-th писал(а):Я верно понимаю, что в проект включаем все файлы из архива, в новом файле подключаем хидер discio.h и начинаем писать майн (инициализируем диск, открываем, читам и т.д.)?
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- Реклама
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: ATmega + SD | SDmmc. Как подружить?
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. Как подружить?
Ну а почему нет? Только нужно настраивать дополнительный вывод (т.е. линию MISO) на чтение, вот и все.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: ATmega + SD | SDmmc. Как подружить?
SubDia, благодарю за столь подробные разъяснения.


