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**** 2269630 points
Other Parts Discussed in Thread: TM4C1294NCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/720776/tm4c1294ncpdt-spi-flash-issue

器件型号:TM4C1294NCPDT

ARM:TM4C1294NCPDT

SP 闪存:N25Q128

遵循 SPI_Flash.c

SPIFlashSectorErase、

SPIFlashFastRead

代码:

对于(i=0;i<4096;i++)

SPIFlashSectorErase (i*4096);

对于(i=0;i<4096;i++)

 SPIFlashFastRead (I*4096、buff、4096);

 for (j=0;j>4096;j++)

  if (buff[j]!=0xff)

     中断;

我发现 i=128、那么 buff[j]不等于0xff、

我不知道原因,请 您提供一些建议吗?

 

  

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

    您好!

     SPIFlashFasRad() API 采用4个参数,但您的代码缺少 ui32Base。   

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

    很抱歉出错了。

    我的代码包括 ui32Base。

    SSI1_base
    CFG 如下:
    1、MAP_SSIConfigSetExpClk (SSI1_base、120000000、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、10000000、8);

    --------------------------------------------------------------------

    代码:

    对于(i=0;i<4096;i++)

    SPIFlashSectorErase (SSI1_base、i*4096);

    对于(i=0;i<4096;i++)

    SPIFlashFastRead (SSI1_base、i*4096、buff、4096);

    for (j=0;j>4096;j++)

    if (buff[j]!=0xff)

    中断;

    我发现 i=128、那么 buff[j]不等于0xff、

    我不知道原因,请您提供一些建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    当 i=128时、您从缓冲区中读出了什么内容? 是整个缓冲区不等于0xff 或仅为部分缓冲区。 当您执行 SPIFlashSecorEras()时,您还必须调用 SPIFlashReadStatus()来查询 SPI 闪存以确定扇区擦除操作何时完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    扇区128,整个 buf 不等于 oxff。

    当我使用 SPIFlashSectorErase 时、:

    1) 1) enablerite

    2)扇区擦除。

    3) 3)轮询状态。

    结果显示状态正确。

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

    在开始下一个扇区擦除之前、您是否正在执行如下操作以等待当前扇区擦除完成?

    对于(i=0;i<4096;i++)


    SPIFlashSectorErase (SSI1_base、i*4096);

    while ((SPIFlashReadStatus ()& 0x01)= 0x01);//等待当前扇区操作完成



    您还在使用哪个 SPI 闪存? 扇区大小是多少?闪存大小是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢,您也一样。

    n25q128

    界别分组:4096字节

    闪存大小:16MB。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    既然你说问题是当我等于128时、你可以尝试一些实验吗?

    您能否只读取一个仅为扇区128的扇区、而不是从 I=0循环到4096。 您可以尝试以下序列吗?

    1.只擦除扇区128的扇区
    2、等待扇区擦除通过轮询状态完成
    3.从扇区128读取。 读取时、请使用范围观察返回的数据是什么。 您可能希望只读取一个字节而不是4096字节、以便于调试。

    您提到、对于 I=0至127、它正在工作。 如果是这种情况、您能否重复上述序列、但针对扇区127。 然后、您可以比较扇区127和128之间的示波器捕获、以了解差异是什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    此问题是否已解决?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我没有听到你的反馈。 我现在要关闭这个线程。 如果您有新问题、您可以创建新主题。