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

 
 
 
Reply to this topicStart new topic
> ATmega 128 и at45db161d, то ли лыжи не едут....
Мах
сообщение Oct 28 2006, 20:34
Сообщение #1


Участник
*

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



Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. cranky.gif

В чем проблемма?
Может у кого то работает в такой конфигурации схема.
Прошу поделится если есть help.gif
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Oct 29 2006, 06:34
Сообщение #2


За битами по регистрам гоняюсь
***

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



Цитата(Мах @ Oct 29 2006, 00:34) *
Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. cranky.gif

В чем проблемма?
Может у кого то работает в такой конфигурации схема.
Прошу поделится если есть help.gif

Зайдите на www.gaw.ru, на главной странице есть ссылки на раздел DataFlash, найдёте много полезного.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
ANV
сообщение Oct 29 2006, 07:58
Сообщение #3


Участник
*

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



SPI модуль правильно сконфигурировал?
Может там действительно одни единицы?

Попробуйте записать/считать буфер/страницу, прямое чтение.


з.ы. Эта ИМС у меня работает, только не с мегой...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 29 2006, 09:56
Сообщение #4


Гуру
******

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



Цитата(Nanobyte @ Oct 29 2006, 14:34) *
Цитата(Мах @ Oct 29 2006, 00:34) *

Народ попала мне в руки память at45db161d. Решил ее использовать, все собрал в железе, но никак не найду с ней общий язык, все время возвращает 1. Вот я и думаю, то ли програмку не правильно написал, то ли успел спалить микруху памяти, либо что то соединил не так. cranky.gif

В чем проблемма?
Может у кого то работает в такой конфигурации схема.
Прошу поделится если есть help.gif

Зайдите на www.gaw.ru, на главной странице есть ссылки на раздел DataFlash, найдёте много полезного.
Млин, прикольно, люди хотят громоздилу поиметь, но самим таже [email="...@это"]...@это[/email]@... поднять лень. Есть такой сайт, называется http://atmel.com , а там есть аппноты так называемые, вот... А там есть прикольные исходники, как раз для AT45xxx, а как их там найти, бооооооольшая загадка....


--------------------
Go to the top of the page
 
+Quote Post
Мах
сообщение Oct 29 2006, 10:46
Сообщение #5


Участник
*

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



Цитата(prottoss @ Oct 29 2006, 13:56) *
[ Млин, прикольно, люди хотят громоздилу поиметь, но самим таже [email="...@это"]...@это[/email]@... поднять лень. Есть такой сайт, называется http://atmel.com , а там есть аппноты так называемые, вот... А там есть прикольные исходники, как раз для AT45xxx, а как их там найти, бооооооольшая загадка....

Это я уже читаю. Но не понимаю sad.gif
Go to the top of the page
 
+Quote Post
vesago
сообщение Oct 29 2006, 14:18
Сообщение #6


Тутэйшы
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Мах
сообщение Oct 29 2006, 20:54
Сообщение #7


Участник
*

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



Цитата(vesago @ Oct 29 2006, 18:18) *
Вот пример моего работающего кода как раз на меге 128 чип дб161. Если с железом проблем нет, должно работать. Работоспособность можно проверить чтением статусного регистра.


ОГРОМНОЕ biggrin.gif спасибо! cheers.gif Все встало на сво места.
У меня устройства конфликтовали LCD и память они на SPI оба висят.
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 29 2006, 23:40
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Мах @ Oct 29 2006, 23:54) *
на SPI оба висят.

с этого и надо было начинать smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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