From 26ea5718b5943ea46391890c010e13c7582b8cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 10 Apr 2019 16:04:32 +0200 Subject: [PATCH] [ion] ExternalFlash: record the operating mode to avoid sending Single SPI command when in Quad SPI mode and vice versa --- ion/src/device/shared/drivers/external_flash.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ion/src/device/shared/drivers/external_flash.cpp b/ion/src/device/shared/drivers/external_flash.cpp index bcb705c37..dd3cbdcdb 100644 --- a/ion/src/device/shared/drivers/external_flash.cpp +++ b/ion/src/device/shared/drivers/external_flash.cpp @@ -281,10 +281,12 @@ static void initQSPI() { QUADSPI.CR()->set(cr); } +static QUADSPI::CCR::OperatingMode sOperatingMode = QUADSPI::CCR::OperatingMode::Single; + static void initChip() { /* The chip initially expects commands in SPI mode. We need to use SPI to tell * it to switch to QPI. */ - if (DefaultOperatingMode == QUADSPI::CCR::OperatingMode::Quad) { + if (sOperatingMode == QUADSPI::CCR::OperatingMode::Single && DefaultOperatingMode == QUADSPI::CCR::OperatingMode::Quad) { send_command(Command::WriteEnable, QUADSPI::CCR::OperatingMode::Single); ExternalFlashStatusRegister::StatusRegister2 statusRegister2(0); statusRegister2.setQE(true); @@ -305,6 +307,7 @@ static void initChip() { readParameters.setP5(true); send_write_command(Command::SetReadParameters, reinterpret_cast(FlashAddressSpaceSize), reinterpret_cast(&readParameters), sizeof(readParameters)); } + sOperatingMode = QUADSPI::CCR::OperatingMode::Quad; } set_as_memory_mapped(); } @@ -331,6 +334,7 @@ static void shutdownChip() { // Reset send_command(Command::EnableReset); send_command(Command::Reset); + sOperatingMode = QUADSPI::CCR::OperatingMode::Single; Ion::Timing::usleep(30); // Sleep deep