0

I try to write 1 byte and then read 1 byte from SDRAM IS42S81600F. It's connected to FMC pins of Nucleo-F767 board. In debug mode program goes to hard fault handler after reading. I'm using FMC configuration from CubeMX and initialization code found in some tutorial. Is it a problem in writing and reading code or in initialization? HCLK is set to 96 MHz.

This is how i try to write and read:

  *(__IO uint8_t*) (SDRAM_ADDRESS_START) = (uint8_t) 0x55; //SDRAM_ADDRESS_START is 0xC0000000
  byte = *(__IO uint16_t*) (SDRAM_ADDRESS_START);

Initialization:

__IO uint32_t tmpmrd =0;
      command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
      command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
      command.AutoRefreshNumber = 1;
      command.ModeRegisterDefinition = 0;
      hal_stat = HAL_SDRAM_SendCommand(&hsdram1, &command, SDRAM_TIMEOUT);
      HAL_Delay(1);
      command.CommandMode = FMC_SDRAM_CMD_PALL;
      command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
      command.AutoRefreshNumber = 1;
      command.ModeRegisterDefinition = 0;
      hal_stat = HAL_SDRAM_SendCommand(&hsdram1, &command, SDRAM_TIMEOUT);
      HAL_Delay(1);
      command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
      command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
      command.AutoRefreshNumber = 8;
      command.ModeRegisterDefinition = 0;
      hal_stat = HAL_SDRAM_SendCommand(&hsdram1, &command, SDRAM_TIMEOUT);
      HAL_Delay(1);
      tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |

                           SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |

                           SDRAM_MODEREG_CAS_LATENCY_2           |

                           SDRAM_MODEREG_OPERATING_MODE_STANDARD |

                           SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

        command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
        command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
        command.AutoRefreshNumber = 1;
        command.ModeRegisterDefinition = tmpmrd;
        hal_stat = HAL_SDRAM_SendCommand(&hsdram1, &command, SDRAM_TIMEOUT);
        /* Step 8: Set the refresh rate counter */
       /* (15.62 us x Freq) — 20 */
       /* Set the device refresh counter */
        HAL_SDRAM_ProgramRefreshRate(&hsdram1, 1480);

I've tried to change timings and clock settings in CubeMX configurator, but with no luck.

bibo
  • 3
  • 2

0 Answers0