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.

[参考译文] CCS/TMS320F28334:Code Composer Studio/TMS320F28334

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/766558/ccs-tms320f28334-code-composer-studio-tms320f28334

器件型号:TMS320F28334
主题中讨论的其他器件: C2000WARE

工具/软件:Code Composer Studio

您好,

我不熟悉 Code Composer Studio、我需要 CCS 上的项目创建帮助。 我有一个应用代码的输出(.out)文件、我需要 使用 UART 通信将此输出代码闪存到 TMS320F28334控制器。  请任何人在这方面提供帮助以实现这一目标。  

谢谢、此致、

Jyoti

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

     e2e.ti.com/.../Working_5F00_1.5VFile.txtHi、Sal、

    我希望我们在结束时已经尝试过这一点

    正如您所说、我们使用的是启用回声通信的 SCI 内核。

    您可以从附加的日志和终端屏幕截图中进行检查。

    如果您有更新的 serial_flash_programr.exe、请发送给我。

    我们更有兴趣了解以下问题:

    1.为什么没有使用不起作用的文件从 MCU 接收校验和?

    2.为什么在6个位置发生2个字节的变化会导致上述情况?

    如果 您可以通过 WebEx 或任何其他在线远程会话来安排调试会话,那将会很好?

    此致、

    Bhanu

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

    内核不进行回声通信。 使用内核、主机发送一个数据块、器件在接收到数据块后发送该数据块的校验和。 这不会回波。 引导加载程序使用回声。

    请遵循我的建议、而不是反复重复执行相同的操作。 将内核通信从使用校验和转换回显。 我上次的答覆是详细的。

    我无法告诉您设备为什么不发送回校验和。 我已经测试过它、它正在工作、我已经向您发送了我测试过它的确切文件、这些文件是您的文件。 我还包括了串行闪存编程器。 请参阅上一篇文章中随附的 ZIP。

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

    我们查看了代码、特别是 SCI_Boot.c 我们找不到有关如何启用回显而不是校验和检查的选项。
    您能告诉我们如何操作吗?

    您还可以发送 serail_flash_programmer.exe 的代码吗?

    我们已尝试使用您共享的 serial_flash_programr.exe。 我们的观察结果是一样的。 很少有文件可以使用、而很少有文件不能使用。

    从代码看来,不成功返回 Flash_Program()可能是不发送校验和的原因? 为什么闪存编程在不起作用的代码中不成功? 28334处理器中是否已存在 Flash_Program? 这是否是某个角落问题的问题?

    谢谢、

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

    引导 ROM 源代码的 SCI_Boot 使用回显。 它很简单、位于引导 ROM 源代码中。 您可以执行此操作。

    您已经拥有串行闪存编程器的源代码。 这是我们在 C2000Ware 中发布的 Visual Studio 项目。

    好的。

    好的。 这是一个很好的观察结果。 这应该比这早得多。 它可能与您的电路板相关、或者与闪存相关的其他事项、而不是实际的串行闪存编程。 这可能与电源相关、也可能与闪存擦除和编程相关。

    我将要求另一位工程师对闪存编程问题作出响应。

    同时、请确认这是闪存编程问题。

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

    当你执行 Flash_Program()函数时,你会得到什么错误消息? 您是否已经确保您尝试编程的闪存地址处于擦除状态以开始。

    Flash_Program()函数与校验和无关。 Flash_Program ()函数作为 Flash28335_API_V210.lib 的一部分提供。 F28334器件中本身并不存在该特性。

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

    您好、Sal、

    我们正在使用当前的 F28335_flash_kernel 工程、只对 进行了细微更改(器件选择–f28334和时钟选择–30Mhz)。

    “引导 ROM 源代码的 SCI_Boot 使用回显。” 您是否在讨论 SCI_BOOT.c? 我们检查了 SCI_BOOT.c 并查看了函数 CopyData()。 它一次将1K 数据写入闪存。

    关于回声选项,您能否具体说明:

    是否 需要在项目中添加其他文件?

    2.需要在回显选项的哪个文件中进行哪些更改?

    我们使用 C2000ware 安装文件夹中提供的"F05_DownloadImage.cpp"构建 serial_flash_programmer。 它无法正常工作。 请检查随附的屏幕截图图像以供参考。

    您共享的 serial_flash_programr.exe 并非如此。我们可以下载几个文件。 因此、请您共享生成 serial_flash_programmer 的源代码。

    此致、

    Bhanu

    您好、Manoj、

    我们没有收到任何错误消息。

    我们能够成功地将几个文件下载到闪存中。  下载70%后、有几个文件会被删除。 我们捕获了在主机和器件之间传输的串行数据。 我们看到没有为器件中的这些文件发送校验和。 我们查看了 shared_Boot.c 中的代码 CopyData(),并发现只有当校验和无法发送时,Flash_Program()才不会返回成功。 因此、我们得出结论、Flash_Program 可能不成功。

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

    状态= Flash_Program (((UINT16 *) BlockHeader.DestAddr、

                     (uint16 *) progBuf、BlockHeader.blockSize、

                     FlashStatus (FlashStatus);

          if (status!= STATUS_SUCCESS)

          {

            返回;

          }

          //

          //闪存程序后,将校验和发送到 PC 程序。

          //

          SendCheckSum();

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

    我们想知道为什么在加载70%的代码后闪存程序不成功? 为什么它在少数文件中是成功的、而在其他文件中是不成功的? 成功文件和失败文件之间的差异最小。 只有在加载块后、差异所在、我们才会看到校验和不是来自器件。

    PFA:正在运行和未运行的串行转储的屏幕截图

    谢谢

    Bhanu

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

    首先、回波可以在 F05_DownloadKernel.cpp (主机)和 SCI_Boot.c (器件)中找到、网址为:C:\ti\c2000Ware_1_00_06_00\libraries\boot_rom\F2833x\v2_0\rom_sources\source

    我可能对 F05_DownloadImage.cpp 所做的唯一更改可能是为了增加 Visual Studio 项目中 SLEE()函数的延迟。 请尝试此操作。

    请向 Manoj 提供闪存程序返回值失败。 该函数返回故障状态。 这是什么状态?

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

    您好 Sal、

    "首先、回波可以在 F05_DownloadKernel.cpp (主机)和 SCI_Boot.c (器件)中找到、位于此处"(我们找不到此文件- F05_DownloadKernel.cpp)

    正如您提到的、我们已经在使用 SCI_Boot.c。 那么、对于 ECHO_BAC返回、必须进行什么更改?

    我们尝试在内核加载后再加载一些延迟(睡眠10000)、这无助于解决下载问题。 您共享的 serial_flash_programr.exe 并非如此。 我们可以下载一些文件。 因此、请您共享生成 serial_flash_programmer 的源代码。 除了延迟之外、它似乎还有其他更改、例如内核下载会回传到终端。

    我们查看了 shared_Boot.c 中的代码 CopyData(),并发现只有当校验和无法发送时,Flash_Program()才不会返回成功。 因此、我们得出结论认为 Flash_Program 可能不成功。  我们无法看到 Flash_Program 的返回值、因为它是通过 USB UART 连接的

    此致、

    Bhanu

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

    我在引导 ROM 的 C2000Ware 中指向的 SCI_Boot.c 和 shared_Boot.c 与内核使用的 SCI_Boot.c 代码不同。

    请查看引导 ROM 源代码以了解如何实现 echoback。

    请确定闪存程序正在返回的错误代码。 这对于调试很重要。

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

    请参阅随附的源代码。

    SAL

    e2e.ti.com/.../e2e.zip

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

    e2e.ti.com/.../4530.f05_5F00_DownloadImage.cppHiSal、

    我们介绍了您建议的路径中的代码(SCI_Boot.c 和 shared_Boot.c)。 我们使用这些函数来生成内核、并测试了此内核。 我们观察到应用程序文件发生回显。 加载整个应用程序。 请参阅屏幕截图。 但它似乎没有执行。

    我们认为下载的应用程序没有加载到闪存中。  该方案应该做的事情没有发生。

    我们还在 shared_Boot.c ( rom_source 文件夹)的 CopyData()函数中观察 到 ,FLASH_ERASE 和 FLASH_program 没有被调用,并且缺少"Flash2833x_API_Library.h"。 它们存在于内核使用的文件中。

    我们无法确定 Flash_Program 的返回值、因为它是通过 USB UART 连接的。 (请指导我们如何进一步调试它?)

    此致、

    Bhanu

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

    引导 ROM 中的现有代码不使用闪存擦除和编程。 您现在需要集成这两种解决方案。 将原始内核中的闪存擦除和闪存程序与引导加载程序的通信(回显)一起使用。

    我很高兴您能让通信正常工作。 现在集成闪存 API。

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

    e2e.ti.com/.../SCI_5F00_boot_5F00_shared_5F00_boot.zipHiSal & Manoj、

    我们集成了两个解决方案并编译了内核文件、支持应用程序映像回显并刷写程序。(请检查随附的修改的 SCI_boot.c 和 shared_boot.c 以供您参考)

    我们观察到了相同的行为。 很少文件正常工作,很少文件无法正常工作。 行为与以前完全相同。 不起作用的文件会在与以前相同的位置停止。 请查看随附的屏幕截图。

    此外、当 应用程序加载暂停时、我们还检查了"Flash_Program"状态。 它将返回(1F),表示错误代码:31。

    (错误:STATUS_FAIL_ZERO 位错误)

    您能帮助我们了解 STATUS_FAIL_ZERO 位错误并解决它吗?

    Flash28334_Program (a、b、c、d)是否存在一些问题、这些问题会反映在特定的数据块中?

    此致、

    Bhanu

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

    您能就此发表评论吗?

    Bhanu、
    您是否在多个电路板上观察到这一点?

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

    闪存 API 错误条件记录在闪存 API 文档中、该文档位于以下 C2000Ware 目录中:

    C2000Ware\libraries\flash_api\F2833x\28335\docs\Flash2833x_API_Quickstart.pdf

    当要编程的数据中有"1"且该闪存地址已编程为"0"时、Flash_Program 函数会提供 STATUS_FAIL_zero_bit_ERROR。 例如、如果您使用0x0001对某个位置进行编程、然后尝试使用0x0002对同一位置进行编程、则该函数将返回此故障。 这是因为不能擦除单个位(即从0移动到1)。 如果发生这种情况
    函数不会尝试对任何其他位进行编程。

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

    根据 Manoj 提到的内容、请确保您正在编程的闪存已被正确擦除。 此外、请在多个电路板上尝试此操作。

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

    Manoj & Sal、您好!

    我们使用 shared_Boot.c 的 CopyData()函数,从中调用 Flash_Erase 和 Flash_Program 函数。 如果此函数适用于 F82335的文件(F82334的工作文件和非工作文件)、则只能怀疑 Flash_28334擦除和 Flash_28334Program 存在问题。

    您能否查看您的结尾代码、了解导致此问题的原因? 我要附加文件。

    如前所述、我们能够成功下载一些文件。  未成功下载的文件在文件内容上有一些很小的差异。

      a:两个文件的大小相同、只有几个字节不同(例如:工作文件中为0x0800 /0x555、不工作文件中为0x0FFF)

      B.代码在存在差异的块中停止。

      c. 检查随附的工作文件和 NotWorking 文件的比较屏幕截图。

    我们在使用3-4块电路板进行测试时也有同样的观察结果。

    我们需要您的帮助、以便

     1.重新编写您的终端代码,并说明导致此问题的原因是什么?

     2、为什么闪存擦除/闪存编程不能仅针对其中包含0xFFF 的块正常进行? 为什么只有在文件中有“0x0FFF”的块才会变得明显。

     3. 您是否认为此部件的内部闪存存在问题,从而 导致出现此问题?

    等待您的回复。

    此致、

    Bhanu

    e2e.ti.com/.../5736.SCI_5F00_boot_5F00_shared_5F00_boot.zip

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

    大家好、Manoj & Sal、

    等待您的回复和解决。

    谢谢、

    此致、

    Bhanu

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

    我不会怀疑闪存 API 文件存在此问题。 这些闪存 API 文件已成功使用超过15年、没有出现任何问题。

    如前所述、如果 Flash_Program 函数发生故障"STATUS_FAIL_zero_bit_ERROR"。 您需要先擦除该扇区、然后再对其进行编程。

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

    大家好、Manoj、

    如前所述、我们针对工作文件和非工作文件遵循相同的过程和内核文件。

    此外、两个文件的文件大小相同、只有几个字节的大小不同、如前面的屏幕截图所示。

    为什么闪存擦除/闪存编程不能仅针对其中包含0xFFF 的块正常进行? 为什么只有在文件中有“0x0FFF”的块才会变得明显。

    请告诉我们如何进一步调试?

    此致、

    Bhanu

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

    我知道您的闪存程序有问题。 但是、我没有意识到您在闪存擦除方面遇到了问题? 当您运行闪存擦除算法时、您会收到什么错误消息? 闪存擦除算法与 hex 文件无关。 因此、擦除某个扇区不会出现任何问题?

    这是一个非常长的线程。 我对你所面临的问题并不完全了解。 我需要与其他在我进入之前一直与您合作的工程师保持一致。 请在5个工作日内返回、并提供一些调试提示。

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

    您好、Manoj、

    您好!

    非常感谢您的支持。 为了逐步进行,让我给你一个清晰的图片。

    在我们的应用中、

    1. DAC 输出必须是应用文件中配置的值。 例如、如果应用将 DAC 配置为1V、则在加载此应用后、我们期望 DAC 输出为1V。 此 DAC 输出配置范围为0V 至3.3V

    2. 当应用将 DAC 输出配置为0V 至1.5V 时、TI 工具生成的输出文件成功加载到闪存中。

    3. 当 DAC 输出配置为1.5V 至3.3时、TI 工具生成的输出文件无法加载到闪存中。

    如需了解相关信息、

    如果输出文件格式为.hex 文件、对于 DAC 输出0V 至3.3V、它正在成功加载到闪存中。 但是、如果输出文件格式为.txt 文件、则 DAC 输出0V 至1.5V 时输出文件正在成功加载、如果 DAC 输出为1.5V 至3.3V、则输出文件未成功加载到闪存中。

     

    为了刷写两种输出文件格式的.hex 和.txt、我们使用了相同的擦除算法。

     

    请帮助我们了解问题吗? 是使用转换工具吗? 我们对此有疑问、因为.hex 文件输出格式能够成功加载、但无法使用.txt 文件格式。

    此致、

    Rajkumar

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

    请回答我之前提出的问题。 在回答我在上一篇帖子中提出的问题之前、我无法提供您有意义的意见。

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

    您好、Manoj、

    "0x1f"是我们在擦除闪存时遇到的错误。 我们已向您解释了应用要求、以便您清楚地了解问题。 如果给定的信息使您对确切问题的理解过载、我们将非常抱歉。  

    谢谢、

    Rajkumar  

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

    错误# 0x1F (十进制的31)对应于当 Flash_Program 函数而非 Flash_Erase 函数时的错误消息。 我在前面的帖子中解释了该错误的含义。

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

    您好、Manoj、

     当文件下载失败时、我们观察到 STATUS_FAIL_ZERO 位错误。  当在写入前该位未被正确擦除时、就会发生该错误。 由此得出的结论是闪存擦除没有正确发生。 它与我们能够下载几个文件的工具相同(DAC 需要1.0V、1.2V、1.5V 输出电压)、在某些情况下不成功(DAC 需要大于1.5V 的输出电压)

    成功的文件和失败的文件之间存在微小的差异。 仅在十六进制以下的内容在8个位置不同。

    DAC 所需的输出电压

    十六进制值

    二进制值

    1.0V

    0x0555

    0000 0101 0101 0101

    1.2V

    0x0666

    0000 0110 0110 0110

    1.5V

    0x0800

    0000 1000 0000 0000  

    3.3V

    0x0FFF

    0000 1111 1111 1111

     当包含这个不同的块被传输时、闪存程序将显示错误。

    您能否说出闪存擦除失败的原因、 这会导致闪存程序出现 STATUS_FAIL_ZERO 位错误?

    谢谢你。

    -Rajkumar

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

    我将让 Manoj 评论闪存问题。

    我有一个后续问题... 当您遇到此错误时、块实际上是否未正确编程? 错误消息对应于真正的编程错误? 或者、尽管返回错误、数据是否正确编程?

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

     

    您好 Sal、

    当 Flash_Program()返回错误时,我们在 shared_Boot.c 中的 CopyData()函数中添加了 Flash_Verify()。 请参阅以下代码。 我们观察到 Flash_Verify 函数返回0x28值。 这用于 STATUS_FAIL_VERIFY 错误。 这种情况发生在块中、其中工作块和非工作块存在字节差异。

    Flash_Program ()返回 STATUS_FAIL_zero_bit_error。 当闪存未被正确擦除时,Flash_Program()返回此错误。

    您能否加快确定此行为的根本原因? 我们可以有一个用于调试的 WebEx 会话。

    //

    //对尽可能多的完整缓冲区进行编程
    //
    for (j = 0;j <(BlockHeader.blocksize / PROG_buffer_length);j++)

    BlockHeader.ProgBuffAddr =(uint32) progBuf;
    for (i = 1;i <= PROG_buffer_length;i++)

    wordData =(* GetOnlyWordData)();
    *(uint16 *) BlockHeader.ProgBuffAddr++= wordData;

    状态= Flash_Program (((UINT16 *) BlockHeader.DestAddr、
    (uint16 *) progBuf、PROG_buffer_length、
    FlashStatus (FlashStatus);
    if (status!= STATUS_SUCCESS)

    check=1;
    Check = Flash_Verify (((UINT16 *) BlockHeader.DestAddr、//用于调试
    (uint16 *) progBuf、PROG_buffer_length、
    FlashStatus (FlashStatus);
    SendFlashNotSuccessValue (状态、检查);
    返回;

    BlockHeader.DestAddr += PROG_Buffer_length;

    //
    //闪存程序后,将校验和发送到 PC 程序。
    //
    //SendCheckSum();

    谢谢

    -Rajkumar

     

     

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

    但是、您在多少个器件上进行了测试? 您是否也能够在其他设备上确定性地重现此问题? 这意味着、它在所有器件上是否总是以可以预测的完全相同的方式发生故障?

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

    您好 Sal、

    我们已在3个器件中对此进行了测试、并在所有3个电路板中重复使用。 所有3个板都以相同的方式出现故障、从而产生相同的错误。

    请帮助我们解决此问题、 我们正在等待 Manoj 对闪存 API 的回复。

    谢谢你。

    -Rajkumar

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

    闪存错误:当您尝试使用'1'对位位置进行编程时,如果该位位置中已经编程了'0',则会发生 STATUS_FAIL_zero_bit_ERROR。 如果闪存程序函数报告此错误、我将读取您正在编程的地址位置、并确保您尝试编程的闪存地址位置具有0xFFFFFFs (已擦除状态)。

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

    您好、Manoj

    由于  会发生 STATUS_FAIL_zero_bit_error,因此我们怀疑 Flash_Eras()函数只能从开始。

    我们验证了闪存模块、 我们在写入该模块时检查它是否具有0xFFFF。 我们看到 Flash_Verify 返回40。

    为什么 Flash_eras()不成功?

    Flash_Eras()的工作原理是什么?

    我们在哪里可以找到它的代码?

    我搜索了扇区 A、扇区 B、扇区 C、扇区 D 的大小、但我发现了  

    #define SECTORA (UINT16) 0x0001
    #define SECTORB (UINT16) 0x0002
    #define SECTORC (UINT16) 0x0004
    #define SECTORD (UINT16) 0x0008
    #define SECTORE (UINT16) 0x0010
    #define SECTORF (UINT16) 0x0020
    #define SECTORG (UINT16) 0x0040
    #define SECTORH (UINT16) 0x0080

    在哪里可以找到扇区的大小?

    您能帮助解决问题吗?

    谢谢你。

    Rajkumar

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

    问题解决方案:在闪存中进行编程的应用程序使用了扇区 H / G。但是、串行闪存编程器软件在尝试对新的应用程序代码进行编程之前未擦除扇区 E / F / G / H、这正是客户获得"STATUS_FAIL_zero_bit_ERROR"的原因。 通过修改串行闪存编程器软件来擦除扇区 E、F、G、H、我们能够解决这个问题。

    我们认为这一问题已经解决。

    此致、
    曼诺伊