Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите подключить AT45DB642 к Atmega32 через программный SPI
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
maslo_vdv
надо записывать и считывать дыные из AT45DB642. не как въехать не могу. помогите кто может
forastr
хотел тож вопрос задать насчет SPI в AVR. Может кто подскажет простой пример по которому можно разобраться с ним и с записью в память и чтением из нее(AT25 к примеру - она есть в proteus, 45 -нет)?Буду признателен!
GDI
Ищете примеры работы с нужной датафлешью, например тут http://electronix.ru/forum/index.php?act=SF&s=&f=10 , затем заменяете аппаратные функции чтения и записи байта в SPI на ваши софтовые реализации.
plombir
Куда подъехать?
nk@
Эх, молодежжж sm.gif
Забыли про Pascal Stang и его замечательную библиотеку AvrLib. В приложенном архиве 4 файла.
spiflash.c и spiflash.h - готовая либа для работы с spiflash.
Взята из вышеупомянутой библиотеки, слегка доработана напильником sm.gif, в частности дописаны функции spiflash_WriteProtect() и spiflash_GlobalWriteProtect(), думаю не требует поснения, для чего они нужны (даташит, надеюсь, хоть пролистывался?)
Библиотека нацелена на аппаратный SPI, но легко может быть переделана на софтверный заменой функций spi_init() и spi_transfer() на ваши, собственные.
Для затравки, прикрепил готовую реализцию от Паскаля (spi.c + spi.h).
Не забудьте поправить эти строки spiflash.h, под ваш hardware
Код
// HW specific constants
#define SPIFLASH_CS_DDR         DDRB
#define SPIFLASH_CS_PORT         PORTB
#define SPIFLASH_CS_PIN            4

Данная либлиотека обкатана с микросхемами ST M25P28, и Atmel AT25DF321A. С AT45ХХХХ не проверялось, ввиду отсутствия таковых. По идее, они имеют аналогичный алгоритм работы, а если не заработает "в лоб", то достаете напильник, открываете документацию на AT25 и AT45, ищите различия... Я бы сам проверил, но AT45 у меня, к сожалению нет. По крайней мере, у вас уже есть некоторая стартовая площадка sm.gif

Удачи!
Нажмите для просмотра прикрепленного файла
forastr
Спасибо!Будем разбираться! smile3046.gif
forastr
ничего не получается crying.gif
Взял в помощь файлик at45d161.h даташит на at25f4096 и захотел просто записать в нее числа от 1 до 20.
вот код:
Код
#include <mega128.h>
#define DDR_SPI DDRB
#define DD_MOSI 2
#define DD_MISO 3
#define DD_SCK 1
#define DD_CS 0
#define DF_CHIP_SELECT 0x01
#define WREN 0x06;

unsigned char temp = 0x80;
char count = 1;

                void main(void){
                        static unsigned int buffer_counter = 0;

                        while (1){
                                DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_CS);
                                SPCR = (1<<SPE)|(1<<MSTR);
                                PORTB &= ~DF_CHIP_SELECT;  
                                SPDR = WREN;
                                while (!(SPSR & temp));
                                SPDR = 0x00;                            
                                while (!(SPSR & temp));                
                                SPDR = (char)(buffer_counter>>8);      
                                while (!(SPSR & temp));                
                                SPDR = (char)buffer_counter;            
                                while (!(SPSR & temp));                
                                SPDR = count;
                                while (!(SPSR & temp));
                                PORTB |= DF_CHIP_SELECT;
                                if (count++==21){
                                        #asm ("NOP");
                                        break;
                                                }
                                }
                }

Помогите, пожалуйста, кто может!?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.