2024-07-17 08:27 PM
Hello,
In my current project, we are using MCU - STM32H745Xi and integrated with SDRAM - IS42S32800J-7BLI.
As of now, we are accessing 3 location of SDRAM to write and read the data and below are the observations:
Please find the below attachments for your reference and provide your valuable guidance to resolve it.
Let me know if you need more information.
Regards,
Alpesh
2024-07-17 11:04 PM - edited 2024-07-18 10:40 PM
- Can you explain what the program that generated the log is actually doing?
- What does each line represent? What does the first field (0/1/2) supposed to indicate?
- In the case of bad values, what were the correct values that should have been there?
The definite pattern to the errors suggests a logical rather than electrical problem.
The fact the 2/3 board exhibits the problem suggests that you may have a marginal design.
Is it possible to transpose the good chip to one of the "bad" boards and rerun the tests? if the good chip also works on the bad board, it is probably a timing issue and the good chip's silicon simply came out better.
Can you dial down the frequency and retest? relax the timings and retest?
How does your PDN look? did you follow manufacturer recommendations on decoupling capacitors?
2024-07-18 08:24 PM
Hello,
We have down the frequency to 80MHz but the result is the same.
Yes, we have follow the decoupling capacitor as per the recommendation. We have also follow the Impedance, length match.
We will try by changing the SDRAM with new one and update you the result here.
Regards,
Alpesh
2024-07-18 10:40 PM
> - Can you explain what the program that generated the log is actually doing?
> - What does each line represent? What does the first field (0/1/2) supposed to indicate?
> - In the case of bad values, what were the correct values that should have been there?
2024-07-19 06:40 AM
Hello,
The field 0/1/2 represent the address of the memory on which we write the values. So here we use first three address to store the data and read back from the same three addresses.
First we write the value 0 X X
Second line it should be 0 1 X
Third line should be 0 1 2
Fourth line should be 3 1 2
Fifth line should be 3 4 2
Sixth line should be 3 4 5
7th line = 6 4 5
8th line = 6 7 5
9th line = 6 7 8
and so on...
So for example from line 4th to 5th , there should be write 4 instead of 1 and other values should be same as previous(3 and 2) but that previous values are changes to different number so please match this data with the previously share image.
Regards,
Alpesh
2024-07-19 09:20 AM - edited 2024-07-19 09:54 AM
Can you post the configuration you're using for the FMC?
Does this code produce a running counter with 1sec interval, or do you see corruption as well?
while(1){
*p=cnt++;
HAL_Delay(999);
printf("%d",*p);
}
In uncached mode, what happens if you access the memory as an array of uint32_t?
This test will may not do anything when cache is on, since the cache is large enough to hold 3 values without ever being forced to evict data and reread anything from SDRAM. Try the following test instead. In cached mode, write pseudo-random data to entire chip and only then read back and compare every value you wrote. Do you get errors? (you can use an LFSR and reset its state after filling chip, so you can regenerate values for compare)?
2024-07-25 02:54 AM
2024-07-25 03:25 AM - edited 2024-07-25 11:55 PM
The datasheet says that, for a -7 device, tXSR (for example) needs to be at least 70 ns.
In the timings you posted you have set
SdramTiming.ExitSelfRefreshDelay = (8-1);
But 8 clock cycles at 120Mhz (your stated clock freq) is only 66.67ns.
You have similar errors in other timing values as well, so it's no wonder you're seeing data corruption.
2024-08-02 11:36 PM
Hello,
Please find the clock tree and the calculated timing diagram.
I will check the clock from 8 cycles to 9 cycles for 75nS self refresh time.
Is there anything need to change to resolve the issue?
Regards,
Alpesh
2024-08-03 12:45 AM
> Is there anything need to change to resolve the issue?
It's not my job to fix your board, someone is paying you to do it.
As I already said, review ALL your memory timing for errors.