Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT24CXX проблемы с записью и чтением
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
haker_fox
Здравствуйте!
У меня возникли проблемы с чтением и записью микросхемы последовательной памяти AT24C04 и AT24C08.

Пытаюсь записывать и читать данные в страничном режиме, но все данные записываются/читаются с нулевого адреса, в не зависимости от адреса который передаем мы.

Код для чтения привожу ниже

Код
  i2c_start();
  i2c_tx(AT24_ADDR|WR);
  i2c_tx(hi_byte);
  i2c_tx(lo_byte);
  i2c_start();
  i2c_tx(AT24_ADDR|RD);
  for(i=0;i<5;i++)
    {
      buf_net_tx[N_TX+1+i]=i2c_rx(1);
    }
  buf_net_tx[N_TX+1+i]=i2c_rx(0);                     //последний считываемый байт - подтверждение не нужно
  i2c_stop();


В догонку: подтягивающие резисторы на шине есть (4,7 К), адрес микросхемы верный, сама шина работает, на ней еще термодатчики есть и они работают.

В чем же может быть дело?
IgorKossak
Согласно тех. документации старшая часть адреса (адрес страницы) данных должна находиться в адресе устройства (Device Address).
Адрес слова передаётся одним байтом.
Примерно так:
Код
  i2c_start();
  i2c_tx(AT24_ADDR|WR | (hi_byte<<1));
  i2c_tx(lo_byte);
  i2c_start();
  i2c_tx(AT24_ADDR|RD | (hi_byte<<1));
  for(i=0;i<5;i++)
    {
      buf_net_tx[N_TX+1+i]=i2c_rx(1);
    }
  buf_net_tx[N_TX+1+i]=i2c_rx(0);        //последний считываемый байт - подтверждение не нужно
  i2c_stop();
haker_fox
2IgorKossak: большое Вам спасибо! Проверил на чтение, все работает. Думаю на запись тоже будет работать.

Очень стыдно, что такой пустяк и не догадался сам.
Но меня еще сбил с толку чужой исходник:

Код
char getmem(char ah,char al)       //получение байта из адреса //при входе должно быть SCL=1 SDA=1 SDA=out
     {
     char data;
     start();
     puti2c(160);
     puti2c(ah);
     puti2c(al);
     start();
     puti2c(161);
     data=geti2c();
     stop();
     return data;
     }


Написано кем-то для МК PIC16F84.
IgorKossak
Чужой исходник вполне подойдёт для AT24C32, AT24C64, ...
haker_fox
Да уж, только там как раз было написано, что он работает с указанными выше микросхемами. Видимо автор программы что-то перепуталsmile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.