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.

[参考译文] TMS320F2812:闪存 API 问题

Guru**** 2782635 points

Other Parts Discussed in Thread: TMS320F2812, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1617636/tms320f2812-flash-api-issues

器件型号: TMS320F2812
Thread 中讨论的其他器件: UNIFLASH

我遇到了使用 TI  TMS320F2812 进行重新设计的问题、我们不得不将设计中的 FPGA 从 Spartan 3 更改为 Artix 7。 TMS320F2812 在通过使用 Flash281x_API 的引导加载程序对应用程序进行编程时遇到问题、因此我们正在了解产品。 据我所知、以前的设计从未出现过这个问题。

使用 TI 的 Uniflash 通过 JTAG 编程时、我没有遇到任何问题。 使用 API 时遇到以下故障:STATUS_FAIL_VERIFY、STATUS_FAIL_ADDR_INVALID。

当我收到 STATUS_FAIL_VERIFY 时、返回的数据为 0xFFFF、0x0000 或正确的数据。 看来写入和验证都失败了。

收到 STATUS_FAIL_ADDR_INVALID 后、我看不到地址有任何问题。 它似乎是正确的。

最近一次运行的 22 块有 5 块电路板存在此问题。 我们正在等待 PCB、然后再开始下一次运行。

似乎防止编程失败的唯一事情是将系统时钟从 144MHz 减慢到 112Mhz。

 

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

    您好:

    对延误表示歉意、昨天是美国的假日。 请在第二天收到回复。

    此致、
    马特

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

    Luke、

    您能否确认使用哪种引导模式来下载闪存内核/数据:

    Uniflash 将使用 JTAG 引脚下载内核/API 和数据、而 FPGA 生产将使用其他模式之一:SPI、SCI 或并行引导。

    请思考 FPGA(外部更改):下面是我要开始了解的方面:

    1) 引导引脚、我们需要确保上电后正确驱动以下引脚一段时间、以便 BROM 能够正确识别引导模式。  是否可以确保在旧 FPGA 的 XRSn 置为无效后、引脚保持相同状态?

    2) 时钟: 由于你提到较慢的频率可以工作,让我们确保到设备的输入时钟没有改变 FPGA 的变化。  我认为这不是问题、因为 Uniflash 将使用相同的时钟、如果更改了、可能会出现相同的问题...但最好确认

    3) 通信协议、无论使用何种引导加载程序、都需要按列出的外设显示数据。  如果此代码从 FPGA 更改、则可能会导致问题...虽然我认为您会收到某种类型的错误代码、并且闪存 API 可能根本无法运行...

    将查找您的回复。

    此致、

    Matthew

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

    1) 引导引脚:

    设置用于跳转到闪存地址 0x3F7FF6。 SCITXDA 由 FPGA 驱动为高电平。  在编程过程中监测了所有引脚并且没有发现引脚状态发生变化。

    2) 时钟:

    两个设计之间的情况是相同的。 它有一个 32MHz 振荡器、可为逆变器供电、而逆变器用于将其电平转换为 1.8V。

    3) 它使用与旧的相同的设计。 它使用 XINTF。   FPGA 使用块 RAM 发送地址、一个数据字和控制信号。  

    我已使用引导加载程序的调试构建验证地址和数据是否与发送的地址匹配。

    例程:

    • 读取块 ram 并存储到局部变量中。
    • 检查控制字 变量(如果写入的值不为零,如果全部为 F,则执行此操作)
    • 使用数据和地址变量对一个字进行编程。
    • 如果编程成功、请验证数据。 如果未发送 FPGA 返回代码
    • 如果验证成功、则  不发送 FPGA 返回代码
    • 写入控制字 0x0000、这样 FPGA 知道发送下一个字/地址。

    我已经完成了调试中的测试例程、如果程序 API 返回时出错、验证失败、然后检查 从验证 API 返回的 ActualData。 如果该数据为 0xFFFF、请再次尝试写入。 我已经看到它第二次正确写入和验证、但这也并不总是有效的。

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

    Luke、

    您是否在多个 F281x 器件上观察到了此情况、即您是否可以选择尝试使用另一个 PCB 来查看故障是在所有 F281x 上还是仅隔离到一个器件上。  我只想排除故障 MCU。

    有趣的是、当程序/验证失败时、闪存中的数据仍处于被擦除状态、而不是基于要写入的数据的中间故障。  如果您重新尝试编程、可能会起作用、我认为问题不在闪存中、否则我们会看到 0xFFFF 不同。

    但由于程序失败、我必须假设在程序操作之前正确接收到来自 FPGA 的数据、否则程序将通过、验证将失败。

    FPGA 有没有机会以某种方式中断 API 调用(不过,应在 API 中禁用 INT)?

    此致、

    Matthew

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

    Matt、

    我们首先注意到它是因为在 22 个批量运行的 5 个板出现了这个问题。 在这 5 块电路板上加载应用固件时、我们注意到它并不总是会失败。 但多次尝试会导致故障、并且故障发生时闪存中的位置是随机的。  其他 17 个电路板我们刷了 10 次、进行测试以查看它们是否也有问题、但每次都成功。

    上周、我们收到了新一批 PCB、并运行了一批小样本电路板 (3)。 3 个中的 1 个出现相同问题。

    FPGA 只能在写入“命令“寄存器时发送中断。 但是、 我可以检查一下、看看是否发生了错误。  

    我是否可以收集任何有助于判断 API 操作失败原因的调试信息?

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

    Matt、

    观察 INT 线是关键。 所有 INT 线均未移动。 但是、XINT2 的电压为 2.5V。

    我有 XINT2 连接到 FPGA 和它未定义,. 我假设 FPGA 中有一个未定义的引脚将是输入/高阻态。我重建了 FPGA、将此引脚设置为输入、现在该引脚为 3.3V。

    我测试了 2 个有问题的电路板、现在它们可以正常工作。

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

    Luke、

    感谢您回复结果。  很高兴你能解决问题,并让事情恢复正常。

    此致、

    Matthew