hi guys
i work on my stm32f4discovery based on stm32f407vgt6.
i have a problem with fsmc and synchronized psram mode.
i do some test and result is here:
first i config fsmc as Sync Nor flash accourding this below config:
- FSMC_NORSRAM_TimingTypeDef Timing;
- /** Perform the SRAM1 memory initialization sequence
- */
- hsram1.Instance = FSMC_NORSRAM_DEVICE;
- hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
- /* hsram1.Init */
- hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
- hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
- hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_NOR;
- hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
- hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_ENABLE;
- hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
- hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
- hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
- hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
- hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
- hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
- hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
- hsram1.Init.WriteBurst = FSMC_WRITE_BURST_ENABLE;
- hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE;
- /* Timing */
- Timing.AddressSetupTime = 40;
- Timing.AddressHoldTime = 15;
- Timing.DataSetupTime = 255;
- Timing.BusTurnAroundDuration = 15;
- Timing.CLKDivision = 16;
- Timing.DataLatency = 12;
- Timing.AccessMode = FSMC_ACCESS_MODE_A;
- /* ExtTiming */
- if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
and to write data on fsmc bus use this code :
- uint16_t w[] = {
- 0xffff, 0x0, 0xffff, 0,
- 0xffff, 0, 0xffff, 0xAAAA};
- for (uint8_t uwIndex = 0; uwIndex < 8; uwIndex++)
- *(uint16_t *) ((uint32_t)0x60000000 + uwIndex * 2)=w[uwIndex];
and i get this result :
as above image you can see not anythings on fsmc_clk pin,but i expect have fsmc clock on this pin!!!!
so i test new fsmc config as below :
- FSMC_NORSRAM_TimingTypeDef Timing;
- /** Perform the SRAM1 memory initialization sequence
- */
- hsram1.Instance = FSMC_NORSRAM_DEVICE;
- hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
- /* hsram1.Init */
- hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
- hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
- hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_PSRAM;
- hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
- hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_ENABLE;
- hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
- hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
- hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
- hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
- hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
- hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
- hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
- hsram1.Init.WriteBurst = FSMC_WRITE_BURST_ENABLE;
- hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE;
- /* Timing */
- Timing.AddressSetupTime = 40;
- Timing.AddressHoldTime = 15;
- Timing.DataSetupTime = 255;
- Timing.BusTurnAroundDuration = 15;
- Timing.CLKDivision = 16;
- Timing.DataLatency = 12;
- Timing.AccessMode = FSMC_ACCESS_MODE_A;
- /* ExtTiming */
- if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
and accourding new config you can see this resulte :
i have clock in fsmc_clk pin without any data on other pins and fsmc data bus!!!!
whats problem in my code!????
thx for your advice
|