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.

[参考译文] TDA3XEVM:写入 QSPI 后 SBL 上的 CRC 计算

Guru**** 2589265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638114/tda3xevm-crc-calculation-on-sbl-after-writing-to-qspi

器件型号:TDA3XEVM

您好!

我在写入 QSPI 后出现 CRC 问题。 我将按如下方式测试 CRC:

我将数据写入地址0xA80000上的 QSPI。 我使用该地址上的函数 SBLUtilsComputeCRC 计算 CRC、并且 CRC 值正确。 然后、我从 QSPI 地址0xA80000读取数据、更改 DDR 中的字节序、并将其写回地址0x1080000的存储器。 当我计算地址0x1080000上的 CRC 时、我得到不同的值。 我使用内存浏览器进行检查、地址0x1080000上的数据与地址0xA80000上的数据相同。 为了再次进行检查、我删除了对 QSPI 的写入、并刚刚计算了地址0x1080000上的 CRC (我假设该位置上的存储器需要更改、我刚刚在 QSPI 中烧写了新的 SBL)。 在这种情况下、CRC 是正确的。 我尝试使用函数 UNCACHEWriteBackAndInvalidateAll (SOC_IPU1_UNCHE_MMU_CONF_regs_base、UNCHE_WAIT_INLINAL)使缓存无效;但它不会带来任何差异。 我尝试启用和禁用高速缓存、但它不影响计算。

我是否需要为此使用 EDMA? 如果是、如何操作?

我正在使用 VSDK 2.12.1。

您能在这里看到问题吗?

此致、
Sasa Mihajlica

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

    您能否向我发送存储在0xA80000和0x1080000 (更改字节序后存储)的数据?

    谢谢、此致、
    Vivek Dhande。
    德州仪器(TI)(印度) Pvt Ltd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vivek、

    以下是包含来自上述地址的数据的二进制文件。

    e2e.ti.com/.../DataQSPI.7z

    此致、
    Sasa

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

    为了计算地址0x1080000上的 CRC、您使用了什么 API?

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rishabh、
    我使用了函数 SBLUtilsComputeCRC。

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

    您能否共享工作用例和非工作用例的代码片段。

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

    您好、Rishabh、

    在以下存档中有两个文件。 一个具有用于 CRC 计算的函数、另一个具有有关行为的函数调用和注释。

    e2e.ti.com/.../crc.7z

    此致、
    Sasa

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

    您好、Mihai、

    代码看起来正常。 将数据重新写入 QSPI 闪存后、您可以添加打印内容、以便读取0xA80000、0xA80004、0x1080000和0x1080004处的数据。

    void testFunction()

       CrcTest (0xA80000、0x557000);  

       qspiReader (rprcAddress、0xA80000、0x557000);
       qspiFlashRewriter (rprcAddress、0x1080000、0x557000);

       //在此处添加打印稿
       CrcTest (0x1080000、0x557000);

    此致、

    Rishabh

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

    您好、Rishabh、

    我尝试了您的建议、并得出了一些结论。

    由于这些地址是偏移量、我在地址0x5CA8000C、0x5CA8000D、0x5D08000C、0x5D08000D 上有指针。 由于您提到的地址上的值应该为零、所以我将地址更改为那些应该具有非零值的地址。 当我打印值时、它们与预期的所有地址不同。 然后、我使用地址0x5C080000、0x5C080001、0x5C080002、0x5C080003尝试了它、这些地址应该是 IPU1_0 RPRC 的开头、并且这些 R、P、R、C 字符应该是这些地址上的值、但它们不在那里。 当我移除线路 qspiFlashRewriter (rprcAddress、0x1080000、0x557000)时、 这些位置上的存储器似乎是正确的(所提及的地址上有 R、P、R、C 字符)。
    据我所知、这些地址不是 QSPI 的真实表示、只是存储器中它的图像、因此该存储器中的更改不会影响 QSPI 存储器。 我是对的吗? 为什么在程序执行期间(特别是在写入 QSPI 期间)更改此存储器? 是否可以访问实际 QSPI 存储器并从中读取值?

    此致、
    Sasa

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

    我想逐字读取、即一次读取32位、因为我认为问题是字节序交换。
    您能检查一下并返回吗?
    谢谢。

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

    您好、Rishabh、

    我将为您提供用于打印值的代码片段以及执行输出。

    e2e.ti.com/.../log.7z

    我希望这对您有所帮助、这应该更好地解释我之前写的内容。

    此致、
    Sasa

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

    您好、Mihai、

    现在、我可以理解您之前对 QSPI 存储器内容和 CRC 相关问题的评论。

    QSPI 存储器可通过两种模式进行访问:cfg 模式和存储器映射模式。

    您可以使用任一模式执行读/写操作。 但在存储器映射模式下可以更高效地完成读取、而在 CFG 模式下写入更高效。

    调用 qspiFlashRewrite 时、不会更改回存储器映射模式、因此无法看到实际的存储器内容。

    按如下方式修改代码:

    void testFunction()

       CrcTest (0xA80000、0x557000);  

       qspiReader (rprcAddress、0xA80000、0x557000);  
       qspiFlashRewriter (rprcAddress、0x1080000、0x557000);
       
       QSPISetMAddrSpace (SOC_QSPI_ADDRSP0_BASE、
                         (uint8_t) QSPI_SPI_SWITCH_REG_MMPT_S_SEL_MM_PORT);
       QSPI_ConfMAddrSpace ((uint8_t) QSPI_SPI_SWITCH_REG_MMPT_S_SEL_MM_PORT、
                           QSPI_CS0);
       CrcTest (0x1080000、0x557000);  

    此致、

    Rishabh