

针对RT600 FlexSPI在使用LoopbackFromSckPad或DQS读取时出现额外时钟的问题,以下是逐步解决方案:
检查LUT指令序列中的空周期(Pad Setting):
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x9F, STOP, FLEXSPI_1PAD, 0x00))。若使用外部时钟源,可能需要增加空周期以等待数据稳定。READ_DATA部分)增加DUMMY_SDR或DUMMY_CYCLE的数量,例如将空周期从默认值0调整为1或2。配置FlexSPI的DLL(延迟锁定环):
flexspi_config.dllEnable = true;
flexspi_config.dllValue = 0x1; // 根据硬件调整具体值
FLEXSPI_Init(BOARD_FLEXSPI, &flexspi_config);调整FlexSPI的时钟分频与采样点:
flexspi_config.clkDiv中降低时钟分频系数,确保在外部回环模式下SCK频率不超过目标设备支持的范围。flexspi_config.rxSampleClock为kFLEXSPI_ReadSampleClkExternalInputFromDqsPad时,检查flexspi_config.dqsPinMux是否正确配置到实际DQS引脚。验证数据阶段长度(Data Size):
FLEXSPI_TransferBlocking时,确保xfer.dataSize字段设置为3字节而非默认的4字节。flexspi_transfer_t xfer = {
.deviceAddress = 0,
.seqIndex = READ_JEDEC_ID_SEQ_ID,
.seqNum = 1,
.dataSize = 3, // 明确指定读取3字节
.data = &buffer
};检查CS信号的保持时间(Chip Select Hold Time):
CS_INTERVAL或CS_HOLD_TIME寄存器设置,避免因CS释放延迟导致多出一个时钟周期。逻辑分析仪验证与参数微调:
phase值或增加dummyCycles。总结:问题根源在于外部采样时钟模式下时序未完全同步,导致FlexSPI提前或延长了数据读取阶段。通过增加空周期、调整DLL延迟、明确数据长度及优化LUT指令,可消除额外时钟,确保正确读取3字节。建议从增加空周期开始逐步调试,结合波形分析验证参数调整效果。
举报
更多回帖