This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129ENCPDT:TM4C129ENCPDT

Guru**** 1828310 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1379793/tm4c129encpdt-tm4c129encpdt

器件型号: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;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     问题是什么? 您的主题帖是空的。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,查尔斯,我更新了问题, PEASE 让我知道,如果我错过了一些东西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我正在使用上述函数执行旧模式的闪存写入、它将正确写入数据。问题出在哪里?

    SPI 闪存驱动程序最初是为串行 SPI 而开发的、而不是 QSSI。 我有两个建议。 首先、查看逻辑分析仪上的 QSSI 信号、并查看它们在写入期间是否正确输出。 您甚至还能看到信号吗? 其次、将输出格式与您连接的闪存进行比较、并确保它们采用相同的格式、并且主器件满足闪存器件所需的时序要求。