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.

[参考译文] AWRL6432:LPDS 之后的闪存 mmap

Guru**** 2451970 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1514933/awrl6432-flash-mmap-after-lpds

器件型号:AWRL6432
主题:SysConfig 中讨论的其他器件

工具/软件:

尊敬的 TI 专家:

我去年发布过有关闪存 mmap 访问的问题: https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1206158/iwrl6432-qspiflash-mmap

存储器地址0x70000000能够在首次上电时读取为闪存0x0偏移。

但是、我在进入低功耗深度睡眠(LPDS)模式后会遇到从 mmap 地址读取的问题、但会出现数据损坏问题。

如何复制:(使用" mmwave_l_sdk 5.5.3.0的说明 ")

1.导入"examples\drivers\power\power_modes"

2.在 Sysconfig 中、将"flash"添加到电路板驱动程序、并保留其默认配置。

3.在 Sysconfig 中,更改"电源"设置,使其适用于实际应用... 。

4.打开"power_modes,c",添加一个测试函数:"printMeta0",它将在 Meta1位置打印当前 appimage 的128字节前部分。

void printMeta0(void){
  uint8_t *ptr;
  ptr =(uint8_t *) 0x70000000 //分配给闪存 mmap 地址(FLASH 0x0)
  DebugP_log ("Meta1 (0x0~0x80):\r\n");
  for (int i = 0;i < 0x80;i++){
    DebugP_log ("%02x "、*(ptr + i));
    if (i % 0x10 == 0xF){
      DebugP_LOG ("\r\n");
    }
  }
}

并使其在 while 循环内执行

5.构建映像并上传至 BOOST EVM 板,让我们检查结果。

您可以看到上电、输出正确、并且相同(使用构建的应用映像)。

但是、如果按"1"转至 LPDS、则输出全部为零值、再次重复将会损坏输出...

您能否调查此问题? 我如何在 LPDS 之后从 mmap 地址读取正确的数据...

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

    很抱歉我错过了附加的输出屏幕截图...

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

    您好、Brian、

    感谢您联系我们、请给我们几天时间来调查此问题并回复您。

    此致、

    Vignesh K.

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

    输出消息的最后屏幕截图

    要添加一行、请在  void power_LPDSresumehook (void){中

     ...

    QSPI_init ();
    ...
    }
    这是首次 BoardFlashOpen 失败并导致所有"零值"的原因、但它对数据读取损坏的症状没有帮助。
    按照屏幕内容,我绘制红圈来显示损坏的字节。 (你的字节内容应该不同于我的,因为 appimage 是由不同的机器构建的),但你知道我的意思是第一次读的权力不同于二次读后 LPDS ...  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    您是否使用 QSPI_setMemAddrSpace 执行任何操作? 如果是这样,你能尝试把它放置在   Board_driversOpen ()函数之后的 POWER_LPDSresumehook 中。

    我假设这是由于在进入深度睡眠之前禁用 mmap 后缺少对其重新初始化而发生的。

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

    不,我没有对  QSPI_setMemAddrSpace ()做任何事情,

    我找到了一个解决方法,做一个 Flash_read (...) 首先、在使用 mmap 参考之前、  

    QSPI_setMemAddrSpace ()似乎 每次从"QSPI_open ()->QSPI_programInstance"和"QSPI_readCmd"/"QSPI_writeCmd"开始都设置回 mmap 模式、

    也许 LPDS 中的某个序列问题会与 "QSPI_open ()->QSPI_programInstance"...但我不知道实际原因、

    我在这里附加了 power_modes.c、 e2e.ti.com/.../power_5F00_modes.c

    我的权变措施是交换序列、

    我认为是 QSPI_readCmd ()让 QSPI_setMemAddrSpace () 再次回到 mmap 模式,然后正常读取数据。

    但我不知道为何 LPDS 恢复路径 mmap read 是数据损坏的...除了 Flash_read ()。

    POWER_LPDSresumehook ()->Drivers_open ()->Drivers_qspiOpen ()->QSPI_htopen ()->QSPI_programInstance ()->QSPI_setMemAddrSpace (handle、QSPI_MEM_MAP_PORT_SEL_MEM_MAP_PORT)
    似乎 QSPI 最初是 mmap 模式,但不知道的原因读取数据损坏了我...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Brian、

    感谢您提供此信息。 在接下来的几天里、另一位软件工程师将向您提供更多信息。  

    此致、

    Vignesh K.