cancel
Showing results for 
Search instead for 
Did you mean: 

how to read a data array from EEPROM AT24C256B

Apill
Senior

I have configured my ADC to convert an analog value every 100 milli seconds using timer 2 , I could able to write data to EEPROM but while reading it back i could only see 20 variables in array.

As below mentioned in code, I could able to switch on my LED .

But my question is why I could not able to display/read all the 50 variables in my array in my watch windows of keil MDK?

However, i can only read till 20 variables (data_read[20])!

what could be the possible reasons?? I couldnt able to comprehend. is it because of the capabilities of Keil / ST link V2 debugging or because of the functions i am using to read EEPROM.

As per the below code and output i.e, I could set( switch on My led) I am with a hypothesis that, data is written into EEPROM , I am only facing problem of reading all the 50 variables in array because of debugging capabilities of software and hardware ? Am I correct or wrong? Could some one please validate?

code ( I have kept only the essential lines):

uint8_t data_read[50], data_write[50];

uint8_t adc_value[60],inc=0;

while (1)

 {

  /* USER CODE END WHILE */

if(inc==50)

{

for(int i=0;i<=51;i++)

{

data_write[i]=adc_value[i];

}

HAL_I2C_Mem_Write(&hi2c1,0xA0, 0x1AAA,I2C_MEMADD_SIZE_16BIT,data_write,50,HAL_MAX_DELAY);

while(HAL_I2C_IsDeviceReady(&hi2c1, 0xA0, 1, HAL_MAX_DELAY) != HAL_OK);

if((HAL_I2C_Mem_Read(&hi2c1,0xA1, 0x1AAA,I2C_MEMADD_SIZE_16BIT,data_read, 50, HAL_MAX_DELAY))== HAL_OK)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);

}

}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

{

 /* Prevent unused argument(s) compilation warning */

 UNUSED(hadc);

adc_value[inc]=HAL_ADC_GetValue(hadc);

inc++;

if(inc==70)

{

HAL_ADC_Stop_IT(hadc);

}

1 ACCEPTED SOLUTION

Accepted Solutions

I solved it, I tried to write and read starting from 0x1AAA memory location, after i have changed the memory location to 0x0000 i could able to read/display all the values in my watch windows. I guess i have tried to read from two different "Pages" so it couldnt able to display data from other pages!

View solution in original post

4 REPLIES 4

Don't copy 52 elements into a 50 element array.

Check content, and printf diagnostic data or dump.​

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
S.Ma
Principal

Watch window = debugger settings.

It's usually adjustable. If not, slice your buffer in 2 dimension array. Get creative in workarounds to go on rather than wait long for help, if time is of the essence.

I solved it, I tried to write and read starting from 0x1AAA memory location, after i have changed the memory location to 0x0000 i could able to read/display all the values in my watch windows. I guess i have tried to read from two different "Pages" so it couldnt able to display data from other pages!

Piranha
Chief II

And also You've been here for at least almost a year - learn to use Code Snippet button when posting code!