- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Solved! Go to Solution.
- Labels:
-
Memory Non Volatile RAM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.