请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 工具/软件: CCS
您好、我正在使用四通道 SPI 写入闪存和从闪存读取数据。在 QSPI 上从闪存读取数据可以正常工作、但无法在 QSPI 模式下写入。如果我使用上述函数进行闪存写入、则是在旧模式下、它会正确写入数据。可能是什么问题?
bool flashWrite(uint32_t ui32Base, uint32_t address, uint8_t *data, uint32_t length) { flashWriteEnable(SSIBase); SSIAdvModeSet(ui32Base, SSI_ADV_MODE_WRITE); SSIDataPut(ui32Base, FLASH_COMMAND_PAGE_PROGRAM); SSIDataPut(ui32Base, (address >> 16) & 0xff); SSIDataPut(ui32Base, (address >> 8) & 0xff); SSIDataPut(ui32Base, address & 0xff); while (length-- != 1) { SSIDataPut(ui32Base, *data++); } SSIAdvDataPutFrameEnd(ui32Base, *data); waitFlashReady(); return 1; } void flashQuadRead(uint32_t ui32Base, uint32_t ui32Addr, uint8_t *pui8Data, uint32_t ui32Count) { uint32_t ui32Trash; while (SSIDataGetNonBlocking(ui32Base, &ui32Trash) != 0) { } SSIAdvModeSet(ui32Base, SSI_ADV_MODE_WRITE); SSIDataPut(ui32Base, FLASH_COMMAND_QREAD); SSIDataPut(ui32Base, (ui32Addr >> 16) & 0xff); SSIDataPut(ui32Base, (ui32Addr >> 8) & 0xff); SSIDataPut(ui32Base, ui32Addr & 0xff); SSIDataPut(ui32Base, 0); SSIAdvModeSet(ui32Base, SSI_ADV_MODE_QUAD_READ); if (ui32Count == 1) { SSIAdvDataPutFrameEnd(ui32Base, 0); } else { SSIDataPut(ui32Base, 0); while (--ui32Count != 1) { SSIDataPut(ui32Base, 0); SSIDataGet(ui32Base, &ui32Addr); *pui8Data++ = ui32Addr & 0xff; } SSIAdvDataPutFrameEnd(ui32Base, 0); SSIDataGet(ui32Base, &ui32Addr); *pui8Data++ = ui32Addr & 0xff; } // // Read the final data byte from the receive FIFO and place it into the // data buffer. // SSIDataGet(ui32Base, &ui32Addr); *pui8Data++ = ui32Addr & 0xff; }