cancel
Showing results for 
Search instead for 
Did you mean: 

reading the NOR flash ID and NOR SDFP of the stm32l562e_dk

FRAMU.1
Associate II

I took the stm32Cube example : Projects\STM32L562E-DK\Examples\OCTOSPI\OSPI_NOR_ReadWrite_DMA and modified it to send a RDID (9Fh) instruction to the NOR. I get a "0xAC 0x28 0x53" but I ignore which codes that NOR flash is supposed to answer. It could be valid, though.

Then, I send a RDSDFP instruction (5Ah) and then I receive a sequence of "0x00" which is wrong because the NOR flash is supposed to send 0x50444653.

Could someone share the code functions using a simple OSPI_RegularCmdTypeDef to read the NOR-flash ID and the NOR-flash SDFP So that I can verify on my disco kit that the NOR-flash is alive.

Thanks

1 ACCEPTED SOLUTION

Accepted Solutions

Ok for that RDID , restoring the bitorder give a coherent " C2 85 3A "

I still cannot get the a correct SDFP (but now always a sequence of 0xFF)

View solution in original post

5 REPLIES 5
FRAMU.1
Associate II

for info:

static void OSPI_Read_NOR_ID(OSPI_HandleTypeDef *hospi)
{
  OSPI_RegularCmdTypeDef  sCommand;
 
  sCommand.OperationType      = HAL_OSPI_OPTYPE_COMMON_CFG;
  sCommand.FlashId            = HAL_OSPI_FLASH_ID_1;
  sCommand.Instruction        = 0x9F;
  sCommand.InstructionMode    = HAL_OSPI_INSTRUCTION_1_LINE;
  sCommand.InstructionSize    = HAL_OSPI_INSTRUCTION_8_BITS;
  sCommand.AddressMode        = HAL_OSPI_ADDRESS_NONE;
  sCommand.DataMode           = HAL_OSPI_DATA_1_LINE;
  sCommand.DummyCycles        = 8;
  sCommand.DQSMode            = HAL_OSPI_DQS_DISABLE;
  sCommand.SIOOMode           = HAL_OSPI_SIOO_INST_EVERY_CMD;
  
   sCommand.NbData = 3;
 
  if (HAL_OSPI_Command(hospi, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    Error_Handler();
  }
  
  if (HAL_OSPI_Receive(hospi, aRxBuffer, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    Error_Handler();
  }
  
}
 
 
static void OSPI_Read_SFDP(OSPI_HandleTypeDef *hospi)
{
  OSPI_RegularCmdTypeDef  sCommand;
 
  sCommand.OperationType      = HAL_OSPI_OPTYPE_COMMON_CFG;
  sCommand.FlashId            = HAL_OSPI_FLASH_ID_1;
  sCommand.Instruction        = 0x5A;
  sCommand.InstructionMode    = HAL_OSPI_INSTRUCTION_1_LINE;
  sCommand.InstructionSize    = HAL_OSPI_INSTRUCTION_8_BITS;
  sCommand.DataMode           = HAL_OSPI_DATA_1_LINE;
  sCommand.DummyCycles        = 8;
  sCommand.SIOOMode           = HAL_OSPI_SIOO_INST_EVERY_CMD;
  sCommand.AddressMode        = HAL_OSPI_ADDRESS_1_LINE;
  sCommand.AddressSize        = HAL_OSPI_ADDRESS_24_BITS;
  sCommand.Address           =  0;
 
  sCommand.NbData = 0x18;
 
  if (HAL_OSPI_Command(hospi, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    Error_Handler();
  }
 
  if (HAL_OSPI_Receive(hospi, aRxBuffer, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    Error_Handler();
  }
}

What could be wrong ?

Mike_ST
ST Employee

>> I get a "0xAC 0x28 0x53" but I ignore which codes that NOR flash is supposed to answer

For the ReadID the digits you're getting are shifted... Check table 15 in the documentation.

Ok for that RDID , restoring the bitorder give a coherent " C2 85 3A "

I still cannot get the a correct SDFP (but now always a sequence of 0xFF)

FRAMU.1
Associate II

Sending The SFDP command (0x5A) in a regular command:

sCommand.InstructionMode    = HAL_OSPI_INSTRUCTION_1_LINE;
  sCommand.InstructionSize    = HAL_OSPI_INSTRUCTION_8_BITS;
  sCommand.DataMode           = HAL_OSPI_DATA_1_LINE;
  sCommand.DummyCycles        = 8;
  sCommand.SIOOMode           = HAL_OSPI_SIOO_INST_EVERY_CMD;
  sCommand.AddressMode        = HAL_OSPI_ADDRESS_1_LINE;
  sCommand.AddressSize        = HAL_OSPI_ADDRESS_24_BITS;

and the 0x50444653 is expected from the NOR flash.