请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}