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.

[参考译文] TM4C1294NCPDT:连接电源时引导加载程序中的 SPI 闪存访问问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/584197/tm4c1294ncpdt-spi-flash-access-issue-in-bootloader-when-power-supply-is-connected

器件型号:TM4C1294NCPDT

您好!

我在引导加载程序中遇到 SPI 读取状态寄存器问题。 问题似乎仅在连接电源时出现、但在连接调试器(MikroeProg)时、相同的代码段会起作用。

我似乎有点奇怪、为什么它失败了。 故障似乎是在读取状态寄存器时发生的。

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_0|GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_4);GPIOPINTYPE_GPIOPEN_BASE
(GPIOPORTN) GPIO_PIN_4);
GPIOPinTypeGPIOInput (GPIO_PORTQ_BASE、GPIO_PIN_3);
SPI_DESELECT ();
SysCtlPeripheralReset (SYSCTL_PERIPH_SSI3);
SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);
GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);
GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
GPIOPINWrite (GPIO_PORTQ_BASE、 GPIO_PIN_4、GPIO_PIN_4);//禁用 WP
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5、GPIO_PIN_5);//禁用保持
GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0|GPIO_PIN_2 | GPIO_PIN_3);
USC32_SYSC_UST_SYSCL
(USTRK、SYSC_USTRK)| SysClt_SYSC_SYSC_C000_SYSC_SYSC_SYSCL (32_SYSC_SYSC_SYSCL)

SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、SST25_FLASH_SPI_RATE、8);

SSIEnable (SSI3_base);
{
无符号长整型温度;
while (SSIDataGetNonBlocking (SSI3_base、Temp))
{
}
}

SPI_WRITE (SST25_CMD_RDSR);
uint8_t SPI_val = SPI_WRITE (0);//虚拟
SPI_DESELECT ();
//while (SPI_val!= 0x02);//错误! 出现故障。 

目前、我已经注释掉了对0x02的检查。

我查看了数据表、了解我是否错过了任何初始化、但找不到任何东西。 如果有人在连接电源时在引导加载程序中发现此操作失败的原因、并且在使用 JTAG/调试器时相同的代码工作。

任何建议/解决方法都很好。

谢谢你

库马尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在过去、当初始化步骤超出序列时、我看到了这种行为(与调试器一起工作、在上电后不工作)。 我不熟悉 MikroeProg 调试器、但在调试时、您的代码通常在器件上电时运行一次、然后调试器将 PC 设置回代码开始、并且在不执行系统复位的情况下再次运行。 第二次执行初始化。 例如、如果在启用外设之前配置外设、则第一次配置时会被忽略、第二次配置时会工作、因为外设已通过第一遍启用。

    检查这一点的一种方法是让调试器在运行代码之前执行系统复位。 这会将所有外设恢复到其上电复位状态、并从上电开始进行仿真。

    另一个想法是使用数字示波器查看 SPI 输出、并在与调试器一起运行时比较从上电到输出的输出。