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.

[参考译文] TMS570LS1224:特定于 FEE 的问题

Guru**** 2536320 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260954/tms570ls1224-fee-specific-questions

器件型号:TMS570LS1224

你好。 上次我问费用,得到了答案,我看到它工作,但我有几个问题。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1256250/tms570ls1224-questions-about-the-fee-concept

条件1:将4个虚拟扇区(VS)设置为16KB。
条件2:设置为最大容量、以每个块8个字节的倍数为单位

VS 接头
(字节)

标头(字节)

有效载荷(字节)
32 块1 24 992
Block2 24 992
块3 24 992
块4 24 992
块5 24 992
块6 24 992
块7 24 992
块8 24 992
块9 24 992
块10 24 992
块11 24 992
块12 24 992
Block13 24 992
块14 24 992
Block15 24 992
块16 24 992
已使用 VS 长度(字节) 16288
最大与长度(字节) 16384

我将调试屏幕捕捉为视频、但屏幕太大、因此我将情况上传为网络链接。

[调试结果1 ]

https://www.youtube.com/watch?v=9mtg-h9e4DM

结果汇总- 调试结果1:失败。

#测试1. 写入 VS1 ->写入 VS2 (失败。假定是由于未执行块无效化而导致的问题)

#测试2. 写入 VS1 ->使 VS1无效->写入 VS2 ->使 VS2无效->写入 VS3 ->使 VS3 无效->写入 VS3 ->写入 VS4 ->使 VS4无效

     -> 写入 VS1 ->使 VS1失效 -> 写入 VS2 ->使 VS2无效-> 写入 VS1 (??) ->使 VS1无效(??) -> 写入 VS2 ->使 VS2无效  

     -> 写入 VS1 (??)  ->使 VS1无效(??) -> 写入 VS2 ->使 VS2无效。

[调试结果2 ]

https://www.youtube.com/watch?v=dL3f87oDIH4

结果汇总- 调试结果2:成功

#测试3.  写入 VS1 ->使 VS1 无效->使 VS1 (RE)无效-> 写入 VS2 ->使 VS2无效-> 写入 VS3 ->使 VS3 无效->写入 VS4 ->使 VS4无效->使 VS4 (RE)无效

     ->写入 VS1 ->使 VS1无效->使 VS1无效(RE)-> 写入 VS2 ->使 VS2无效->写入 VS3 -> 写入 VS3 ->写入 VS4 ->使 VS4无效->使 VS4无效 (RE)

     ->写入 VS1 ->使 VS1无效->使 VS1无效(RE)-> 写入 VS2 ->使 VS2无效->写入 VS3 -> 写入 VS3 ->写入 VS4 ->使 VS4无效->使 VS4无效 (RE)

如果您用图片解释、顺序将与此类似。

作为参考、我在 Excel 文件中获取了一个内存浏览器转储捕获。

[ Excel 文件-内存浏览器转储。]

e2e.ti.com/.../FEE-Virtual-Test-_2800_debugging_2900_.xlsx

 

现在我有3个问题。


问题1: 在前面的回答中、您说块无效不是必需的、但当您分配16个块、每个块992字节、并设置总块容量接近1VS 的容量时、调试结果1中显示的以下 VS 会出现问题。 那么、当移动到下一个 VS 时使块无效是否正确?

问题2. 与调试结果1中相同、如果仅写入一次后该块无效、则重复 VS1 -> VS2 -> VS3 -> VS4 -> VS1 -> VS2 -> VS2 -> VS2、并且仅写入一次 VS3和 VS4。 。
与调试结果2一样,VS1和 VS4激活连续两次使无效解决了问题。 这种方式是否正确?

问题3: 如果我们没有像上面的条件2那样设置每个块的容量、而是设置每个块8个字节、那么我们不需要在写入后执行"失效"操作。 最后、应该在有 VS 转换时无效、并且不应该在没有 VS 转换时无效? (如果 VS 总块容量为1/N 或小于1VS 的容量、则可写入扇区 N 次而无需使块失效、并且先前写入的区域将自动失效。)

我想了解并解决这个问题。 如果您能回答这三个问题、我将不胜感激。

下面附加了我测试的源代码。

e2e.ti.com/.../example_5F00_eeprom_5F00_new3-_2800_2_29005F00_992bytes.zip

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

    您好!

    我们已开始处理您的问题、并将尝试尽快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    首先、对于响应延迟表示歉意。

    #测试1. 写入 VS1 ->写入 VS2 (失败。假定是由于未执行块无效化而导致的问题)

    #测试2. 写入 VS1 ->使 VS1无效->写入 VS2 ->使 VS2无效->写入 VS3 ->使 VS3 无效->写入 VS3 ->写入 VS4 ->使 VS4无效

         -> 写入 VS1 ->使 VS1失效 -> 写入 VS2 ->使 VS2无效-> 写入 VS1 (??) ->使 VS1无效(??) -> 写入 VS2 ->使 VS2无效  

         -> 写入 VS1 (??)  ->使 VS1无效(??) -> 写入 VS2 ->使 VS2无效。

    [/报价]

    我甚至与费设计师讨论过,这是真的,我的意思是,正如我前面所讨论的,我们没有必要使虚拟扇区无效。 部门管理将由收费驱动程序本身自动完成。 在任何给定的时间点、只会存在一个有源扇区。

    我也不明白你是如何编写虚拟扇区明智:

    extern Std_Return TI_SASYNC Fee_Write (uint16 BlockNumber、uint8* DataBufferPtr);

    extern Std_Return TI_45200Qi Fee_Write (uint16 BlockNumber、uint8* DataBufferPtr);

    正如您在上述例程中看到的那样、数据将始终以块数的形式写入。 我们必须给出块编号及其数据、一旦我们给出了块编号、FEE 驱动程序将自动写入相应数据的数据、如果那个块已经写入了一些旧数据、那么驱动程序将使其成为无效块。 这个过程将继续进行、直到活跃扇区填满、 一旦活动扇区填满数据、FEE 驱动器将自动将当前扇区中的活动块数据复制到新扇区、并将新扇区标记为活动扇区、同时使旧扇区无效并对旧扇区执行擦除操作。 这一进程将再次继续。

    --

    谢谢。此致、
    Jagadish。

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

    感谢您的答复。 但我不明白。
    问题与 Q2有关。
    虚拟扇区转换顺序不是1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 3 -> 4、而是1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 1 -> 1 -> 1 -> 1 -> 2 -> 2。
    次序如下:如果您能再次回答问题 Q1~Q3、我将不胜感激。

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

    Yun Kyu、您好!

    我的确调试了您的代码、并且我可以看到您提到的运行方式、是的、我也观察到在首次迭代之后、VS3和 VS4不会成为针对写入操作的激活扇区。

    给我一些时间来进行进一步调试并提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    感谢您的检查。

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

    Yun Kyu、您好!

    我到星期一不在办公室、请预计会有一些延误、以便进一步了解此问题的最新情况。

    --

    谢谢。此致、
    Jagadish。

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

    谢谢~

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

    Yun Kyu、您好!

    休假回来后、请给我一些时间与内部团队讨论、以便提供进一步的更新信息。

    --

    谢谢。此致、
    Jagadish。

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

    谢谢~

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

    Yun Kyu、您好!

    感谢您的耐心、但我仍然没有收到内部团队的适当反馈。 请给我更多的时间来提供正确的更新。

    --

    谢谢。此致、
    Jagadish。

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

    感谢您的参与

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

    Yun Kyu、您好!

    我将在 本周结束前向您提供最新情况。 问题是没有收费的活动支持团队、因此我会自行检查代码并提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    Yun Kyu、您好!

    很抱歉、我上周没有机会查看此问题。 本周我没有其他问题、因此我可以花时间讨论此问题。

    --

    谢谢。此致、
    Jagadish。

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

    Yun Kyu、您好!

    我理解了第一次迭代后为什么第3和第4个虚拟扇区没有被利用的行为。 下面是解释

    一旦写入块大小大于当前虚拟扇区大小、我们就会使用函数"TI_FEEE Internal_Find VirtualSector"来确定下一个空闲的虚拟扇区。

    为了找出下一个要写入的虚拟扇区、它们按以下优先级顺序排列:

    在这里、它们首先会验证是否存在空虚拟扇区、如果没有空虚拟扇区、则会验证是否存在无效的虚拟扇区、如果没有无效的虚拟扇区、则会擦除虚拟扇区。 每种情况下的验证顺序都是从虚拟扇区1到虚拟扇区4。

    那么、在对器件进行擦除和编程之后、所有虚拟扇区都将处于"无效的虚拟扇区"状态对吧?

    1.所以 在第一次迭代中,经过在 VS1中写入数据后"TI_FEEe Internal_Find VirtualSector"会返回 VS2 ,因为所有三个虚拟扇区都处于无效的虚拟扇区状态,所以这个函数会给我们 VS2作为下一个虚拟扇区。

    现在、我们的数据将被写入 VS2、VS1中的所有有效数据也将被复制到 VS2中。 现在、VS1将标记为"擦除虚拟扇区"。

    3.现在在 VS2中写入数据后,"TI_FEEe Internal_Find Sec457Virtualator"函数将返回 VS3且不会返回 VS1 ,因为 VS1状态为"擦除虚拟扇 区",如果没有无效扇区,则按照优先级,我们将进入擦除虚拟扇区。  但我们有无效的扇区 VS3和 VS4、所以将返回 VS3。

    4. 现在我们的数据将被写入 VS3中,而 VS2中的所有有效数据也将被复制到 VS3中。 现在、 VS2 也将被标记为"Erase Virtual Sector"。

    5.现在在 VS3中写入数据后, "TI_FEEe Internal_Find VirtualSector"函数将返回 VS4,它不会返回 VS1或 VS2,因为 VS1和 VS2状态为"擦 除虚拟扇区",如果没有无效扇区,则按照优先级,我们只会执行"擦除虚拟扇区"。  但我们有无效的扇区 VS4、因此将返回 VS4。

    6.  我们的数据 现在将被写入 VS4,而 VS3中的所有有效数据 也将被复制到 VS4中。 现在、 VS3 也将被标记为"Erase Virtual Sector"。

    7.现在在 VS4中交叉写入数据后、由于没有无效扇区、并且除有效 VS4之外 Internal_Find 的所有其他扇区都将仅处于正确擦除虚拟扇区状态、因此按照顺序、将返回"TI_FEEE VirtualSector"。

    8. 我们的数据 现在将被写入 VS1,VS4中的所有有效数据 也将被复制到 VS1中。 现在、 VS4 也将被标记为"Erase Virtual Sector"。

    9. 现在在 VS1中交叉写入数据后, 由于没有无效的扇区和所有其他扇区,除了活动 VS1将只在正确的擦除虚拟扇区状态,所以按照目前的顺序 VS2将返回 "TI_FEES Internal_Find 虚拟区"。

      现在、我们的数据将被写入 VS2、VS1中的所有有效数据 也将被复制到 VS2中。 现在、 VS1 也将标记为"擦除虚拟扇区"。

    11.  7.现在在 VS2中交叉写入数据后 Internal_Find ,由于没有无效的扇区和所有其他扇区,除了活动的 VS2将仅处于正确的擦除虚拟扇区状态,所以按照顺序 VS1将返回"TI_FEEE VirtualSector"。

    然后、该过程将继续、在第一次迭代后将仅使用 VS1和 VS2。

    --
    谢谢。此致、
    Jagadish。