mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-27 09:40:07 +01:00
[ion] ExternalFlash: record the operating mode to avoid sending Single
SPI command when in Quad SPI mode and vice versa
This commit is contained in:
@@ -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<uint8_t *>(FlashAddressSpaceSize), reinterpret_cast<uint8_t *>(&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
|
||||
|
||||
Reference in New Issue
Block a user