AnsweredAssumed Answered

STM32F2, FSMC, SSD1963 Performance

Question asked by Mike on Jun 12, 2012
Latest reply on Sep 2, 2014 by Mike
I've recently created a prototype with a STM32F2 and a Solomon Systech SSD1963 interfaced via the FSMC (Resolution: 800 x 480).  I've succeeded in getting things displayed on the screen, but I'm a little disappointed in performance.  (Please note that I'm only referring to the amount of time it takes to write data to the SSD1963's frame buffer from the STM32F2, not the refresh rate of the LCD).  I've only been able to get about 3 FPS and I was hoping for something in the teens. 

Are my expectations too high?  Please share your experience and offer your advice.

Here's my FSMC init code.

//--- FSMC Configuration -----------------------------------------------------
  //FSMC Initialization
  FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
 
  // Enable the FSMC Clock
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
   
  FSMC_NORSRAMDeInit(FSMC_Bank1_NORSRAM1);
 
  FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime      = 0;     // 1ns
  FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime       = 1;     // 2ns
  FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime         = 1;     // 4ns
  FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode            = FSMC_AccessMode_B; //?? don't know yet
 
  FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;     // Only used with NOR Flash
  FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision           = 1;     // Not used for Nor or SRAM
  FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency           = 0;     // Don't care with Nor or SRAM

  FSMC_NORSRAMInitStructure.FSMC_Bank                  = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType            = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth       = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct     = &FSMC_NORSRAMTimingInitStructure;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation        = FSMC_WriteOperation_Enable;
 
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity    = FSMC_WaitSignalPolarity_Low;           // Only valid for flash memory in burst mode (just default)
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive      = FSMC_WaitSignalActive_BeforeWaitState; // Only valid for burst memories (just default)
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal            = FSMC_WaitSignal_Disable;               // Only valid for flash memory in burst mode (just default)
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode          = FSMC_ExtendedMode_Disable;             // Don't know yet
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst            = FSMC_WriteBurst_Disable;               // Don't know yet
  FSMC_NORSRAMInitStructure.FSMC_WrapMode              = FSMC_WrapMode_Disable;                 // Don't know yet
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux        = FSMC_DataAddressMux_Disable;           // Don't know yet
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode       = FSMC_BurstAccessMode_Disable;          // Don't know yet
 
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
 
  // Enable FSMC Bank1_SRAM Bank
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); 

Thanks

Outcomes