mirror of
https://github.com/GeekJoystick/game-and-watch-game-engine.git
synced 2025-12-17 01:16:10 +01:00
121 lines
4.8 KiB
C
121 lines
4.8 KiB
C
#include "flash.h"
|
|
|
|
|
|
void flash_memory_map(OSPI_HandleTypeDef *spi) {
|
|
OSPI_RegularCmdTypeDef cmd = {
|
|
.Instruction = 0xeb,
|
|
.InstructionMode = HAL_OSPI_INSTRUCTION_1_LINE,
|
|
// .SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD,
|
|
.AlternateBytesMode = HAL_OSPI_ALTERNATE_BYTES_4_LINES,
|
|
.AddressMode = HAL_OSPI_ADDRESS_4_LINES,
|
|
.OperationType = HAL_OSPI_OPTYPE_COMMON_CFG,
|
|
.FlashId = 0,
|
|
.InstructionDtrMode = HAL_OSPI_INSTRUCTION_DTR_DISABLE,
|
|
.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS,
|
|
.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_DISABLE,
|
|
.DataMode = HAL_OSPI_DATA_NONE,
|
|
.DataDtrMode = HAL_OSPI_DATA_DTR_DISABLE,
|
|
.DQSMode = HAL_OSPI_DQS_DISABLE,
|
|
.AddressSize = HAL_OSPI_ADDRESS_24_BITS,
|
|
.SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD, // HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD
|
|
// .SIOOMode = HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD,
|
|
.DummyCycles = 4,
|
|
// .AlternateBytesSize = 1, //HAL_OSPI_ALTERNATE_BYTES_8_BITS, // ??? firmware uses '1' ??
|
|
.AlternateBytesSize = HAL_OSPI_ALTERNATE_BYTES_8_BITS, // ??? firmware uses '1' ??
|
|
.NbData = 1, // Data length
|
|
.AlternateBytes = 0b000100, //0xa5, // Hmmmm
|
|
};
|
|
|
|
HAL_Delay(1);
|
|
|
|
if(HAL_OSPI_Command(spi, &cmd, 1000) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
HAL_Delay(50);
|
|
|
|
|
|
OSPI_MemoryMappedTypeDef sMemMappedCfg;
|
|
|
|
OSPI_RegularCmdTypeDef sCommand = {
|
|
.Instruction = 0xeb, // 4READ
|
|
.InstructionMode = HAL_OSPI_INSTRUCTION_1_LINE,
|
|
.SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD,
|
|
.AlternateBytesMode = HAL_OSPI_ALTERNATE_BYTES_NONE,
|
|
.AddressMode = HAL_OSPI_ADDRESS_4_LINES,
|
|
.OperationType = HAL_OSPI_OPTYPE_READ_CFG,
|
|
.FlashId = 0,
|
|
.InstructionDtrMode = HAL_OSPI_INSTRUCTION_DTR_DISABLE,
|
|
.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS,
|
|
.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_DISABLE,
|
|
.DataMode = HAL_OSPI_DATA_4_LINES,
|
|
.DataDtrMode = HAL_OSPI_DATA_DTR_DISABLE,
|
|
.DQSMode = HAL_OSPI_DQS_DISABLE,
|
|
.AddressSize = HAL_OSPI_ADDRESS_24_BITS,
|
|
.SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD, // HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD
|
|
// .SIOOMode = HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD,
|
|
.DummyCycles = 4,
|
|
// .AlternateBytesSize = 1, //HAL_OSPI_ALTERNATE_BYTES_8_BITS, // ??? firmware uses '1' ??
|
|
.AlternateBytesSize = HAL_OSPI_ALTERNATE_BYTES_8_BITS, // ??? firmware uses '1' ??
|
|
.NbData = 1, // Data length
|
|
.AlternateBytes = 0x00,
|
|
};
|
|
|
|
// sCommand.FlashId = HAL_OSPI_FLASH_ID_1;
|
|
// sCommand.InstructionMode = HAL_OSPI_INSTRUCTION_8_LINES;
|
|
// sCommand.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS;
|
|
// sCommand.InstructionDtrMode = HAL_OSPI_INSTRUCTION_DTR_DISABLE;
|
|
// sCommand.AddressMode = HAL_OSPI_ADDRESS_8_LINES;
|
|
// sCommand.AddressSize = HAL_OSPI_ADDRESS_32_BITS;
|
|
// sCommand.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_ENABLE;
|
|
// sCommand.AlternateBytesMode = HAL_OSPI_ALTERNATE_BYTES_NONE;
|
|
// sCommand.DataMode = HAL_OSPI_DATA_8_LINES;
|
|
// sCommand.DataDtrMode = HAL_OSPI_DATA_DTR_ENABLE;
|
|
// sCommand.DQSMode = HAL_OSPI_DQS_ENABLE;
|
|
// sCommand.SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD;
|
|
// sCommand.Address = 0;
|
|
// sCommand.NbData = 1;
|
|
/* Memory-mapped mode configuration for Linear burst write operations */
|
|
// sCommand.OperationType = HAL_OSPI_OPTYPE_WRITE_CFG;
|
|
// sCommand.Instruction = 0x66; /* 4PP / 4 x page program */ // LINEAR_BURST_WRITE;
|
|
// sCommand.DummyCycles = 0; //DUMMY_CLOCK_CYCLES_SRAM_WRITE;
|
|
// if (HAL_OSPI_Command(&hospi1, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) !=
|
|
// HAL_OK) {
|
|
// Error_Handler();
|
|
// }
|
|
// HAL_Delay(100);
|
|
|
|
// sCommand.OperationType = HAL_OSPI_OPTYPE_WRITE_CFG;
|
|
// sCommand.Instruction = 0x99; /* 4PP / 4 x page program */ // LINEAR_BURST_WRITE;
|
|
// sCommand.DummyCycles = 0; //DUMMY_CLOCK_CYCLES_SRAM_WRITE;
|
|
// if (HAL_OSPI_Command(&hospi1, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) !=
|
|
// HAL_OK) {
|
|
// Error_Handler();
|
|
// }
|
|
// HAL_Delay(100);
|
|
|
|
|
|
|
|
sCommand.OperationType = HAL_OSPI_OPTYPE_WRITE_CFG;
|
|
sCommand.Instruction = 0x38; /* 4PP / 4 x page program */ // LINEAR_BURST_WRITE;
|
|
sCommand.DummyCycles = 0; //DUMMY_CLOCK_CYCLES_SRAM_WRITE;
|
|
if (HAL_OSPI_Command(spi, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) !=
|
|
HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
/* Memory-mapped mode configuration for Linear burst read operations */
|
|
sCommand.OperationType = HAL_OSPI_OPTYPE_READ_CFG;
|
|
sCommand.Instruction = 0xEB; /* 4READ */ //LINEAR_BURST_READ;
|
|
sCommand.DummyCycles = 6; //DUMMY_CLOCK_CYCLES_SRAM_READ;
|
|
|
|
if (HAL_OSPI_Command(spi, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) !=
|
|
HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
/*Disable timeout counter for memory mapped mode*/
|
|
sMemMappedCfg.TimeOutActivation = HAL_OSPI_TIMEOUT_COUNTER_DISABLE;
|
|
sMemMappedCfg.TimeOutPeriod = 0;
|
|
/*Enable memory mapped mode*/
|
|
if (HAL_OSPI_MemoryMapped(spi, &sMemMappedCfg) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
} |