cancel
Showing results for 
Search instead for 
Did you mean: 

Non Volatile RAM (F-RAM & NVSRAM)

JaKr_4815161
New Contributor

Hello,

I am using the Verilog Simulation Model of the FM24V10 (FM24V10 - VERILOG.zip (cypress.com))  and encountered the following problem: TheSimulation model seems to have a write buffer of 128 bytes, see line 80 of file FRAM_I2C.v:

reg [07:00] WrDataByte [0:127]; // memory write data buffer

Hence, sending datagrams of length > 128 Bytes result in data loss. However, I can not find any information regarding a size limitation of writes in the datasheet (FM24V10, 1-Mbit (128K × 😎 Serial (I2C) F-RAM (cypress.com)).

 

Can anyone confirm that there is mismatch between datasheet and model? Does the device have a writebuffer of size 128 byte?

 

Thank you. Best regards

Jan

 

 

0 Likes
1 Solution
PradiptaB_11
Moderator
Moderator

Hi Jan,

 

I did test the model at my end and confirm to you that there will be data loss when data set is greater than 128 bytes. I think it is a limitation of the model the way it was written. The device will not have any such limitation. We have pointed this out the engineer and we thank you for pointing this out to us !!

 

Thanks,

Pradipta.

View solution in original post

0 Likes
3 Replies
PradiptaB_11
Moderator
Moderator

Hi Jan,

You should not observe any data loss if you are giving datagrams of length greater that 128 Bytes. You can check and verify this with the model. The logic used in the model looks correct to me. The device does not have a write buffer of size 128 byte. Let us know if you observe any different results.

 

Thanks,

Pradipta.

0 Likes
JaKr_4815161
New Contributor

Hello @PradiptaB_11 ,

Thank you for the reply.

I do observe data loss in simulation. I have attached two screenshots with annotations showing the problem. 

In the example, I write datagrams greater than 1024 bytes. Startaddress is 0x9.

 FRAM_0.jpg

FRAM_1.jpg

The observed behaviour is explained by the verilog code:

Writebuffer of size  128, although there should not be a buffer according to the datasheet and your statement above.

reg [07:00] WrDataByte [0:127]; // memory write data buffer

The WriteBuffer is copied to the Memory when  WriteActive has an falling edge; WriteActive changes when a STOP is received.

always @(negedge WriteActive) begin
if((fram_busy == 0) && (`powerup_access == 1)) begin
for (LoopIndex = 0; LoopIndex < WrCounter; LoopIndex = LoopIndex + 1) begin
if(memProt == 1'b0 || (((StartAddress[`addrBits-1:00] + LoopIndex[06:00]) < addrBeg) || ((StartAddress[`addrBits-1:00] + LoopIndex[06:00]) > addrEnd)))
begin
MemoryBlock[StartAddress[`addrBits-1:00] + LoopIndex[06:00]] = WrDataByte[LoopIndex[06:00]];
//...

 

Can you confirm this.

Best regards,

Jan

0 Likes
PradiptaB_11
Moderator
Moderator

Hi Jan,

 

I did test the model at my end and confirm to you that there will be data loss when data set is greater than 128 bytes. I think it is a limitation of the model the way it was written. The device will not have any such limitation. We have pointed this out the engineer and we thank you for pointing this out to us !!

 

Thanks,

Pradipta.

View solution in original post

0 Likes