24LC256 Hakkında

Başlatan görkem, 16 Şubat 2019, 17:58:41

görkem

Arkadaşlar Merhaba,

24LC256 eepromu ile haberleşme sağlıyorum.

 sürekli okuma yazma yapmam gerekiyor fakat  30 byte sonra kayıtlı verilerde bozulma oluyor.

Yapı şu şekilde çalışıyor; epromun belli bir adres bloğuna veriler kayıt ediliyor.
Daha sonra kaydedilen veriler ile okunan veriler eşleşiyorsa epromun farklı bir alanına farklı veriler ile birlikte kayıt ediliyor. Bir süre düzgün çalıştıktan sonra  epromun verileri bozuluyor.
100Khz haberleşme hızım var 400Khzde de denedim sonuç aynı oluşturduğum kütüphane aşağıda.Sebebi ne olabilir ?

Header
#ifndef M24LC256_H	
#define M24LC256_H

#include "stm32f0xx_hal.h" 
#include "stm32f0xx_hal_i2c.h"

extern I2C_HandleTypeDef hi2c1;

#define eprom_i2c &hi2c1 
#define dummy 0x00

#define M24LC256_I2C_WR   0xA0
#define M24LC256_I2C_RD   0xA1

typedef enum{
OK = 0,
HATA
}Status_t;




extern void eprom_write_data(uint16_t adress,uint8_t data);

extern uint8_t eprom_read_data(uint16_t adress);


extern void eprom_write_multidata(uint16_t adress,uint8_t *data,uint8_t len);



#endif


Source
#include "24lc256.h"





void eprom_write_data(uint16_t adress,uint8_t data)
{
	
	uint8_t adres[3];
	
	adres[0]=adress>>8;
	adres[1]=adress & 0xff;
	adres[2]=data;

	
	
  HAL_I2C_Master_Transmit(eprom_i2c,M24LC256_I2C_WR,adres,3,50);	
  HAL_Delay(5);
}




 uint8_t eprom_read_data(uint16_t adress)
{
	uint8_t adres[2];
	
	adres[0]=adress>>8;
	adres[1]=adress & 0xff;
  uint8_t data;
  HAL_I2C_Master_Transmit(eprom_i2c,M24LC256_I2C_WR,adres,2,1000);		
	
  HAL_I2C_Master_Receive(eprom_i2c,M24LC256_I2C_RD,&data,1,1000);	
	
HAL_Delay(5);
	
return data;	
}



void eprom_write_multidata(uint16_t adress,uint8_t *data,uint8_t len)
{

	
HAL_I2C_Mem_Write(eprom_i2c,M24LC256_I2C_WR,adress,I2C_MEMADD_SIZE_16BIT,data,len,1000);

HAL_Delay(10);

}

sigmoid

Eeproma veri kaydettikten sonra yeni veriyi kaydetmek için bekliyor musun? Yanlış hatırlamıyorsam byte write ve oafe write veri kaydettikten sonra 5ms beklemek gerekiyor. Tam süre datasheette yazıyor. Beklemeden peş peşe yazmaya çalıştığında sonradan yazmaya çalıştığın bytelar havada çöp oluyor

görkem

Okumada 5ms,1 byte yazmada 5ms,seri yazmada 10ms bekleme yapıyorum.
İlk başta sabit verileri yazıyorum database oluşturuyorum epromun bir kısmına daha sonra yazdığım verileri okuyup işlem yapabiliyorum bozulma olmuyor fakat okuduktan sonra farklı bir alana 100ms bile beklesem yazma yaptığımda database kısmındaki veriler bozuluyor anlam veremedim

görkem

Eeprom konusunda atladığım bişey var mı ? bilen arkadaşlardan lütfen destek bekliyorum

görkem

#4
Yokmu hiç fikri olan ? kullandığım eeprom  24lc256  32x8 256kbit yani her page 32 byte dan mı oluşmuş oluyor  hangi noktalara dikkat etmeliyim

Okan AKÇA

#5
Sayfalara dikkat edeceksiniz sayfanın içerisinden tek yazma tüm sayfanin yazma ömründen yer. Tum sayfa verileri hazir olduktan sonra kaydetmek yazma ömrünü uzatacaktir.

görkem

bendeki problem çok garip tek seferde epromun 4000. adresinden başlayıp 9 byte veri yazıyorum yazmasına yazıyor fakat yaklaşık 7 kere 9 byte veri yazdıktan sonra eepromun 0. adresine dönüyor ve yazmaya devam ediyor. kullandığım eprom 32.766 byte dan oluşuyor olması lazım adres neden başa döner ? eeprom ya çakma yada benim yaptığım bir hata var bu konuda bir pratik bilgiye ihtiyacım var

Okan AKÇA

Pratik bilgi çalışan bir driver bulup onu kullanmak driver yok ise herhangi bir derleyicinin driver cevirebilirsiniz.