FM24V10 - Simulation Model: WriteBuffer of 128 Bytes

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JaKr_4815161
Level 1
Level 1
First reply posted First question asked Welcome!

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

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
Moderator
500 replies posted 250 solutions authored 250 replies posted

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
Level 1
Level 1
First reply posted First question asked Welcome!

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

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.

0 Likes