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.

[参考译文] TM4C129XNCZAD:SPI 闪存接口

Guru**** 2397345 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1504733/tm4c129xnczad-spi-flash-intefac

器件型号:TM4C129XNCZAD

工具/软件:

尊敬的先生:

我们连接的是 W25Q16JLUXIG_TR 16MB 闪存、但无法读取器件 ID。 也无法写入闪存。

我将附加该文件以供参考

//必须启用 SSI3外设才能使用。
SysCtlPeripheralEnable (SysCtl_Periph_SSI3);
//
ROM_GPIOPinConfigure (GPIO_PF0_SSI3XDAT1);
ROM_GPIOPinConfigure (GPIO_PF4_SSI3XDAT2);
ROM_GPIOPinConfigure (GPIO_PF5_SSI3XDAT3);

ROM_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
ROM_GPIOPinConfigure (GPIO_PQ1_SSI3FSS);//添加了
ROM_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
// ROM_GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4 | GPIO_PIN_5);
ROM_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);//添加了。
ROM_GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_0);//添加了。

void Flash_SPI_init (uint32_t ui32SysClock){

uint32_t pui32Dummy[1];
uint32_t ui32DeviceID;
SSIConfigSetExpClk (SSI3_BASE、ui32SysClock、SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、1000000、8);

//启用 SSI3模块。
ROM_SSIAdvModeSet (SSI3_BASE、SSI_ADV_MODE_WRITE);
SSIAdvFrameHoldEnable (SSI3_BASE);
SSIEnable (SSI3_BASE);

while (SSIDataGetNonBlocking (SSI3_BASE、&pui32Dummy[0])){
}

延迟(500000);

//首先读取设备 ID
ui32DeviceID = SSILibSendReadIDAdvMode (SSI3_BASE);

if (ui32DeviceID!= device_ID){

延迟(500000);

延迟(500000);


}

// UARTprintf ("检测到器件 ID 为%x\n"的外部闪存、ui32DeviceID);
}

uint32_t SSILibSendReadIDAdvMode (uint32_t ui32Base){
uint32_t ui32Idx、ui32Receive;
uint32_t ui32MfgID;
uint32_t ui32DevID;
uint32_t ui32ReadID[]={0xAA、0xAA};
uint32_t ui32ReadIDFlash;

对于(ui32Idx = 0;ui32Idx < sizeof (g_ui8InstrReadID)/ sizeof (g_ui8InstrReadID[0]);ui32Idx++){
SSIDataPut (ui32Base、g_ui8InstrReadID[ui32Idx]);
}

SSIAdvModeSet (ui32Base、SSI_ADV_MODE_READ_WRITE);
SSIDataPut (ui32Base、0x00);
SSIDataGet (ui32Base、&ui32Receive);
ui32ReadID[0]= ui32Receive;
SSIAdvDataPutFrameEnd (ui32Base、0x00);
SSIDataGet (ui32Base、&ui32Receive);
ui32ReadID[1]= ui32Receive;
ui32MfgID = ui32ReadID[0];
ui32DevID = ui32ReadID[1];
ui32ReadIDFlash = ui32MfgID;

ui32ReadIDFlash = ui32ReadIDFlash << 8;
ui32ReadIDFlash || ui32DevID;

SSIAdvModeSet (SSI3_BASE、SSI_ADV_MODE_WRITE);

返回 ui32ReadIDFlash;
}

它的16MB 但架构错误显示512MB

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

    您好、

     我目前正在度假。 我将在星期四回来时研究你的问题。 同时、请展示 SSI3接口的示波器 CAP 或逻辑分析仪捕获结果。

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

    您好、

     是否有用于 SSI3接口的示波器电容器或逻辑分析仪波形?  读取制造和器件 ID 时、信号是否符合 W25Q16JLUXIG_TR 的时序要求?  阅读 W25Q16JLUXIG_TR 数据表、您需要使用串行(1位)模式、而不是四路模式。 请参阅下面的。 您需要发送一条90h 指令、后跟24位0、然后您可以读取制造 ID (EFH)和器件 ID。 在 SSILibSendReadIdAdvMode 的代码片段中、 g_ui8InstrReadID[]中存储了什么内容? 请检查 g_ui8InstrReadID 是否包含90h 和三个字节0。 以下是我期望的顺序:

     -使用 SSIAdvFrameHoldEnable 将 CS/帧信号保持在低电平。

    - SSIAdvModeSet (ui32Base、SSI_ADV_MODE_READ_WRITE);

     -调用 SSIDataPut ()以发送90h 和五个字节0。 最后两个字节并不相关、但您需要这两个虚拟字节来为从器件创建时钟、以便制造 ID 和器件 ID 返回。

     -调用 SSIDataGet 以从 RX FIFO 中读取数据。 则需要屏蔽高位。 请参阅 SSIDataGet 用户指南。