реклама на сайте
подробности

 
 
> помогите подключить AT45DB642 к Atmega32 через программный SPI, Нужна помощь
maslo_vdv
сообщение Apr 4 2011, 10:57
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 4-04-11
Пользователь №: 64 112



надо записывать и считывать дыные из AT45DB642. не как въехать не могу. помогите кто может
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
forastr
сообщение Apr 4 2011, 12:12
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



хотел тож вопрос задать насчет SPI в AVR. Может кто подскажет простой пример по которому можно разобраться с ним и с записью в память и чтением из нее(AT25 к примеру - она есть в proteus, 45 -нет)?Буду признателен!
Go to the top of the page
 
+Quote Post
GDI
сообщение Apr 4 2011, 12:29
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Ищете примеры работы с нужной датафлешью, например тут http://electronix.ru/forum/index.php?act=SF&s=&f=10 , затем заменяете аппаратные функции чтения и записи байта в SPI на ваши софтовые реализации.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
plombir
сообщение Apr 4 2011, 18:20
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Куда подъехать?
Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 4 2011, 19:16
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Эх, молодежжж 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

Удачи!
Прикрепленный файл  spiflash.zip ( 4.73 килобайт ) Кол-во скачиваний: 206

Go to the top of the page
 
+Quote Post
forastr
сообщение Apr 5 2011, 05:55
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Спасибо!Будем разбираться! smile3046.gif
Go to the top of the page
 
+Quote Post
forastr
сообщение Apr 8 2011, 08:35
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



ничего не получается 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;
                                                }
                                }
                }

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


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016