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.

[参考译文] TM4C1237D5PM:SPI 闪存读取/写入

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/779328/tm4c1237d5pm-spi-flash-read-write

器件型号:TM4C1237D5PM
主题中讨论的其他器件:TM4C123

您好!

我们在项目中使用 TM4C1237、SPI 闪存连接到微控制器。

我们能够从 SPI 闪存中读取芯片 ID 或 manifcature ID。 但我们无法读取或写入 SPI 闪存。

这个问题我们不能确定到底是什么问题。 请帮助我们解决此问题。

谢谢、

Deepanraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您提供的信息不足以让我提供任何帮助。 我建议您使用逻辑分析仪来捕获 SPI 波形、并将其与您尝试编程的 SPI 闪存器件的数据表中的示例进行比较。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有听到你的反馈。 我假设您已经解决了这个问题。 如果不是、请回复此帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    很抱歉耽误你的时间、

    我们尝试解决该 SPI 读取和写入问题。 根据 SPI 闪存供应商共享的用于字节编程的数据表、我们需要在50MHz 下进行字节编程、而对于读取、我们需要在25MHz 下进行。

    我们如何在代码中设置这些频率。

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

    实际上从 SPI 闪存读取是正确的。 但写入 SPI 闪存的操作并未完成。

    数据表中指定的数据速率。 前提是、在写入操作期间、CS 引脚必须变为低电平、并且在数据写入闪存后、CD 引脚必须变为高电平才能成功写入。
    在此过程之前、写入使能引脚必须为高电平。

    我们遵循上述过程、无法写入 SPI 闪存。

    谢谢、
    Deepanraj.a
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您已使用示波器或逻辑分析仪验证 TM4C123芯片是否为 CS、Enable、SPICLK 和 SPIMO 提供了正确的波形、则问题出在这个未命名的 SPI 闪存器件中或在对该器件的理解中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    TM4C123芯片中的 SSI_ADV_MODE_WRITE 是否有任何关系?
    我们是否需要手动配置任何 GPIO 引脚作为输出、以便 SPI 在 tm4c123中正常工作

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

    TM4C123器件不支持 SSI 的高级模式、仅 TM4C129器件支持 SSI。 我没有足够的信息来回答您的第二个问题。 如果您需要在芯片选择为低电平的情况下传输多个帧(16位)、然后在最后一次传输后才变为高电平、那么您需要通过软件使该 GPIO 功能实现该芯片选择。

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

    尊敬的 Bob:

    如果有任何问题、请检查我的 SPI Init 函数。

    void SPI_Init (void)

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    ROM_GPIOPinConfigure (GPIO_PA2_SSI0CLK);
    ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//手动 CS
    ROM_GPIOPinConfigure (GPIO_PA4_SSI0RX);
    ROM_GPIOPinConfigure (GPIO_PA5_SSI0TX);
    ROM_GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);// GPIO_PIN_1
    //配置4MHz SPI 速度(80MHz/20=4)
    ROM_SSIConfigSetExpClk (SSI0_BASE、ROM_SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、ROM_SysCtlClockGet ()/ 10、8);
    ROM_SSIEnable (SSI0_BASE);
    uint32_t tmp;
    while (ROM_SSIDataGetNonBlocking (SSI0_BASE、&tmp);


    谢谢、
    Deepanraj

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

    我们可以写入 SPI 闪存。

    但当我们尝试从 SPI 闪存进行读取时。 仅读取第一个字节、下一个字节打印为0xFF。

    我们认为地址没有在 ti 提供的 API 中正确递增以读取 SPI 闪存。

    请帮助我们解决此问题。

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

    您使用的 API 函数中您认为不正确的函数?

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

    我们怀疑 SPIFlashRad() API 只能读取第一个字节,但后面的字节被读取为0xFF。

    但是、在写入操作期间、我们设置了断点并检查了我们写入的数据正在写入闪存中。

    谢谢、
    Deepanraj.a
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些功能使用在 TM4C123器件上不可用的 SSI 高级模式。 来自其他用户的此帖子可能有助于:
    e2e.ti.com/.../501515