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.

[参考译文] TMS320F28374S:C2000 F021闪存 API 版本1.53中读取函数的用法

Guru**** 2539500 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/590708/tms320f28374s-usage-of-read-functions-from-c2000-f021-flash-api-version-1-53

器件型号:TMS320F28374S
Thread 中讨论的其他器件:controlSUITE

您好!

问题1:

我想从包括闪存、闪存 ECC、OTP、OTP ECC 在内的所有类型存储器中读取未被 ECC 模块校正的原始数据。

"Fapi_doMargini"可以读取原始数据吗?

 问题2:

闪存 API 提供三种读取模式:正常读取、读取裕度0和读取裕度1。

每种模式的含义是什么?

问题3:

闪存 API 提供 Fapi_doPsaVerify 函数来加速验证。

但它需要一个 PSA 值进行比较。您是否会给我 C 源代码来计算将 由 Master (Burner)实现的 PSA?  

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

    XIN、

    请注意、闪存 API 版本1.55用于 TMS320F2837xS。  F2837xS 闪存 API 文档链接: http://www.ti.com/lit/pdf/spnu630。

    闪存 API 1.53版用于 TMS320F28M35x 和 TMS320F28M36x 器件(http://www.ti.com/lit/pdf/spnu595)。

    回答您的问题:

    问题1)。 如果您想在没有 ECC 校正的情况下读取原始数据、在读取闪存/ OTP 之前、需要通过向 ECC_ENABLE 寄存器写入0来禁用闪存包装程序中的 SECDED 逻辑(请参阅 TRM 以了解该寄存器的详细信息)。

    闪存 API 不提供从闪存/ OTP/ECC 读取原始数据的函数、因为用户可以编写一个简单的函数来完成此操作。

    请注意,F2837xS 器件不支持读取边距模式,因此不支持 Fapi_doinMargad()函数。 因此、您在 TRM 中找不到相关信息。 我们将发布更新的闪存 API 参考指南、以删除对读取裕度模式的引用。 很抱歉造成混淆。

    问题2)。 现在、您知道该器件不支持读取裕度模式。

    问题3)。 您可以使用 API 库中的 fapi_calculatePsa()函数来计算 PSA。 请注意、此函数不支持 ECC 存储器空间。 您可以将其用于闪存主阵列或 OTP、但不能用于 ECC 空间。

    F2837xS 器件的闪存 API (F021_API_F2837xS_FPU32.lib)可在以下位置找到:
    \controlSUITE\device_support\F2837xS\V210\F2837xS_common\lib。

    F2837xS 器件的闪存 API 使用示例可在以下位置找到:
    controlSUITE\device_support\F2837xS\V210\F2837xS_Examples_CPU1\flash_programming

    如果您有任何疑问、请告诉我。

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vamsi、
    感谢您的回答。
    您是否会从闪存 API 中为我提供 Fapi_calculateEcc()的 C 源代码?
    我想在主设备(Burner)中实现它。
    谢谢~
    此致~
    XIN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    XIN、

    API 库中的 Fapi_calculateEcc()函数使用闪存包装程序 SECDED 逻辑来生成 ECC。 因此、它必须在目标上执行。

    为什么在使用 Fapi_issueProgrammingCommand()函数时不能使用 AutoEccGeneration 模式? 此模式将计算您提供的地址和64位数据的 ECC、并与闪存主阵列一起对 ECC 进行编程。

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

    您好、Vamsi、

    我将使用 AutoEccGeneration 模式对主存储器和相关 ECC 存储器进行编程。

    但我想验证主存储器和 ECC 存储器中的原始数据。

    因此、我应该计算 ECC 的钙化。

    谢谢~  

    此致~

    XIN

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

    XIN、

    我知道。  由于 API 库中的 Fapi_calculateEcc()函数使用 SECDED 逻辑来生成 ECC,因此它的源代码对您没有帮助。  相反、您可以使用附加函数计算给定地址和64位数据的 ECC。

    如果您有任何疑问、请告诉我。

    我会将其添加到常见问题解答 wiki 页面、以供其他人使用。

    谢谢、此致、

    Vamsi

    e2e.ti.com/.../ECC_5F00_calculationCode.docx

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

    您好、Vamsi、

    感谢你的帮助。

    我发现了另一个问题。

    Q1:使用 Fapi_issueProgrammingCommand()通过 Fapi_AutoGeneration 模式对闪存和闪存 ECC 进行编程

    对于参数 u16DataBufferSizeinBytes[in]:一个字节等于16位。

    对于参数 u16EccBufferSizeinBytes[in]:一个字节有多少位有效?

    Q2:使用 Fapi_issueProgrammingCommand()通过 Fapi_AutoGeneration 模式对闪存和闪存 ECC 进行编程

    扇区 A 和扇区 A 相关 ECC 无法编程。

    您会给出一些建议吗?

    Q3:使用 Fapi_issueProgrammingCommandForEccAddress()对 ECC 进行编程  

    对于参数 u8EccBufferSizeInBytes[in]:一个字节的 eqals 是否为8位?

    Q4:使用 Fapi_issueProgrammingCommandForEccAddress()对 ECC 进行编程

    无法对 SECTORA 关联的 ECC 进行编程。

    您会给出一些建议吗?

    谢谢~

    此致~

    XIN

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

    XIN、

    1)  

    u16DataBufferSizeInBytes ->数据缓冲区中16位字的数量

    u16EccBufferSizeInBytes -> ECC 缓冲区中8位字节的数量

    2) 2)对扇区 A 及其 ECC 进行编程时、您遇到了什么错误?  在进行编程之前、您是否检查过它是否被擦除?

    3) 3) F2837x 器件不支持 Fapi_issueProgrammingCommandForEccAddress()。  由于使用 AutoEccGeneration 模式进行编程,因此不需要 Fapi_issueProgrammingCommandForEccAddress()函数。  请参阅 此器件的闪存 API 参考指南、网址为 http://www.ti.com/lit/pdf/spnu630
     

    谢谢、此致、

    Vamsi   

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

    您好、Vamsi、

    项目2)

    我使用非空值对 sectora 进行编程。但回读值都是空白值(所有值)。我确定我在编程之前已经完成了扇区擦除和空白。

    除了 sectora 和 sectora-ECC 之外的其他扇区可以成功编程是一件奇怪的事情。为了验证它、我已经读取了包括主闪存和相关 ECC 在内的所有原始数据。结果是只有扇区 A 和相关 ECC 不能解决验证问题。  

    我不知道为什么?

    我在下面附加了有关如何操作 TMS320F28374的更多信息:

    谢谢~

    此致~

    XIN

    闪存 API:

    controlSUITE\device_support\F2837xS\V210\F2837xS_common\lib\f021_API_F2837xS_FPU32.lib

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

    XIN、

    您发送的快照中没有 EALLOW before program 函数。  您可以尝试 EALLOW 吗?

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    一切都很好。

    非常感谢。

    此致~

    XIN

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

    XIN、

    1) 1)您是否在组0和组1之间分别针对组0和组1闪存编程/擦除操作切换泵信号量?

    2) 2)您能否确认在对 Bank0扇区执行闪存操作之前调用 Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、UserConfigured_frequency)和 Fapi_setActiveFlashBank (Fapi_FlashBank0)函数?

    3) 3)您能否确认在对 BANK1扇区执行闪存操作之前调用 Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、UserConfiguredFrequency)和 Fapi_setActiveFlashBank (Fapi_FlashBank1)函数?

    请注意、每当您在闪存组之间切换以执行擦除/编程操作时、您必须使用上面显示的相应包装器/组号来调用上述函数。

    谢谢、此致、

    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vamsi、
    我找到了问题。
    当我忘记删除加载程序主帧中的擦除调试代码时、串行器 A 每次都会擦除。
    我很抱歉。
    非常感谢!
    此致~
    插孔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    XIN、

    很高兴应用程序在删除擦除调试代码后正在工作。

    我现在要关闭此主题。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

      我发现了另一个问题。

      请帮您检查。

      当我对0x78018-0x7801F (Bootctrl 区域)进行编程时、我收到错误代码:Fapi_Error_InvalidAddress (507)。但我认为程序地址没有任何错误。

      你有什么想法吗?

     谢谢~

     此致~

    XIN

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

    您需要使用0x7801C 地址对 BootCtrl 字段进行编程。

    请在 controlSUITE 中检查 blinky_for_DCSM 工程及其链接器命令文件。(controlSUITE\device_support\F2837xS\V2X\F2837xS_Examples_CPU1\blinky_and_DCSM)

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

    您好、Vamsi、

      您是否建议采用这种方式"Fapi_issueProgrammingCommand((INT32U*) devaddr、(uint8 *) p16data、4.0、0、Fapi_AutoEccGeneration)"或这种方式"Fapi_issueProgramming Command((INT32U*) devaddr、(uint8 *) p16data、8、0、AutoEccGeneration")进行编程?

      当64位数据都为1时、第一种方法可以绕过程序。

      当128位数据都为1时、第二种方法可以绕过程序。

      谢谢~

    此致~

    XIN

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

    如果所有8个字都可用、则最好使用8个字、因为这会缩短编程时间。

    如果只有4个字可用、则4个字更可取;这样、您可以保存其他4个字的空间以便以后使用。

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

    我想知道如何实现闪存读取。 它是否与 RAM 读取相似? 只需取消引用指针闪存读取就行了?
    您的即时响应将会很有帮助。

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

    Ajit、

    是的、它应该起作用。 如果您发现任何问题、请告诉我。

    谢谢、此致、
    Vamsi

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

    谢谢。 如果某个新线程不起作用、我将打开该线程。

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

    尊敬的 Vamsi:

    也许这很重要、但我花了很多时间尝试了解如何从闪存中读取数据。

    您能否在这里举一个示例、说明如何访问存储器来读取写入闪存的给定数据? 好极了。  

    非常感谢。

    Andrea

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

    安德烈

    该线程经过多个阶段、因此如果我们进一步添加、其他人很难从该线程中学习。  

    请按照我先前在该主题中向 Ajit 建议的方式打开一个新主题。  

    谢谢、此致、
    Vamsi