cancel
Showing results for 
Search instead for 
Did you mean: 

SDRAM For STM32L496ZG

Ajeth.11
Associate III

Can Anyone Suggest me the External SDRAM Supported Part For STM32L496ZG ?

8 REPLIES 8

As far as I'm aware this L4 (and others) only support Static Memories, not Dynamic Ones. I'd expect it could support PSRAM (Pseudo-SRAM)

Perhaps something like

https://www.mouser.com/ProductDetail/Alliance-Memory/AS1C4M16PL-70BIN/?qs=byeeYqUIh0OpeMturP0hzg%3D%3D

You shouldn't need to load an entire file into memory for the purpose of transiting the data to an external frame buffer on a different device.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Ajeth.11
Associate III

Thank you for your response

I want the SDRAM For Drive the 1872*1404 Resolution Display(In a display i want to display different 10 to 12 image one by one), if you have any suggestion that is very helpful for me.

Like a picture frame device?

The screen is not directly driven by the L4, but is separate, and has its own controller and frame buffer.

You need to decompose the file/image into sections/lines, and transfer them. It shouldn't be necessary to hold the entire file/frame on the STM32 side in this context. What you've previously been describing is a SW problem, not a HW one.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Ajeth.11
Associate III

Yes We have Display Controller.

Yes that is the SW Problem that is why i want to use the SDRAM for store the image C Array .

Solve a SW problem with SW, not HW, using programmers who can code with limited/finite resources. If you just need to transit image data from an SD Card to a Frame Buffer on an external display, you don't have to hold the whole image concurrently on the intermediate transport device.

You might want the display device to hold two frames concurrently so the screen painting is not apparent. The controller looks to have 8MB (64Mbit) for this explicit purpose.

This "read the whole file into memory" is a very PC centric programming paradigm where there is an excess of resources, for embedded you need to change the mindset to do more with less. Think in two dimensions, not one, and code an algorithm that can pipeline the data to the display.

https://www.waveshare.com/10.3inch-e-paper-d.htm

https://www.waveshare.net/w/upload/1/18/IT8951_D_V0.2.4.3_20170728.pdf

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Ajeth.11
Associate III

okay Thank you for your suggestion

If you used QuadSPI NOR Flash you could store images in a linear memory address space directly accessible by the processor.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Ajeth.11
Associate III

Okay Thanks

My Code is look like this for read the image data from sd card , i have stored the image hex file into SD Card and STM32 Variable is BYTE then the image hex file read in STM32 BYTE format.

i am dividing the 1872*1402 resolution image into three to Four File but when i call the f_read API then it is taking 4 to 5 sec for read the 180000 character, anything suggest you how can i reduce the read time from sd card then it is very faster.

     fres = f_mount(&FatFs, "0:", 1); //1=mount now

   if (fres != FR_OK)

   {

      printf("f_mount error ");

      while(1);

   }

   fres = f_open(&fil, "image.hex",FA_READ); 

   if(fres == FR_OK)

{

printf("I was able to open file\r\n");

} else

{

printf("f_open error (%i)\r\n", fres);

}

  

int filelenght = f_size(&fil);

BYTE readBuf[180000];

f_read(&fil,readBuf,180000,180000);

IT8951_LoadImage2bpp(0,0,readBuf,320,300); // width and height is different not 320 and 300

f_close (&fil);

fres = f_open(&fil, "image1.hex",FA_READ);

readBuf[180000];

f_read(&fil,readBuf,180000,180000);

if(fres == FR_OK)

{

printf("I was able to open file\r\n");

} else

{

printf("f_open error (%i)\r\n", fres);

}

f_read(&fil,readBuf,180000,180000);

IT8951_LoadImage2bpp(0,0,readBuf,320,300); // width and height is different not 320 and 300

IT8951_FullUpdate();