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.

[参考译文] IWR6843AOP:通过 Mistral 模块上的 Python CLI 进行软复位(resetDevice)–绕过次级引导加载程序(SBL)

Guru**** 2451970 points
Other Parts Discussed in Thread: IWR6843AOP, IWR6843AOPEVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1513902/iwr6843aop-soft-reset-resetdevice-via-python-cli-on-mistral-module-bypassing-secondary-bootloader-sbl

器件型号:IWR6843AOP

工具/软件:

您好 TI 社区、

我正在 Mistral 的60GHz AOP 雷达模块上使用 IWR6843AOP、并且在使用基于 Python 的命令行界面时、使用软复位命令(resetDevice)时遇到了问题。 我的目标是执行软复位、绕过次级引导加载程序(SBL)、从而简化应用程序的复位过程。 6843目前由 Raspberry PI 供电。

问题描述:
通过 Python CLI 发出 resetDevice 命令时、该器件看起来通过 UART 通过 SBL、然后没有任何反应。 我需要执行软复位、在不调用 SBL 的情况下直接复位器件。 我使用的设置与毫米波 SDK 中描述的设置类似、并引用 Python 脚本(例如、灵感来自 GitHub 项目、如 niekschoemaker/iwr6843aop-python)。 Mistral 模块在雷达功能方面与 TI 的 IWR6843AOPEVM 完全兼容、但我不确定模块特定的功能是否会影响复位行为。

问题:

  1. 是否有办法在 Python CLI 中配置或修改 resetDevice 命令以绕过 IWR6843AOP 上的 SBL?
  2. 我是否应该调整特定的固件或配置设置(例如在线性调频脉冲配置或 SDK 中)来实现直接软复位?
  3. 与 TI IWR6843AOPEVM 相比、Mistral 的模块是否会引入任何可能影响软复位过程的限制或差异?
  4. 毫米波 SDK 或其他地方是否有示例 Python 脚本或 CLI 命令演示绕过 SBL 的软复位?

设置详细信息:

  • 硬件: Mistral 60GHz AOP 雷达模块(基于 IWR6843AOP ES2.0)
  • 软件: Python [版本、例如、3.8]、毫米波 SDK [版本]、TI 毫米波库
  • 配置: 使用 TI 实验室中的默认线性调频脉冲配置(例如 mmw_pplcount_demo_default.cfg)并进行少量修改[如果适用、请指定]
  • 连接: 用于 CLI 通信的 USB 接口、[提及]
  • 参考资料: 我已经查看了 TI E2E 博文其中介绍了如何使用 resetDevice 绕过 SBL、但需要对 Python CLI 的实现进行澄清。  e2e.ti.com/.../iwr6843aop-is-there-a-way-to-make-soft-reset-command-resetdevice-bypass-the-sbl-secondary-boot-loader
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    一位专家将很快发表评论。

    此致、

    Nate

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

    您好 Brian。

    重置设备时、是否只是尝试重新启动之前加载的应用程序?  默认情况下、6843应该执行此操作;在 SBL 执行过程中、它会将 SBL 加载的应用程序写入 SFLASH、覆盖 SBL、以便在复位时将其加载到新应用中。  您是在首次循环中加载新应用、还是只是从 SFLASH 中的 SBL 开始、然后尝试复位/绕过 SBL?

    此致、

    Santosh

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

    您好、Santosh、

    我们最初使用 SFLASH 中的 SBL (次级引导加载程序)来引导器件、并尝试复位或绕过该器件。 这种方法的局限性在于无法使用新配置进行更新、因为仅会通过硬复位来擦除旧配置、而硬复位需要通过 USB 和 UART 接口物理断开器件连接。 要执行完全复位、必须断开 GPIO 17 (nRESET)和 GPIO 9 (GND)之间的连接。

    是否可以通过 Python 应用程序自动执行此重置过程?

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

    您好 Brian。

    我们最初使用 SFLASH 中的 SBL (次级引导加载程序)来引导器件、并尝试重置或绕过该器件。

    我想我明白了、只是为了确认、您实际上并没有尝试使用 SBL、而是将其放在 SFLASH 中以便器件能够引导?  如您在原始问题中链接的 E2E 中所述、SBL 并非设计为"可旁路"。

    这种方法的局限性在于无法使用新配置更新现有配置、因为旧配置仅通过硬复位进行擦除、这需要通过 USB 和 UART 接口物理断开设备。

    在谈到配置时、您是指发送到我们的雷达应用的线性调频脉冲配置、还是指的是 SBL 本身?  如果您参考的是 SBL 本身、任何类型的复位都不会帮助绕过 SBL、因为复位时的引导加载程序将寻找在 SFLASH 中引导第一个有效映像。  如果您在复位后尝试引导另一个映像、则最容易通过 SBL 引导映像、然后进行复位、然后引导新应用程序。

    是否可以通过 Python 应用程序自动执行此重置过程?

    我认为如果不修改源代码、这是不可能的、因为我期望 python CLI 向器件发送 UART 消息、这将需要器件 SW 考虑此 UART 消息来执行此复位。

    此致、

    Santosh

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

    您好、Santosh、

    感谢您的反馈。 我们通过以下修改找出了通过 python 问题解决的软复位方法。 感谢您帮助解决该问题。  

    文件:main.py

    DEF sendCfg (self):
    尝试:
    self.parser.sendCfg(self.cfg)
    sys.stdout.flush()
    # self.parseTimer.start (int ( self.frameTime ))#需要此行
    例外情况为 e:
    打印(e)
    print ("解析.cfg 文件失败。 您是否选择了正确的文件?")

    文件:datastream.py

    DEF sendCfg (self、cfg):
    #从配置中删除空行
    cfg =[行表示 cfg 中的行、如果行!='\n']
    #确保在每行末尾\n
    cfg =[line +'\n'(如果不是 line.endswith('\n')) else line for line in cfg]
    #删除注释行
    CFG =[如果 line[0]!='%']、则 cfg 中行的行

    对于 cfg 中的行:
    time.sleep (.03)#线路延迟

    if (self.CLICOM.baudrate == 1250000):
    对于[*LINE]中的 char:
    time.sleep (.001)#字符延迟。 默认情况下为1250000波特的演示需要、否则会跳过其他字符
    self.CLICOM.write (char.encode())
    否则:
    self.CLICOM.write (line.encode())

    # ack = self.CLICOM.readline()
    #打印(ack, flush=True)
    # ack = self.CLICOM.readline()
    #打印(ack, flush=True)
    # if (self.isLowPowerDevice):
    # ack = self.CLICOM.readline()
    #打印(ack, flush=True)
    # ack = self.CLICOM.readline()
    #打印(ack, flush=True)

    # splitLine = line.split()
    # if (splitLine[0]=="baudrate"):# baudrate CLI 行会更改下一个 cfg 行上的 CLI 波特率、以启用从 xWRL 器件进行更大的数据流式传输。
    #尝试:
    # self.CLICOM.baudrate = int (splitLine[1])
    #除外:
    # log.error ("错误-无效波特率")
    # sys.exit(1)
    #给缓冲区一小段时间清除
    时间睡眠(0.03)
    self.CLICOM.RESET_INPUT_BUFFER()
    #注意-不要关闭 CLI 端口,因为6432将在配置后使用它