Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
voltex8
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 3
1

Внешняя eeprom с шиной spi

27.11.2018, 19:10. Просмотров 107. Ответов 0

Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
Ссылаясь на даташит написал следующий код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#define F_CPU 8000000UL
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/io.h>
 
#define SS PB2
#define MOSI PB3
#define MISO PB4
#define SCK PB5
 
#define  WP PB0
#define HOLD PB1
 
#define WREN 0x06
#define WRITE 0x02
#define READ 0x03
#define RDSR 0x05
 
void port_ini(void)
{
    DDRB |= ((1<<WP)|(1<<HOLD));
    PORTB |= ((1<<WP)|(1<<HOLD));
}
 
void SPI_Init(void)
{
    DDRB |=(1<<SS)|(1<<MOSI)|(1<<SCK); 
    DDRB &=~(1<<MISO);
    PORTB|=(1<<SS); 
 
    SPCR = 0; 
    SPSR = 0; 
 
    SPCR |= (1<<MSTR); 
    SPCR |=(1<<SPE);
}
 
void SPI_Send_byte(char data)
{
    PORTB &=~(1<<SS); 
    SPDR = data; 
    while(!(SPSR&(1<<SPIF))) ; 
    PORTB |=(1<<SS); 
}
 
void E_Write (short int addr, char data)
{
    SPI_Send_byte(WREN);
    PORTB &=~(1<<SS); 
    SPDR = WRITE;
    while(!(SPSR&(1<<SPIF))) ;
    
    SPDR = addr>>8; 
    while(!(SPSR&(1<<SPIF))) ;
    SPDR = addr;
    while(!(SPSR&(1<<SPIF))) ;
    
    SPDR = data;
    while(!(SPSR&(1<<SPIF))) ;
    
    PORTB |=(1<<SS);    
}
 
char E_Read (short int addr)
{ 
    char result;
    PORTB &=~(1<<SS);  
    SPDR = READ;
    while(!(SPSR&(1<<SPIF))) ;
    
    SPDR = addr>>8; 
    while(!(SPSR&(1<<SPIF))) ;
    SPDR = addr;
    while(!(SPSR&(1<<SPIF)));
    
    result = SPDR;
    PORTB |=(1<<SS);
    return result;
}
 
 
int main(void)
{
    short int addr = 0x0101;
    char data = 0x55;
    port_ini();
    SPI_Init();
    E_Read(addr);
    
    while (1)
    {
    }
}
Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет.
0
Миниатюры
Внешняя eeprom с шиной spi  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2018, 19:10
Ответы с готовыми решениями:

AtMega8, внешняя EEPROM и UART
Всем привет. Нумбский вопрос, я новичок. Думаю над новой разработкой. Нужно послушать шину...

Взаимодействие МК c внешней EEPROM по SPI
Здравствуйте! Пожалуйста, объясните или (еще лучше) приведите пример как микроконтроллер (например...

Прошивки SPI и EEPROM для ТВ
Здравствуйте.Хотелось узнать, возможно-ли прочесть на понятном языке HEX-код в прошивках.и внести...

СМА Bosch WLG24160OE/03, внешняя EEPROM
буду признателен за прошивку.

stm32f103 + eeprom spi (нет любви)
Собсна проблема. EEPROM - 25lc256. Читаем. Отсылаем команду, 16 битный адрес ячейки. Ведомый...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2018, 19:10

stm32+ внешняя память(flash, fram, eeprom)
День добрый. Понадобилось хранить достаточно большой объем данных, порядка 128 кбайт. Необходимо их...

SPI EEPROM M95M01-R - кто-нибудь сталкивался? [решено]
Никак не могу туда ничего записать, ни в Status Register, ни в, собственно, память. Чтение регистра...

STM32F103C8 FATFS SPI EEPROM. Hardfault при вызове f_close
Доброго времени суток. Пытаюсь развернуть FATFS на мегабитной SPI EEPROM. Столкнулся с проблемой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru