私はRT685プラットフォームを使用しており、FlexSPIを介してPSRAMを接続しています。PSRAM(ISSI IS66WVR8M8FALL)はPortA2に接続されており、QSPIフラッシュはPortA1に接続されています。
PSRAMはAHBによってアクセスされるように構成され、起動後にMCU側でFlexSPIが構成され、数分後にDSP側からデータが書き込まれた。DSP側からデータを書き込んだ際、PSRAMに0x00のデータが存在し、そのデータは規則的に見えた。この問題をデバッグするために、192バイトの0x32を一度に書き込み、次に0x33を書き込みました...
MCU側からのデータ書き込みおよび読み出しに問題はありません。この問題は、DSP側からのデータ書き込み時にのみ発生しました。
FlexSPIの構成、
const flexspi_config_t FLEXSPI_config = {
.rxSampleClock = kFLEXSPI_ReadSampleClkLoopbackInternally,
.enableSckFreeRunning = false,
.enableDoze = true,
.enableHalfSpeedAccess = false,
.enableSckBDiffOpt = false,
.enableSameConfigForAll = false,
.seqTimeoutCycle = 65535,
.ipGrantTimeoutCycle = 255,
.txWatermark = 8U,
.rxWatermark = 8U,
.ahbConfig = {
.ahbGrantTimeoutCycle = 255,
.ahbBusTimeoutCycle = 65535,
.resumeWaitCycle = 32,
.buffer = {
{ .priority = 0, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 1, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 2, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 3, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 4, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 5, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 6, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true },
{ .priority = 7, .masterIndex = 0U, .bufferSize = 256U, .enablePrefetch = true }
},
.enableClearAHBBufferOpt = true,
.enableReadAddressOpt = false,
.enableAHBPrefetch = false,
.enableAHBBufferable = true,
.enableAHBCachable = false
}
};PSRAMの構成、
flexspi_device_config_t FLEXSPI_config_Device_SPIRAM = {
.flexspiRootClk = SPIRAM_ROOT_CLOCK_HZ,
.isSck2Enabled = false,
.flashSize = SPIRAM_SIZE_KBYTES,
.CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle,
.CSInterval = 2,
.CSHoldTime = 3,
.CSSetupTime = 3,
.dataValidTime = 0,
.columnspace = 0U,
.enableWordAddress = false,
.AWRSeqIndex = SPIRAM_LUT_SEQ_IDX_WRITE,
.AWRSeqNumber = 1U,
.ARDSeqIndex = SPIRAM_LUT_SEQ_IDX_READ,
.ARDSeqNumber = 1U,
.AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle,
.AHBWriteWaitInterval = 1,
.enableWriteMask = false,
};この問題について何かご存知の方はいらっしゃいますか?