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);
}
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
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
Eeprom konusunda atladığım bişey var mı ? bilen arkadaşlardan lütfen destek bekliyorum
Yokmu hiç fikri olan ? kullandığım eeprom 24lc256 32x8 256kbit yani her page 32 byte dan mı oluşmuş oluyor hangi noktalara dikkat etmeliyim
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.
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
Pratik bilgi çalışan bir driver bulup onu kullanmak driver yok ise herhangi bir derleyicinin driver cevirebilirsiniz.