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.

[参考译文] LAUNCHXL-F280049C:FAPI 数据缓冲指针序列发生器停止工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1505075/launchxl-f280049c-fapi-data-buffering-pointer-sequencer-stopped-working

器件型号:LAUNCHXL-F280049C

工具/软件:

大家好、

我们一段时间前开始测试 FAPI、当用于写入4096个扇区的256KB 闪存块的输入缓冲区中的结构成员数据类型发生变化时、数据缓冲区指针停止问题。  

在添加 WA 调用来停止 Fapi\初始化随机故障 CPU、并授予 Flip DCSM 存储体1闪存访问权限以进行闪存存储体1写入之后。 现在、FAP 拒绝从与某些有效的代码非常相似的代码中将数据写入扇区地址、但其行为充其量也非常糟糕。

FapiAPI v1.56是否有任何调试修复、以便它处理实际的结构成员数据、而无需循环馈送数据地址输入读取数据缓冲区? 注意下面的两个捕获内容。

如果写入四个16位字64位段设置为对齐4、则从表面上看、提供给 Fapi_写入 地址的起始地址应自动递增指向用户数据缓冲区的指针、而无需 for 循环索引处理程序。 我们发现、当结构成员传递到写入闪存函数标头时、闪存写入能力糟糕地处理缓冲的不同数据类型。 或放置在函数中的缓冲区、用于将 Fapi_地址 数据写入给定起始地址处的256KB 闪存块。

一些问题似乎与 C2000编译器拒绝将结构成员数据类型(参数数据)链接到具有固定类型指针的缓冲区有关、例如{ ((uint16 *)&userParams) }。 当它链接复制缓冲区单元时、例如{(uint16 *) ReadBuffer[144])} Fapidata buffer 指针时、CCS v12.8.1调试显示缓冲区内容只是每个单元格中的地址、而不是结构成员数据。 从结构成员数据指针缓冲名称&userParams 复制的原始用户数据。  

也许 是由编译器处理的一个简单任务。 然而,它拒绝将各种数据类型的结构成员数据复制到许多数组单元的缓冲区的固定指针中,所有这些都以整数形式结束。 或序列将缓冲区长度的写入地址提供给 Fapi_写入 地址数据。 如果针对不同的数据类型使用 Fapi_扼 流圈、则提供缓冲区长度的意义是什么? FAPI 可能不用于将用户数据存储到闪存扇区中、而主要是针对固件更新进行测试?

话虽如此、为什么 TI 没有为 C2000 MCU 类开发某种方法将用户数据写入所有示例中使用的结构成员数据指针的闪存? 不管 CCS、v7.2、v9.3还是 C2000编译器的版本如何、指向缓冲区的固定数据指针似乎都失败。 复制到 固定数据类型指向的用户定义缓冲区中的数据对于存储结构成员数据毫无用处。

   

// USER_Params float32_t sizeof = 286/2=144 (32bit) variables
// Note: Since the TMS320C28x float is 32bits,
// (to make it separately addressable), a byte is also 16 bits.
// This yields results one may not expect.

uint16_t ui16NumParameters = (sizeof(USER_Params));

float32_t * FapiUserParams[145]; //FAPI_FLASH_BUFFER

// Get a pointer to the latest parameter block in flash.
//
pucBuffer = FlashPBGet();

//
// See if a parameter block was found in flash.
//
if(pucBuffer || pucBuffer == NULL)
{
    //
    // Loop through stored words of Fapi parameter block to copy its contents
    // from flash to SRAM. Roughly 144 parameters
    //
    for(ulIdx = 0; ulIdx < ui16NumParameters / 2; ulIdx++)
    {
        if(!bGetFapiReadData)
        {
            /* buffer stuct member user data */
            *FapiUserParams[ulIdx] =
                   ((float32_t  *)&userParams_M1)[ulIdx];
        }
        /* Get Fapi flash block data */
        if(bGetFapiReadData)
        {
            ((uint8_t *)&userParams_M1)[ulIdx] =
                ((uint8_t *)pucBuffer)[ulIdx];
        }
    }
}

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

    您好、

    您能否尝试  在128位边界处向结构体添加 packed 属性或对齐结构体、看看问题是否仍然存在?

    此致、

    Rajeshwary

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

    嗨、Rajeshwary、

    最近遇到了一个压缩属性宏、但如果提供了任何解释、则没有太多。 定义了 FAPI 闪存扇区 CMD 段、对齐(4)、16位字、64位写入、一次4个字。 FAPI 仅根据文档写入 OTP 数据的128位对齐。 猜测在所有 FSM 信标处都不会发生数据写入、因此会出现 DCSM 扇区安全问题。 并且在过去几天内将相同的代码迁移到全新的 x39c LaunchPad。 没有时间检查 FAPI 写入数据或没有,去直到5-16和感谢您的建议...  

    是否有适用于 x39c 的 FAPI 下载? 未通过 REX 在所有 CCS 中找到任何链接   

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

    您好、

       有关更多详细信息、请参阅 C2000ware 中的闪存 API 示例和闪存 API 用户指南