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.

[参考译文] TMS570LS0432:FEE 驱动器在调用其 FEE 写入 API 之前无法处理活动组/FMAC 未被设定为组7。

Guru**** 2618835 points

Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/779219/tms570ls0432-fee-driver-cannot-handle-active-bank-fmac-not-set-to-bank-7-before-calling-its-fee-write-api

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGEN

尊敬的 TI FEE 团队:

如果数据被连续写入常规闪存组0和 FEE 闪存组7、FEE API 的 TI_FEE WriteAsync ()将无法处理写入操作、因为 FMAC 不再被设置为组7。 FEE 驱动器是否希望其调用方将 FMAC 设置回组7? 除了 FMAC、是否还有其他在 TI_FEE ()之后无法修改的闪存寄存器?

如果在调用 TI_fee_WriteAssync ()时 FMAC 被设置为组0、即使闪存写入操作没有执行、FEE 的作业结果也返回 job_OK。 FEE 驱动器中是否存在其他代码路径无法设置正确的工作结果?

FEE Driver 版本1.19.04是正在使用的内容。

谢谢!

Kevin。

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

    如果在应用程序中使用 FEE、并且如果在 FEE 驱动器初始化后另一个组被激活、则应用程序需要在完成组0/1上的操作后将 FEE 组设定为激活。 FEE Init API 还启用 SECDED 并启用读取全部1的 OK。

    TI_fee_WriteAsync ()假定 FEE bank 处于活动状态、这就是它返回 job_OK 的原因。 我们验证写入是否成功的方法是使用 FEE 读取 API 读回数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vishwanath,

    当前 FEE 驱动器的唯一假设是 FEE bank 是否处于活动状态? 如果有其他假设、您能否提供一个列表?

    至于写操作、是否建议对所有收费写操作进行回读、而不是根据作业结果?

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

    FEE 驱动器也会执行以下设置:
    启用 SECDED
    -启用读取全部1的 OK。
    -将活动组设置为7。
    启用所有 EEPROM 扇区。

    是的、请使用读取 API 来验证写入是否成功。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vishwanath,

    这是可接受的解决方案吗? 在 ti_fee_util.c 函数 TI_FeeInternal_WriteDataF021 ()中、我添加了代码来设置活动组:

            FEE 写入地址= TI_FEE 全局变量[u8EEPIndex].FEE 写入地址;                          
            /*SAFETYMCUSW 45 D MR:21.1 "原因- FEE _pu8Data 被分配一个值、它不能为 NULL。"*/
            /*SAFETYMCUSW 440 S MR:11.3. "原因- 此处需要铸件。*/
            if (NULL_PTR!= TI_FAULT_GlobalVariables[u8EEPIndex].FAULT_pu8Data)
            {
                pu8Data = TI_fee_GlobalVariables[u8EEPIndex].fee_pu8Data;
                TI_fee_GlobalVariables[u8EEPIndex].fee_pu8Data += u8ActualWriteSize;
            }             
            TI_fee_GlobalVariables[u8EEPIndex].fee_oWriteAddress += u8ActualWriteSize;
        }         
    +
    +/*    为 FEE 设置活动闪存组和扇区*/
    +    (空) Fapi_setActiveFlashBank (Device_FlashDevice.Device_BANKINFO[FEE:Bank].Device_Core);
    +    (void) Fapi_enableEpromBankSecors (FEE 启用扇区31_00、FEE 启用扇区63_32);
    +
        /*SAFETYMCUSW 114 S MR:12.6、13.2 "原因- Even尽管 表达式不是布尔值、  
         我们检查函数返回值。"*/
        /*SAFETYMCUSW 184 S LDRA 添加空格会导致此规则失败。"*/    
        /*SAFETYMCUSW 114 S MR:12.6、13.2 "原因- LDRA 不理解宏  
        FAPI_CHECK_FSM_READY_BUSY。"*/
        /*SAFETYMCUSW 440 S MR:11.3. "原因- ( pFapi_FmcRegisterType )( 0xFFF87000U ))铸造  
         在 F021库中完成。*/
        if (fapi_check_FSM_ready_busy = fapi_Status_FsmReady)
        {         
            /*SAFETYMCUSW 184 S LDRA 添加空格会导致此规则失败。"*/
    您是否看到任何未涵盖的临界情况? 调用  TI_FeeInternal_EnableRequiredFlashSector ()与  Fapi_enableEpromBankSecitors ()是否有任何好处
    谢谢、
    Kevin。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    我不建议在这里这样做,因为在写入/复制操作期间会定期调用 TI_FeeInternal_WriteDataF021 ()。  我宁愿在组0/1被设置为有效时执行此操作、并且在对其完成所需的操作后、将组7设置为有效并启用所有 EEPROM 扇区。 您不需要使用   TI_FeeInternal_EnableRequiredFlashSector ()。

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

    根据 F021建议的程序流程、应在发出 FLASH 命令之前设置组和扇区。 您对 TI_FeeInternal_WriteDataF021 ()是否被定期调用有何顾虑、因为我建议的是遵循 F021的建议闪存序列。

    我正在寻找一个可以包含在 FEE 驱动器中的修复方法、因为应用应该可以免费使用任何非 FEE 扇区。 您还有其他建议可以单独直接应用于 FEE 驱动器吗?

    如果必须恢复收费银行/部门、您能否提供已记录此要求的更新收费用户指南?

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

    如果必须包含在 FEE 驱动器中、则您的实施是正确的。 我担心的是、每次写入时都会重复出现一段代码。 您可以进行一个小实验来写入"x"个字节、而不进行修复、并查看是否有写入执行时间的变化。 如果您的应用程序可以吸收额外的执行时间、则更改是可以的。

    我提出了内部请求单、并将更新用户指南以记录此情况。 下一个 HALCoGen 版本中将提供更新的用户指南。