|
|
  |
ATmega 128 и at45db161d, то ли лыжи не едут.... |
|
|
|
Oct 28 2006, 20:34
|

Участник

Группа: Новичок
Сообщений: 27
Регистрация: 13-01-06
Пользователь №: 13 122

|
Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. В чем проблемма? Может у кого то работает в такой конфигурации схема. Прошу поделится если есть
|
|
|
|
|
Oct 29 2006, 06:34
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(Мах @ Oct 29 2006, 00:34)  Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. В чем проблемма? Может у кого то работает в такой конфигурации схема. Прошу поделится если есть  Зайдите на www.gaw.ru, на главной странице есть ссылки на раздел DataFlash, найдёте много полезного.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Oct 29 2006, 07:58
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 16-10-05
Пользователь №: 9 713

|
SPI модуль правильно сконфигурировал? Может там действительно одни единицы?
Попробуйте записать/считать буфер/страницу, прямое чтение.
з.ы. Эта ИМС у меня работает, только не с мегой...
|
|
|
|
|
Oct 29 2006, 09:56
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Nanobyte @ Oct 29 2006, 14:34)  Цитата(Мах @ Oct 29 2006, 00:34)  Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. В чем проблемма? Может у кого то работает в такой конфигурации схема. Прошу поделится если есть  Зайдите на www.gaw.ru, на главной странице есть ссылки на раздел DataFlash, найдёте много полезного. Млин, прикольно, люди хотят громоздилу поиметь, но самим таже [email="...@это"]...@это[/email]@... поднять лень. Есть такой сайт, называется http://atmel.com , а там есть аппноты так называемые, вот... А там есть прикольные исходники, как раз для AT45xxx, а как их там найти, бооооооольшая загадка....
--------------------
|
|
|
|
|
Oct 29 2006, 10:46
|

Участник

Группа: Новичок
Сообщений: 27
Регистрация: 13-01-06
Пользователь №: 13 122

|
Цитата(prottoss @ Oct 29 2006, 13:56)  [ Млин, прикольно, люди хотят громоздилу поиметь, но самим таже [email="...@это"]...@это[/email]@... поднять лень. Есть такой сайт, называется http://atmel.com , а там есть аппноты так называемые, вот... А там есть прикольные исходники, как раз для AT45xxx, а как их там найти, бооооооольшая загадка.... Это я уже читаю. Но не понимаю
|
|
|
|
|
Oct 29 2006, 14:18
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
Вот пример моего работающего кода как раз на меге 128 чип дб161. Если с железом проблем нет, должно работать. Работоспособность можно проверить чтением статусного регистра. Код void SPI_Init(void) { PORT_SPI |= (1<<SCK)|(1<<MOSI)|(1<<MISO)|(1<<CS_SPI_1);
DDR_SPI |= (1<<SCK)|(1<<MOSI)|(1<<CS_SPI_1); DDR_SPI &= ~(1<<MISO);
SPSR = (1<<SPI2X); SPCR = (1<<SPE)|(1<<MSTR); //Mode 0 }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Записываем байт //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void SPI_Write_Byte(unsigned char b) { SPDR = b; while ((SPSR & (1<<SPIF)) == 0); }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Читаем байт //:::::::::::::::::::::::::::::::::::::::::::::::::::::: unsigned char SPI_Read_Byte(void) { SPDR = 0x00; while ((SPSR & (1<<SPIF)) == 0); return SPDR; }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Чтение статусного регистра //:::::::::::::::::::::::::::::::::::::::::::::::::::::: unsigned char AT45_Read_Status(void) { unsigned char tmp;
AT45_ON;
SPI_Write_Byte(AT45_OP_STATUS_REGISTER_READ); tmp = SPI_Read_Byte();
AT45_OFF; return tmp; }
unsigned char AT45_Check_Ready(void) { return (AT45_Read_Status() & (1<<AT45_STATUS_FLAG_BUSY)); }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Чтение данных //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void AT45_Flash_Read(unsigned int page, unsigned int addr_on_page, unsigned int bcnt, unsigned char *buf) { unsigned int i;
AT45_ON;
SPI_Write_Byte(AT45_OP_CONTINUOUS_ARRAY_READ); SPI_Write_Byte((unsigned char)(page>>6)); SPI_Write_Byte((unsigned char)(page<<2)|(unsigned char)(addr_on_page>>8)); SPI_Write_Byte((unsigned char)addr_on_page);
SPI_Write_Byte(0); SPI_Write_Byte(0); SPI_Write_Byte(0); SPI_Write_Byte(0);
i = 0; do { *(buf + i) = SPI_Read_Byte(); i++; }while(i<bcnt);
AT45_OFF; } //:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Чтение данных из буфера //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void AT45_Buf_Read(unsigned char buf_num, unsigned int addr_on_page, unsigned int bcnt, unsigned char *buf) { unsigned int i;
AT45_ON;
switch(buf_num) { case BUFER_1: SPI_Write_Byte(AT45_OP_BUFFER_1_READ); break;
case BUFER_2: SPI_Write_Byte(AT45_OP_BUFFER_2_READ); break;
default: return; } SPI_Write_Byte(0); SPI_Write_Byte((unsigned char)(addr_on_page>>8)); SPI_Write_Byte((unsigned char)addr_on_page); SPI_Write_Byte(0);
i = 0; do { *(buf + i) = SPI_Read_Byte(); i++; }while(i<bcnt);
AT45_OFF; }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Запись данных в буфер //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void AT45_Buf_Write(unsigned char buf_num, unsigned int addr_on_page, unsigned int bcnt, unsigned char *buf) { unsigned int i;
AT45_ON;
switch(buf_num) { case BUFER_1: SPI_Write_Byte(AT45_OP_BUFFER_1_WRITE); break;
case BUFER_2: SPI_Write_Byte(AT45_OP_BUFFER_2_WRITE); break;
default: return; } SPI_Write_Byte(0); SPI_Write_Byte((unsigned char)(addr_on_page>>8)); SPI_Write_Byte((unsigned char)addr_on_page);
i = 0; do { SPI_Write_Byte(*(buf + i)); i++; }while(i<bcnt);
AT45_OFF; }
#define AT45_OP_BUFFER_1_WRITE 0x84
// запись буфера 2 #define AT45_OP_BUFFER_2_WRITE 0x87
// чтение буфера 1 #define AT45_OP_BUFFER_1_READ 0xD4
// чтение буфера 2 #define AT45_OP_BUFFER_2_READ 0xD6
// Буфер 1 в основную страницу памяти программы с встроенным стиранием #define AT45_OP_B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83
// Буфер 2 в основную страницу памяти программы с встроенным стиранием #define AT45_OP_B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86
// Буфер 1 в основную страницу памяти программы без встроенного стирания #define AT45_OP_B1_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x88
// Буфер 2 в основную страницу памяти программы без встроенного стирания #define AT45_OP_B2_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x89
// Основная страница памяти программы сквозь буфер 1 #define AT45_OP_MM_PAGE_PROG_THROUGH_B1 0x82
// Основная страница памяти программы сквозь буфер 2 #define AT45_OP_MM_PAGE_PROG_THROUGH_B2 0x85
// автоматическая перезапись страницы через буфер 1 #define AT45_OP_AUTO_PAGE_REWRITE_THROUGH_B1 0x58
// автоматическая перезапись страницы через буфер 2 #define AT45_OP_AUTO_PAGE_REWRITE_THROUGH_B2 0x59
// сравнение основной страницы памяти с буфером 1 #define AT45_OP_MM_PAGE_TO_B1_COMP 0x60
// сравнение основной страницы памяти с буфером 2 #define AT45_OP_MM_PAGE_TO_B2_COMP 0x61
// передача основной страницы памяти в буфер 1 #define AT45_OP_MM_PAGE_TO_B1 0x53
// передача основной страницы памяти в буфер 2 #define AT45_OP_MM_PAGE_TO_B2 0x55
// регистр состояния #define AT45_OP_STATUS_REGISTER_READ 0xD7
// чтение основной страницы памяти #define AT45_OP_MAIN_MEMORY_PAGE_READ 0xD2
// последовательно чтение #define AT45_OP_CONTINUOUS_ARRAY_READ 0xE8
// очистка 528 байт страницы #define AT45_OP_PAGE_ERASE 0x81
// очистка 512 страниц #define AT45_OP_BLOCK_ERASE 0x50
|
|
|
|
|
Oct 29 2006, 20:54
|

Участник

Группа: Новичок
Сообщений: 27
Регистрация: 13-01-06
Пользователь №: 13 122

|
Цитата(vesago @ Oct 29 2006, 18:18)  Вот пример моего работающего кода как раз на меге 128 чип дб161. Если с железом проблем нет, должно работать. Работоспособность можно проверить чтением статусного регистра. ОГРОМНОЕ  спасибо!  Все встало на сво места. У меня устройства конфликтовали LCD и память они на SPI оба висят.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|