打印
[PSoC™]

配置 PSoC 6 MCU 复位后的启动时间

[复制链接]
948|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IFX_Lingling|  楼主 | 2023-10-8 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 IFXLingling 于 2023-10-8 11:02 编辑

复位后,首先运行的是引导启动代码,依次执行下列步骤:
  • 如果有硬件初始化代码,先执行代码。
  • 验证用户闪存中的 TOC2(目录)是否有效。
  • 获取 App0 Reset Handler 函数。
  • 配置 SWD/JTAG 管脚。
  • 延迟执行(等待窗口/监听窗口)。
  • 启动用户应用程序。
关于引导启动代码的更多细节,请参见 PSoC 6架构 TRM 的 "Boot Code" 一章。
复位时的各操作时序图如下所示: :
Figure 1. 启动时序图(见 PSoC 6编程规范
可见,总启动时间为: tstartup = tlite_up + tboot + tlisten
下表列出了各时间项、具体时长和内容说明(具体时长详见 PSoC 6 编程规范):
[td]
名称
时间项
时长
内容说明
上电时间
tlite_up
最长 250 µs
复位命令后到 CPU 开始执行引导启动代码的时间
引导启动时间
tboot
0.7 – 600 ms
引导启动代码执行步骤 1 到 4 所花费的时间。
监听窗口 / 等待时间
tlisten
20 ms(0 – 100 ms 区间内变化)
监听窗口默认需要20 ms (引导启动代码执行的第五步),用于连接编程器,进入编程模式。 MCU 监听主机发送正确的 SWJ 命令序列。

你可以创建一个简单的应用程序,切换 CM0+ 应用程序中的一个管脚,看看复位后应用程序启动需要多长时间。以下为复位后运行用户应用程序耗时截图:
图中耗时约为21 ms (具体数值可能会上下浮动)。这个启动时间可能无法满足要求复位后快速响应的应用。
为什么启动时间在21 ms 左右?
仔细观察会发现,绝大部分时间是由监听窗口消耗的(~20 ms)。
在PSoC 6 MCU中,监听窗口由 TOC2 (目录)控制。TOC2这种数据结构,提供了用户闪存中特定内容的位置信息,如安全映像、用户应用程序和闪存引导启动参数。详细的 TOC2 格式如下所示。更多信息请参见 PSoC 6 架构 TRM的 "Boot Code" 一章:
修改4:2(LISTEN_WINDOW),配置监听窗口。
注意,如果把听窗口0 ms 或修改其他(例如修改SWJ_PINS_CTL,禁用SWJ),就不能再对器件进程。确保修改LISTEN_WINDOW位。

建议将监听窗口设置为 1 ms ,该数值适用于大多数应用。在本文所附工程文件中,使用FLASHBOOT_WAIT_1MS宏修改了TOC2结构,将LISTEN_WINDOW设置为 1 ms(值 = 2)。用 CY8CKIT-062-WIFI-BT 套件进行测试。
/** Flashboot parameters */

#define FLASHBOOT_FLAGS ((FLASHBOOT_VALIDATE_NO << TOC_FLAGS_APP_VERIFY_POS) \

                                | (FLASHBOOT_WAIT_1MS << TOC_FLAGS_DELAY_POS) \

                                | (FLASHBOOT_CLK_50MHZ << TOC_FLAGS_CLOCKS_POS))

/** TOC2 in SFlash */

CY_SECTION(".cy_toc_part2") __USED static const cy_stc_toc_t cy_toc2 =

{

    .objSize     = sizeof(cy_stc_toc_t) - sizeof(uint32_t),     /**< Object Size (Bytes) excluding CRC */

    .magicNum    = 0x01211220,                                  /**< TOC2 ID (magic number) */

    .appAddr1    = 0x10000000u,                                 /**< Application start address */

    .tocFlags    = FLASHBOOT_FLAGS,                             /**< Flashboot flags stored in TOC2 */

    .crc         = 0UL                                          /**< CRC populated by cymcuelftool */

};

修改 TOC2 的值后,需更新用于验证 TOC2 的 CRC 值。在 PSoC Creator 完成构建后,CyMCUElfTool 会自动完成该更新。
ModusToolbox 中,向 Makefile 添加下列 post-build 命令,为应用签名,生成 TOC2 CRC。
  • 在 ModusToolbox 安装目录下的 tools_2.x 文件夹中找到 cymcuelftool.exe ,复制并粘贴到应用程序目录中(此步骤在本文所附工程中已完成)。
  • 运行构建前,先将该命令中的应用访问路径修改为绝对路径。
POSTBUILD=./cymcuelftool.exe --sign "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/Debug/mtb-psoc6-reduce-startup-time.elf" --output "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/Debug/mtb-psoc6-reduce-startup-time.elf" --hex "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/mtb-psoc6-reduce-startup-time.hex"
本文附带的文档中包括 ModusToolbox 和 PSoC Creator 工程文件。
  • ModusToolbox 工程文件:在CM4应用程序中切换管脚 10.1,监听窗口设为 1 ms。该工程使用预构建的 CM0p 映像,
    因为 CM0p 应用程序是先启动的,你可以使用双 CPU 应用模板,在 CM0p 应用程序中切换管脚。这样操作在时间上会更精准,因为 CM0p 应用程序与 CM4 应用程序启动存在先后顺序, CM0p 到 CM4 之间通常会有几微秒的延迟。
  • PSoC Creator 工程文件: 分别切换 CM0p 应用程序的 10.0 管脚和 CM4 应用程序的 10.1 管脚,将监听窗口设为 1 ms 。连接逻辑分析仪,按下套件上的复位开关。应该能看到从 XRES到CM0p 执行应用程序的启动时间约为 2 ms,相比 21 ms,有很大改进。对于 ModusToolbox 应用程序,读数区间可以从复位开始到 CM4 应用程序启动结束。


  • 本文所附工程文件中还包含其他可供实验的宏。请注意,设置成错误的值可能会导致器件无法运行。
    以下为设置不同宏值的截图:
    FLASHBOOT_WAIT_20MS:

    FLASHBOOT_WAIT_10MS:

使用特权

评论回复
沙发
PSoC小子| | 2024-4-8 12:50 | 只看该作者
刚刚读到这篇文章,写的真好,厉害

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-4-22 21:48 | 只看该作者
ModusToolbox现在功能如何?

使用特权

评论回复
地板
中国龙芯CDX| | 2024-4-23 15:41 | 只看该作者
在PSoC 6 MCU中,监听窗口由 TOC2 (目录)控制。

使用特权

评论回复
5
鹿鼎计| | 2024-4-28 20:30 | 只看该作者
这种测试还是很有意义的,能让人知道每次启动用了多久的时间

使用特权

评论回复
6
软核硬核| | 2024-4-28 20:51 | 只看该作者
引导启动时间为什么跨度范围那么大?

使用特权

评论回复
7
yangjiaxu| | 2024-4-29 13:31 | 只看该作者
这种复位再启动时间,基本都不是很关注,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

104

主题

188

帖子

5

粉丝