EEPROM i2c FM24CL16B

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Здравствуйте. Я немного поторопилась и заказала не ту микросхему памяти, а именно FM24CL16B (вместо 24LC16b)

Данная микросхема определяется как

0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57

Как я понимаю, каждый из 8 адресов - это раздел из 256 байт памяти?

 

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Да. Так же написано что указав один раз адрес - можно читать/писать до конца ВСЕЙ памяти с автоинкрементом.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Т.е. не обязательно делить на блоки по 256 байт?

0x50 256 байт

0x51 256 байт (512)

0x52 256 байт (768)

0x53 256 байт (1024)

0x54 256 байт (1280)

0x55 256 байт (1536)

0x56 256 байт (1792)

0x57 256 байт (2048)

Беру 1 адрес 0x50 и записываю в любую ячейку от 0 до 2048?

  Wire.beginTransmission(050);
  Wire.write(2048);
  Wire.write(123);
  delay(5);
  Wire.endTransmission();

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не выйдет, там, памойму, адрес 1 байт занимает, но это не точно.  Я работал начиная с 24C32, там шинный адрес один и адресация - 2 байта. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Три старших бита в transmission, а восемь уже в write и потом подряд 2048 байт данных ... (но это не точно - словами написано что пишется по кругу 7FF байт данных, но тут же пишется что защелка 8 битная ...)

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
Wire.beginTransmission(0x50); //адрес микросхемы и номер страницы 
Wire.write(0x00); //адрес байта внутри страницы
for (int i=0;i<2048;i++) Wire.write(БАЙТ ДАННЫХ);
Wire.endTransmission();

 

sadman41
Offline
Зарегистрирован: 19.10.2016

У Wire буфер 32 бита.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Так?

#include <Wire.h>



void EEPROM_Write(uint8_t Device,uint8_t Address, uint8_t data)
{
  Wire.beginTransmission(Device);
  Wire.write(Address);
  Wire.write(data);
  //delay(5);
  Wire.endTransmission();
}


uint8_t EEPROM_Read(uint8_t Device,uint8_t Address) {
  uint8_t reads;
  Wire.beginTransmission(Device);
  Wire.write(Address);
  Wire.endTransmission();
  Wire.requestFrom(Device, 1);
  if (Wire.available()) reads = Wire.read();

  Serial.print("Device: ");
  Serial.print("0x");
  Serial.print(Device, HEX);
  Serial.print(" Adres: ");
  Serial.print(Address);
  Serial.print(" Byte: ");
  Serial.print(reads);
  Serial.println("");
}




void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("Loads");

  for (int i=0;i<256;i++){
    EEPROM_Write(0x50,i,255-i);
  }


  for (int i=0;i<256;i++){
    EEPROM_Read(0x50,i);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
}

Ну и адреса от 0x50 до 0x57

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Komandir пишет:

Wire.beginTransmission(0x50); //адрес микросхемы и номер страницы 
Wire.write(0x00); //адрес байта внутри страницы
for (int i=0;i<2048;i++) Wire.write(БАЙТ ДАННЫХ);
Wire.endTransmission();

 

тfк ты только первые 31 байт запишешь.  всё остальное уйдёт в устройство ноль.  Надо самому тогда, ручками на шину передавать, без объекта Wire

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Я на самом деле Wire и не пользовался никогда. На ASM пишу в регистры аппаратного I2C или ногодрыгом ...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну вот, как правильно сказал грустец 

http://arduino.ru/forum/programmirovanie/eeprom-i2c-fm24cl16b#comment-543036

1 байт уйдет в адрес, остальные 31 в данные.  Больше не впихуешь. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

32 бИта - он написал ... по этому и не обратил внимания

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну он ашыпся. :)  Мы то знаем...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

И что буфер не кольцевой ? Индикатор заполненности надеюсь есть ? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Komandir пишет:

 Индикатор заполненности надеюсь есть ? 

Нихрена там нет.  

За кольцо - не знаю, не копался унутре. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Кто ТАКОЕ у г написал ??? Пойду подивлюсь на ДИЧЬ !

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Буржуин какойта. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

пойду ка я лучше огород поливать.  

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Не рано ? Солнце пожгет листья через капли-линзы.

b707
Offline
Зарегистрирован: 26.05.2017

Ссылка на наш с Садман  тест этой микрухи:

http://arduino.ru/forum/obshchii/interesnoe-na-aliexpress-i-ebay?page=127#comment-368287

надо же, уже 2 года прошло...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Komandir пишет:

Не рано ? Солнце пожгет листья через капли-линзы.

у меня 20-00.  Нету у меня сонца, там, где поливать надо. 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

http://arduino.ru/forum/programmirovanie/eeprom-i2c-fm24cl16b#comment-54...

Я правильно записываю/читаю?

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Получается. я могу подключить только одну микросхему?