Выбор режима QSPI или QPI
This commit is contained in:
parent
c3ac6fe729
commit
e1f09ff8b6
@ -16,6 +16,7 @@
|
|||||||
"jalr ra" \
|
"jalr ra" \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#define CHIP_MODE 1 /* Режим работы МФП (SPIFI Memory Mode): 0 = QSPI или 1 = QPI */
|
||||||
|
|
||||||
#define ACK 0x0F /* Подтверждение */
|
#define ACK 0x0F /* Подтверждение */
|
||||||
#define NACK 0xF0 /* Нет подтверждения */
|
#define NACK 0xF0 /* Нет подтверждения */
|
||||||
@ -316,23 +317,37 @@ void Bootloader_Commands()
|
|||||||
void SystemClock_Config();
|
void SystemClock_Config();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
HAL_SPIFI_MspInit(&spifi);
|
HAL_SPIFI_MspInit(&spifi);
|
||||||
HAL_SPIFI_Reset(&spifi);
|
HAL_SPIFI_Reset(&spifi);
|
||||||
|
|
||||||
/* Переключение флеш-памяти в нормальный режим с командами, передав ей "0" в первом промежуточном байте */
|
/* Переключение флеш-памяти в нормальный режим с командами, передав ей "0" в промежуточном байте */
|
||||||
const uint32_t cmd_chip_read_xip_init =
|
const uint32_t cmd_chip_read_xip_init =
|
||||||
SPIFI_DIRECTION_INPUT |
|
SPIFI_DIRECTION_INPUT |
|
||||||
|
#if CHIP_MODE == 1
|
||||||
|
SPIFI_CONFIG_CMD_INTLEN(1) |
|
||||||
|
#else
|
||||||
SPIFI_CONFIG_CMD_INTLEN(3) |
|
SPIFI_CONFIG_CMD_INTLEN(3) |
|
||||||
|
#endif
|
||||||
SPIFI_CONFIG_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_PARALLEL) |
|
SPIFI_CONFIG_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_PARALLEL) |
|
||||||
SPIFI_CONFIG_CMD_FRAMEFORM(SPIFI_FRAMEFORM_3ADDR) |
|
SPIFI_CONFIG_CMD_FRAMEFORM(SPIFI_FRAMEFORM_3ADDR) |
|
||||||
SPIFI_CONFIG_CMD_OPCODE(0xEB);
|
SPIFI_CONFIG_CMD_OPCODE(0xEB);
|
||||||
uint8_t tmp_byte_xip_init[1] = {0};
|
uint8_t tmp_byte_xip_init[1] = {0};
|
||||||
HAL_SPIFI_SendCommand_LL(&spifi, cmd_chip_read_xip_init, 0, 1, tmp_byte_xip_init, 0, 0, HAL_SPIFI_TIMEOUT);
|
HAL_SPIFI_SendCommand_LL(&spifi, cmd_chip_read_xip_init, 0, 1, tmp_byte_xip_init, 0, 0, HAL_SPIFI_TIMEOUT);
|
||||||
|
|
||||||
|
#if CHIP_MODE == 1
|
||||||
|
/* Переключение флеш-памяти из режима QPI в обычный режим SPI */
|
||||||
|
const uint32_t cmd_qpi_disable =
|
||||||
|
SPIFI_DIRECTION_INPUT |
|
||||||
|
SPIFI_CONFIG_CMD_INTLEN(0) |
|
||||||
|
SPIFI_CONFIG_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_PARALLEL) |
|
||||||
|
SPIFI_CONFIG_CMD_FRAMEFORM(SPIFI_FRAMEFORM_OPCODE) |
|
||||||
|
SPIFI_CONFIG_CMD_OPCODE(0xFF);
|
||||||
|
HAL_SPIFI_SendCommand_LL(&spifi, cmd_qpi_disable, 0, 0, 0, 0, 0, HAL_SPIFI_TIMEOUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
Bootloader_UART_Init(); // Инициализация UART. НАстройка выводов и тактирования
|
Bootloader_UART_Init(); // Инициализация UART. НАстройка выводов и тактирования
|
||||||
|
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
@ -390,6 +405,26 @@ void SPIFI_Init()
|
|||||||
HAL_SPIFI_W25_WriteSREG(&spifi, sreg1, sreg2 | (1 << 1)); // ? HAL_SPIFI_W25_QuadEnable(&spifi);
|
HAL_SPIFI_W25_WriteSREG(&spifi, sreg1, sreg2 | (1 << 1)); // ? HAL_SPIFI_W25_QuadEnable(&spifi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CHIP_MODE == 1
|
||||||
|
/* Переключение флеш-памяти в режим QPI, когда весь обмен четырёхпроводной */
|
||||||
|
const uint32_t cmd_qpi_enable =
|
||||||
|
SPIFI_DIRECTION_INPUT |
|
||||||
|
SPIFI_CONFIG_CMD_INTLEN(0) |
|
||||||
|
SPIFI_CONFIG_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_SERIAL) |
|
||||||
|
SPIFI_CONFIG_CMD_FRAMEFORM(SPIFI_FRAMEFORM_OPCODE) |
|
||||||
|
SPIFI_CONFIG_CMD_OPCODE(0x38);
|
||||||
|
HAL_SPIFI_SendCommand_LL(&spifi, cmd_qpi_enable, 0, 0, 0, 0, 0, HAL_SPIFI_TIMEOUT);
|
||||||
|
|
||||||
|
/* Переключение флеш-памяти в режим без последующих команд чтения, передав ей "0x20" в промежуточном байте */
|
||||||
|
const uint32_t cmd_chip_read_qpi_xip_init =
|
||||||
|
SPIFI_DIRECTION_INPUT |
|
||||||
|
SPIFI_CONFIG_CMD_INTLEN(1) |
|
||||||
|
SPIFI_CONFIG_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_PARALLEL) |
|
||||||
|
SPIFI_CONFIG_CMD_FRAMEFORM(SPIFI_FRAMEFORM_OPCODE_3ADDR) |
|
||||||
|
SPIFI_CONFIG_CMD_OPCODE(0xEB);
|
||||||
|
uint8_t tmp_byte_xip_init[1] = {0};
|
||||||
|
HAL_SPIFI_SendCommand_LL(&spifi, cmd_chip_read_qpi_xip_init, 0, 1, tmp_byte_xip_init, 0, 0x20, HAL_SPIFI_TIMEOUT);
|
||||||
|
#else
|
||||||
/* Переключение флеш-памяти в режим без последующих команд чтения, передав ей "0x20" в первом промежуточном байте */
|
/* Переключение флеш-памяти в режим без последующих команд чтения, передав ей "0x20" в первом промежуточном байте */
|
||||||
const uint32_t cmd_chip_read_xip_init =
|
const uint32_t cmd_chip_read_xip_init =
|
||||||
SPIFI_DIRECTION_INPUT |
|
SPIFI_DIRECTION_INPUT |
|
||||||
@ -399,15 +434,18 @@ void SPIFI_Init()
|
|||||||
SPIFI_CONFIG_CMD_OPCODE(0xEB);
|
SPIFI_CONFIG_CMD_OPCODE(0xEB);
|
||||||
uint8_t tmp_byte_xip_init[1] = {0};
|
uint8_t tmp_byte_xip_init[1] = {0};
|
||||||
HAL_SPIFI_SendCommand_LL(&spifi, cmd_chip_read_xip_init, 0, 1, tmp_byte_xip_init, 0, 0x20, HAL_SPIFI_TIMEOUT);
|
HAL_SPIFI_SendCommand_LL(&spifi, cmd_chip_read_xip_init, 0, 1, tmp_byte_xip_init, 0, 0x20, HAL_SPIFI_TIMEOUT);
|
||||||
|
#endif
|
||||||
/* Режим SPIFI без передачи команд, но с "0x20" в первых промежуточных байтах.
|
/* Режим SPIFI без передачи команд, но с "0x20" в первых промежуточных байтах. */
|
||||||
Количество промежуточных данных в команде 4READ = 0xEB равно 3 байта (в cmd_mem). */
|
|
||||||
SPIFI_MemoryCommandTypeDef cmd_mem = {
|
SPIFI_MemoryCommandTypeDef cmd_mem = {
|
||||||
.OpCode = 0xEB,
|
.OpCode = 0xEB,
|
||||||
.FieldForm = SPIFI_CONFIG_CMD_FIELDFORM_ALL_PARALLEL,
|
.FieldForm = SPIFI_CONFIG_CMD_FIELDFORM_ALL_PARALLEL,
|
||||||
.FrameForm = SPIFI_CONFIG_CMD_FRAMEFORM_NOOPCODE_3ADDR,
|
.FrameForm = SPIFI_CONFIG_CMD_FRAMEFORM_NOOPCODE_3ADDR,
|
||||||
.InterimData = 0x20,
|
.InterimData = 0x20,
|
||||||
.InterimLength = 3
|
#if CHIP_MODE == 1
|
||||||
|
.InterimLength = 1 /* Количество промежуточных данных в команде 0xEB режима QPI равно 1 байт. */
|
||||||
|
#else
|
||||||
|
.InterimLength = 3 /* Количество промежуточных данных в команде 0xEB режима QSPI равно 3 байта. */
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
SPIFI_MemoryModeConfig_HandleTypeDef spifi_mem = {
|
SPIFI_MemoryModeConfig_HandleTypeDef spifi_mem = {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user