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 Blank check bank1扇区15 over run

Guru**** 2529560 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177833/launchxl-f280049c-fapi-blank-check-bank1-sector-15-over-runs

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:MOTORWARE

您好!

我看到问题 Fapi 空白检查 bank1扇区15始终返回非空白错误(655539或0x09FFFF)报告0x0A0000、但从未擦除。

无论输入的总数量长度是多少、如果扇区中的字节只有0x0长度返回 Fapi_Status_Success。 输入长度减少1 (0x000FFF)会返回相同的错误。

因此、它返回 Fapi_Status_Success、内存实际上是所有 FF 的最大值、不包括0x00A0000 __。

长度为0x000FEA 或0x001000-16的字 返回相同的非空白错误、但似乎只有在扇区15上。

调用扇区长度是否有问题?

此读取结果是否超出内存勘误咨询的末尾?  

/*检查擦除的闪存起始扇区的长度是否为空白*/
oReturnCheck = Fapi_doBlankCheck ((UINT32 *) 0x09F000、0x001000、&oFlashStatusWord);
while (fapi_checkFsmForReady()!= fapi_Status_FsmReady){}

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

    您好!

    主题专家将于星期四结束工作。 请在周五回复他的办公室

    此致、Santosh

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

    您好!

    空白检查函数传递的长度应为32位字的数量、而不是16位字。  您能否检查您使用的长度是多少?

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    文本表示输入扇区长度、而不是字数。 其他扇区12、13、14  的长度为0x001000、不会将地址过冲到0x00A0000中。 此外、空白复选框没有提到长度只能用于一个扇区。 通常会发出一条 FAPI 命令、其中扇区起始地址和空白检查范围是组中任意数量的扇区。 除了第1列气缸组第15部分之外、它似乎可以毫无差错地工作。

    示例0x004000应该从输入的扇区地址开始空白检查4个扇区、并且不要超过扇区15的长度。

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

    您好!

    让我回顾一下指南并返回给您。

    谢谢、此致、
    Vamsi

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

    您好!

    请参阅以下取自 F280049闪存 API 指南的快照: https://www.ti.com/lit/pdf/spnu628 

    u32Length 应该是32位字。

    请注意:我不在办公室;我们的团队将为您进行监控。   

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    然而、闪存扇区被配置为4096字节、而不是8192字节。

    扇区寻址空白检查应通过 ui32值处理相对于闪存组 CMD 文件配置的扇区范围、对吧?  同样、只有扇区15导致错误。 扇区12、13、14空白检查、无错误。

    [引用 userid="16728" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177833/launchxl-f280049c-fapi-blank-check-bank1-sector-15-over-runs/4440182 #4440182"] u32Length 应采用32位字[/引用]

    闪存组扇区(f280049_cpu_in_flash.cmd)是否未定义为32位长度?

     "空白检查"字词 FAPI 是否无法访问或用于存储数据? 扇区空白检查跨越闪存组0和1是否不正确?

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

    您好、GI、

    扇区大小应为32位长度。 您是否引用了特定或通用的链接器 cmd 文件(f280049_cpu_in_flash.cmd)? 我需要更多时间来研究这个问题。

    谢谢、

    查尔斯

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

    您好、Charles、

    [引用 userid="531473" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177833/launchxl-f280049c-fapi-blank-check-bank1-sector-15-over-runs/4442759 #4442759"]扇区大小应为32位长度。

    如何将4096扇区大小(0x001000)变为 uint32_t 而不增加更大的扇区大小? 事实上、4096字节扇区长度适合 uint16_t、而不是 uint32_t uint32_t 可以表示(整个组的长度、而不是单个区域)、例如组0/1空白检查、而不是任一组的单个扇区。 然而,这在除15个部门以外的任何其他部门也是如此。

    由于15之后没有更多的闪存扇区、也许空白校验代码需要为组0/1扇区15减去1个字。 文本中没有空白复选标记、必须 对每个扇区发出调用、只输入地址长度来指示扇区的范围。 单次调用从扇区12开始计数到扇区15中最后一个 DWORD 值后、在 0x00A0000字上结束时也会引起异常、该字不会被擦除。  

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

    您好!

    下面函数调用中的第二个参数应为0x800、而不是0x1000。  此函数需要您要检查空白状态的32位字的数量。

    oReturnCheck = Fapi_doBlankCheck ((UINT32 *) 0x09F000、0x001000、&oFlashStatusWord);

    请尝试0x800、并告知我们它是如何运行的。

    谢谢、此致、

    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="16728" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177833/launchxl-f280049c-fapi-blank-check-bank1-sector-15-over-runs/4453882 #4453882"]请尝试0x800,并告知我们它是如何实现的。

    您会发现、在 CMD 文件中、64位闪存对齐时、0x800仅为2048个32位字、而 x49c Fapi 扇区为4096个32位字。 x49c 闪存扇区不是16位 R/W、对于空白检查长度、可能可以接受2048长度0x800。 如果您确信远程操作是真实的、那么 FAPI 可能是为与 x49c 不同的64位闪存组编写的。 为什么32位 MCU 类具有16位闪存扇区是要问 的问题...  

    同样 、其他三个扇区(12-14)的预期长度为0x1000、为4096个32位字。 扇区15在 FAPI 重写中存在问题、即使通过0xFFE 长度也会覆盖扇区的4096个字。 对于扇区15、我们必须设置0x0的长度、

    似乎还有其他错误、例如使用 DCSM 组1和2闪存扇区进行编程异步扇区12-15证明不安全、但 FAPI 不会将任何数据写入64位对齐的闪存扇区。 即使确认为32位空白检查和 CCS 调试内存浏览器(0xFFFF.FFFF)。  我对闪存进行编程的第一个扇区12是0x009C000、也是检查的空白0x1000长度。   

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

    您好、GI、

    每个 F280049C 闪存扇区都有0x1000 16位字或0x800 32位字。

    如果您询问 闪存 API 读取函数为何要求32位字长:为了加快读取验证、客户请求32位读取实现而不是16位读取。  如果需要16位读取、客户可以实现它。

    如果您想在会议中进行讨论以帮助澄清您的问题、请告诉我。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    您似乎暗示闪存只有16位可由 FAPI 访问  

    这似乎并不正确、因为 FAPI 需要针对闪存 R/W 进行64位闪存对齐、而针对 OTP 进行128位对齐。 同样、"空白"会在15个扇区以外的任何其他扇区中检查4096个字节、而不会引发异常、您如何解释这一点?

    然而 TRM 图3.17意味着64位宽 ECC 校正数据直接来自闪存组0和1。

    这一点无关紧要、因为 FAPI 程序命令(自动 ECC 模式) 存在 int16_t 数据缓冲区大小问题、无法通过 FSM 写入浮点值。 C 语言运算符 C2000编译器无法识别浮点缓冲器数组中的所有整数。 即使小数点右侧存在整数、(size_of)运算符也会在小数点停止浮点十六进制字符串的输入。 需要对 C 语言运算符进行处理,以便它们与 FPU 一起工作,至少(size_of)和[(float32_t) array[1]={0.0}]应该能够读取小数点右侧的所有整数。 内联 strlen()也在小数点停止,我在自定义 itoa()中添加了小数点识别,似乎忽略了 CCS 调试小数点,就好像它实际上不存在一样。  

    TRM 图3.17显示了校正后的 ECC 数据为64位宽、图3.16显示了16位闪存/ OTP 块 似乎打印错误! 当今的问题是、为什么在实际中、32位 CPU 将具有32位指令提取瓶颈 C 代码、进入16位数据总线、连接到 R/W 闪存? 如果在 MCU 数十年的使用寿命内仅需要更新某个扇区内的特定数据、那么这甚至不能构成逻辑。

    TRM 状态闪存128位宽或闪存组0上64位对齐和组1上64位对齐。 如果闪存扇区数据总线宽度仅为16位宽、那么蓝色的语句是否会误导您?  

    3.12.1特性
    闪存存储器的特性包括:
    •最多两个闪存组(组0和组1)(有关数字和大小、请参阅特定于器件的数据手册
    闪存组的说明)
    •一个 FMC 控制多达两个闪存组
    •128位(组宽)可与 ECC 一起一次编程
    •多个扇区提供了保留部分扇区编程且仅擦除特定扇区的选项
    •用于配置的用户可编程 OTP 位置(在用户可配置 DCSM OTP 中、也称为用户 OTP)
    安全、OTP 引导模式和引导模式选择引脚(如果您无法使用出厂默认引导模式
    选择引脚)
    •闪存泵由两个组共享
    •使用 FMC 中的代码预取机制和数据高速缓存增强了性能
    •可配置的等待状态、为给定的执行速度提供最佳性能
    •安全特性:
    –FMC 支持 SECDED 单错校正和双错检测
    –地址位包含在 ECC 中
    –检查 ECC 逻辑运行状况的测试模式
    •支持闪存组和闪存泵的低功耗模式、以实现节能
    •内置电源模式控制逻辑
    •FMC 中的集成闪存编程/擦除状态机(FSM)

    示例 将 FB0或 FB1除以65、536/16 = 4096扇区长度、如存储器分配所示。 FAPI 必须能够保存 FPU 中的(float32_t 或 float)数据、否则对于为电动汽车行业保存电机控制参数浮点数据而言、它是无用的 API。 电机控制 SDK 4.01通用电机控制 SDK 专为使用 FPU float32_t 参数而设计。 FAPI 程序命令输入数据缓冲器(uint16_t)是基元、需要从2017年最新更新版本1.56.01.00演变。 我之所以需要 FAPI 来远程更新单个特定电机参数、而不是整个固件。 TI 与旧版 Motorware MCU 不同、除了 FAPI 之外、没有其他方法可以写入32位浮点 ECC 参数数据。

    器件闪存 CMD 文件中配置了扇区12-15、两个组为65、534-16位、用于勘误建议。

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

    您好、GI、

    您最初在这篇文章中的问题是空白检查: 扇区15是最后一个扇区、因此、如果闪存 API 在扇区15的最后一个地址之后读取存储器、它将不会获得有效数据(并且可能不是空白)。  因此、我建议不要发送跨越组最后地址的长度。  对于其他扇区、即使您越过扇区末端、仍有有效的闪存存储器、因此可以正常工作。

    关于64位校正数据: 每个64位对齐数据都有8位 ECC。  当 CPU 从闪存中的任何地址进行取/读取时、将返回128位(对齐)数据+相应的16位 ECC。  其中包含两组64位数据及其相应的8位 ECC。  但是、CPU 将仅使用来自该128位的所需数据量(基于操作码的代码或数据)。   

    C28x 器件中的闪存/RAM 是16位寻址(每16位的地址增量)-因此、TRM 图像显示的是16位闪存。   

    关于您讨论的其余项目、我想在电话中进行讨论、以便更好地理解。  请告诉我您方便的日期/时间。

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="16728" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177833/launchxl-f280049c-fapi-blank-check-bank1-sector-15-over-runs/4457785 #4457785"]对于其他扇区,即使您跨越扇区末端,仍有有效的闪存,因此它可以正常工作。

    好的、这对我来说很有意义、现在你详细阐述了这样的问题、显然仍然是一个错误、因为4096字节可以适应 Iint16_t 地址大小。  

    缓冲区大小错误问题似乎是浮点值中 C 运算符(点)的编译器问题、似乎会使 FAPI 在其轨道中停止死区。 它们都是以 float32_t 值键入的、但如果 driverlib types.h 中存在 float16_t 类型、则应将其转换为 fit float16_t  

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

    您好、GI、

    您是否说您能够为无符号整型变量(16位)分配4096值?  你说这是一个错误吗?  如果我理解正确、请告诉我。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    是0x001000长度为4096、没有编译器错误。 如您确认的那样、x49c 扇区只能被空白选中为2048个字节。 然而、x49扇区在2021年为4096字节。 我现在放置0x800、似乎是2017年上次更新 FAPI 时、C2000闪存扇区长度只有2048字节。 我认为这也可能会导致32个块4096长度扇区的 FAPI 编程 C 代码逻辑出现问题。

    我更改为使用指针来指示要写入的16DataBuffer 块的 FAPI。 在 ARM cortex 代码中、可以检查 SYSCTRL 寄存器中指向要返回的开始闪存扇区块的闪存块地址。 奇怪的是、C2000 SYSCTRL 寄存器似乎不以相同的方式监控闪存组块地址。   

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

    您好、GI、

    我将在几天内回顾并返回给您。

    谢谢、此致、

    Vamsi

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

    好的、CCS 调试固件加载下面可能有助于解释空白检查问题。 请注意、0xE38扇区长度远高于2048字节。

    C28xx_CPU1:擦除闪存组0、扇区0
    C28xx_CPU1:已在当前数据块的末尾缓冲数据以进行64位对齐写入。
    C28xx_CPU1:写入闪存@长度为0x000003fe 的地址0x00080004 (第0页)
    C28xx_CPU1:已在当前数据块的末尾缓冲数据以进行64位对齐写入。
    C28xx_CPU1:--Verifying Flash @ Address 0x00080004 of Length 0x000003FC
    C28xx_CPU1:写入闪存@地址0x00080404、长度0x00003ff8 (页0)
    C28xx_CPU1:擦除闪存组0、扇区1
    C28xx_CPU1:擦除闪存组0、扇区2
    C28xx_CPU1:擦除闪存组0、扇区3
    C28xx_CPU1:擦除闪存组0、扇区4
    C28xx_CPU1:-验证闪存@长度为0x00003FF8的地址0x00080404
    C28xx_CPU1:写入闪存@地址0x000843fc、长度0x00000117 (页0)
    C28xx_CPU1:已在当前数据块的末尾缓冲数据以进行64位对齐写入。
    C28xx_CPU1:-验证闪存@地址0x000843FC、长度为0x00000114
    C28xx_CPU1:写入闪存@长度为0x00000e38的地址0x00084514 (第0页)
    C28xx_CPU1:擦除闪存组0、扇区5
    C28xx_CPU1:-验证闪存@长度为0x00000E38的地址0x00084514

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

    您好、GI、

    我不明白这里长度0xE38有什么问题。  该地址+长度仍在有效闪存地址范围内。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    确切地说,FAPI 空白检查需要配置>2048字节(0x800),因为闪存扇区长度确认>3640字节长度。 请注意、4个扇区为0x3FF8长度16、376字节或4个扇区、每个4094字节。 FAPI 在扇区长度空白检查算法中有一个错误、或者 CRC 错误被一个16位字溢出。 我还在所有4个扇区上测试了空白0x00FFE、因此过冲问题看起来更复杂。  

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

    您好、GI、

    我认为我们需要召开一次会议来进一步讨论这一点,以便我们能够更好地理解这些问题。  请告诉我您的时区、我们可以召开相应的会议。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    x49c 技术简介(SPRT727A–2017年3月–2018年1月修订)第3页显示了64k/16个闪存组。 我只是假设闪存可寻址32位、但这与 FAPI 无关、x49c 中的0x800空白检查长度不正确。 在 FAPI 初始化之后、我没有运行任何 MCU 类 ID 调用、想知道它是否与闪存扇区长度错误有关。

    CCS 内存分配工具是完美的、也证实了闪存组为64k/16。 因此、一个扇区中0x800范围的 FAPI 限制在物理上是错误的、即使是16位可寻址存储器也是如此! 您可以调用与 TX 相同的区域、但这不会改变我对 FAPI 扇区空白检查中的错误的看法。 没有支持逻辑寻址方案的 FAPI 文档、也没有显示用于将物理闪存块地址范围转换为逻辑闪存块地址范围的任何公式。 如果是这样、这肯定会有帮助、因为如果没有图示或其他支持帮助、我通常不会深入探讨。

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

    您好、GI、

    我认为此处的闪存读取接口和闪存编程接口之间存在混淆。

    正如我提到过的、我可以参加会议来进一步讨论这一点、并了解您提到的错误。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    它现在正在使用0x004000或0x4000或 perSector 0x1000、在我的末尾的空白检查错误测试中似乎是一个错误

    它正在检查 FSM 状态 oReturnCheck != 0,然后 DID (否则,如果{oReturnCheck} 没有调用 Fapi_getFsmStatus(),则检查 FSM 状态。 它通常返回错误的空白检查状态 OK。 我后来在 FAPI 初始化链之间添加了几个 SYSCTL_DELAY (60)、但没有停止可感知的过运行错误扇区15。

    感谢您对本问题的看法