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.

[参考译文] RM48L952:收费软件

Guru**** 2908170 points

Other Parts Discussed in Thread: RM48L952, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1638335/rm48l952-fee-software

部件号: RM48L952
主题中讨论的其他器件: HALCOGEN

您好:

 

我将 RM48L952 器件用于应用、我们使用 HALCoGen 04.07.01。

我们需要使用费用库、我们有一些问题。

首先、我们拥有的费用文档是费用 TI 驱动程序用户指南中的 v1.12、即根据修订历史记录的软件版本 1.19.01、但我们来自 halcogen 的文件的软件版本为 1.19.04。

在哪里可以找到付费 TI 驱动程序的软件发布说明的最后文档版本、以便我能够获得 适合我使用的准确文档?

 

此外、在用户指南中、对我来说、工作流程过于通用、在同步读取或写入的情况下不清晰。 我无法真正理解同步/异步 API 工作流的不同之处。

例如、在同步写入之后、我们是否需要池化 GetJobStatus? 似乎可以报告未决问题、而它是“同心协力的“。 您能否详细介绍一下同步 API 的工作原理? (与异步比较)

 

感谢你的帮助

Damien。

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

    您好:

    我的第一个问题非常普遍、但实际上我面临着与同步读取、初始化和电源故障安全管理相关的问题。
    低于我的费用配置。
    我在使用第 7 组 EEPROM 的 RM48L952 芯片上工作。
    我有 2 个虚拟扇区、每个扇区 2 个闪存扇区 (16kB)、因此 VS_1 配置扇区 0 和 1、VS_2 配置扇区 2 和 3。
    每个 VirtualSector 大小为 32 KB。
    我总共配置了 52 个数据块、具有几个不同的数据大小、但具体而言、有一个数据的大小为 0x4380(17280 字节)。
    通过这种配置、这意味着每次我将写入大数据(称为 LOG_DATA)时、这将引起虚拟扇区的变化、因为没有足够的可用空间让 LOG_DATA 在同一虚拟扇区中有两次 (2 * 0x4380 大于 32KB)


    当我进行一些 电源故障测试时、 我可以在我的 2 个虚拟扇区上遇到以下情况。 (我以 zip 文件中包含的闪存内容为例提供、这些是来自器件存储器的 bin 数据)。
    VS_1 设置为 EmptyVirtualSector、VS_2 设置为 ActiveVirtualSector。 因此、从 VS 状态来看、Pont of View 似乎一切正常。
    但在 Fee_Init 调用之后、我们可以看到 TI_BAD.Variables 的最后两个 FEE_au16BlockOffset ([50]和[51]) 仍设置为 Fee_Global。
    在此阶段、Fee_Init 完成而没有发出错误通知。

    然后、我尝试使用从费用中读取的数据初始化我的所有应用数据(使用 TI_FIRM.Sync Fee_Read 调用)、因此我基本上会执行一个 for 循环来读取所有费用数据。
    当我处理 LOG_DATA 时、此调用最终会出现 DATA_ABORT 异常。
    这是我真正的阻断问题。

    分析后、发生数据中止是因为我尝试使用针对 RM48L952(从 0xF020_0000 到 F020_FFFF)在采用 FlashBank7 之外实现的情况下从 0xF0210000 读取数据。
    这似乎是 TI_Sync.Sync Fee_Read(以及 TI_SyncFunction Fee_Main)中以下部分的库内存在的一个问题:

                   /*读取块的完整数据*/
                  while ((Fee_Global Size>0U))                   
                  {                
                    /*SAFETYMCUSW 45 D Mr:21.1 “原因 — 空指针检查在 ti_fee_read.“*/中完成
                    *TI_EEPIndentaries[u8EEPIndex].fee_pu8ReadDataBuffer=*TI_EEPIndents[u8EEPIndex].fee_pu8ReadAddress; Fee_Global Fee_Global
                     
                    if (TI_DATA.Variables[u8EEPIndex].fee_pu8ReadDataBuffer Fee_Global!= NULL_ptr)
                    {
                      /*SAFETYMCUSW 567 S Mr:17.1,17.4 “原因 — 指针有必要在这里。“*/  
                      TI_DataVariables[u8EEPIndex].fee_pu8ReadDataBuffer++ Fee_Global;              
                    }                    
                    #if (TI_FE_CHECK_BANK7_access == std_on)
                    if ((TI_LINUX.Variables[u8EEPIndex].fee_pu8ReadAddress >(uint8 *)、Device_Bank、Info[0]. Device_Sector、Info[0]. Device_Sector、Device_Flash、Fee_Global、StartAddress)
                      &&(TI_Devices[u8EEPIndex].fee_pu8ReadAddress Fee_Global <(uint8 *) Device_Flash、Device.Device.Devices.Info[0].Data[DEVICE_BANK_MAX_NUMBER_OF_Sectors-1U].StartAddress+ Device_Bank。Device_Sector Device_Sector
                        Device_Flash Device_Sector、Device、Device_Bank、Device_Sector、Info[DEVICE_BANK_MAX_NUMBER_OF_Sectors-1U].Length))
                    {
                      if (TI_TCH Fee_Global 变量[u8EEPIndex].fee_pu8ReadAddress!= NULL_ptr)
                      {
                        /*SAFETYMCUSW 567 S Mr:17.1,17.4 “原因 — 指针有必要在这里。“*/  
                        TI_PDF Fee_Global 变量[u8EEPIndex].fee_pu8ReadAddress++;              
                      }
                      Fee_Global Size--;    
                    }
                    暴露
                    {
                      /*地址超出 bank7 范围。 重置块大小、以便不发生 furthur 读取*/
                      Fee_Global Size = 0U;
                      TI_JobResult[u8EEPIndex].fee_u16JobResult Fee_Global = Job_Failed;
                    }


    我们可以看到、在 TI_Variables[u8EEPIndex].fee_pu8ReadAddress 上完成了一个测试 Fee_Global 以检查正确的范围、如果测试正常、则为 TI_TEST.Variables[u8EEPIndex].fee_pu8ReadAddress Fee_Global
    递增、然后在下一次循环开始时读取数据。 如果地址设置为 0xF020_FFFF、则测试正常、值递增到 0xF020_1000 此时会读取数据、因此会读取 DATA_ABORT。

    因此、此处的测试不正确(应该更像–1)。

    所以、好的、这对我来说是个问题、我不知道之前是否报告过这种情况。
    修复了 TI_SMIS.Sync Fee_Read 将报告 JOB_FAILED 的问题、这会更好。

    但是、这对我来说还不是结束、因为我真正的问题是、在这种 EEPROM 情况下、我有 2 个具有 0x0BAD 偏移的最后一个块、怎么可能呢? 如何从这种情况中恢复和,最重要的是如何避免在这种情况下。
    我想根本原因是由于 VS_2 中的错误数据导致混杂、这被标记为有效。

    我目前尽量详细、如果您需要更多信息和调试会话、请免费与我联系。

    感谢你的帮助。

    Damien

    e2e.ti.com/.../0435.FEE.zip

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

    尊敬的 Damien:

    您已正确识别 TI_Fee_ReadSync 函数中的边界检查问题。

    根本原因:0x0BAD 块偏移

    0x0BAD Fee_au16BlockOffset[50] 和中的值 [51] 表示 在中未找到这些块 Fee_Init()。 这是核心问题。

    为什么会发生这种情况:

    • 在写入大型 LOG_DATA(17280 字节)时发生电源故障时、虚拟扇区切换被中断
    • VS_2 被标记为 Active、但最后两个数据块不完整或损坏
    • 在初始化过程中、收费库无法找到块 50 和 51 的有效标题

    恢复和预防策略:

    立即恢复:

    1. 使损坏的数据失效:在尝试读取之前、请检查是否 Fee_au16BlockOffset[blockIndex] == 0x0BAD
    2. 使用默认值:对于返回的块 0x0BAD、使用应用程序默认值、而不是从费用中读取
    3. 重写有效数据:检测到后、立即将有效数据写入这些块

    --
    此致、
    Jagadish。

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

    您好 Jagadish、

    感谢您的答复。

    问题、开关中断为什么会导致错误?

    根据用户手册、应管理这种情况(§4.12 电源故障行为)。 根据我的说法、如果 VS_2 未完全就绪/无效、则不应设置为活动状态。 在 VS_2 准备就绪且有效之前、前一个有效的 VS_1 仍应有效。

    最坏的情况应该只会丢失引起交换机的最后一个数据 (LOG_DATA) 的写入、如果交换机无法正确完成、则应保持在前一个 ACTIVE VS 上。

    关于坏块偏移的管理、此检查不应由收费库管理? 因为,你说的是,我们应该检查费用库的内部变量来检测坏块偏移。 例如、读取 API 不应允许读取偏移集 A bad 或返回错误?

    在您的回答中、您没有详细介绍预防策略、可以请您详细介绍一下吗?

    对于立即恢复:

    1) 如果前一个数据+标头正在接收 0xBAD 数据字节、则 0xBAD 不能是有效的偏移值? (如果配置不当)

    感谢您帮助我们更好地了解此费用库的工作方式和应如何处理。

    BR

    Damien

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

    尊敬的 Damien:

    根据用户手册、应管理这种情况(§4.12 电源故障行为)。 根据我的说法、如果 VS_2 未完全就绪/无效、则不应设置为活动状态。 前一个活动的 VS_1 仍应处于活动状态、直到 VS_2 准备就绪且有效。

    根据用户手册中的§4.12 电源故障行为、收费库应在虚拟扇区切换期间正常处理电源故障。

    但是、观察您的行为似乎会发现切换存在问题。 遗憾的是、没有一个积极的团队负责本模块的工作。

    我想知道您的问题是否每次都能重现? 如果您能够这样做、我们应该设置一个实时调试会话、以便从我结束时立即验证问题是否活跃。

    --
    此致、
    Jagadish。

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

    您好 Jagadish、

    我想知道的是、您的问题每次都能重现吗?

    是的、使用电源开/关按钮时很容易重现此问题。

    我们可以尝试进行实时调试会话、请直接通过电子邮件与我联系、以便根据我们的日历组织会议。

    感谢你的帮助。

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

    我给你发了一封邮件。