痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  人人好,我是痞子衡,是正经搞手艺的痞子。今天痞子衡给人人先容的是恩智浦i.MX RT1170 FlexSPI NOR启动时间

  痞子衡刚刚拿到i.MXRT1170 B0版本的芯片,迫在眉睫地在上面跑了一些A0版本上早已验证过的demo,功效一切正常,没有什么分外迁徙事情。由于现在只有B0版本芯片,没有配套EVK,以是痞子衡是在RT1170内部Validation板上做测试的(RT主芯片以及Flash芯片所有放在Socket里的,异常利便替换),正好痞子衡最近整理工位,找到了异常多来自差异厂家的串行Flash样片,何不趁此时顺便测一下Serial NOR启动时间,究竟Serial NOR是i.MXRT启动首选装备,启动时间肯定是人人对照感兴趣的。

  关于i.MXRT1170启动时间,痞子衡之前在A0版本上测过 《SEMC NAND启动时间》,有了之前的测试基础,本篇文章就是照葫芦画瓢。不外由于Serial NOR的特殊性,本文会同时测XIP和Non-XIP时间,以及两种典型的Flash事情模式下(四线SDR,八线DDR)的时间,事情量要稍微大一些,让我们最先吧。

一、准备事情

1.1 知识贮备

  Serial NOR可以说是人人最熟悉的启动装备了,虽然这个装备可以支持两类App(XIP和Non-XIP)去启动,但人人用得最多的无疑是XIP App,由于XIP下App代码长度可以和Flash容量一样大,这对于庞大功效的应用很主要,然则编写XIP App代码也有一些需要注重的地方,比如在设置系统时钟(不能影响FlexSPI模块)或者擦写Flash时(不支持RWW的话需要拷贝到RAM里执行)有一些限制。

  至于Non-XIP,相比XIP会多一个App拷贝历程,启动时间难免会变长。拷贝目的装备选择种类许多,可以是内部RAM(包罗TCM和OCRAM),也可以是外部RAM(SDRAM或者HyperRAM)。若是是为了提高代码执行效率,通常会搬移到内部TCM里执行。固然也有搬移到外部SDRAM执行的,不外这种情形需要分外行使DCD功效来完成SEMC模块的初始化之后才能做搬移事情。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

1.2 时间界定

  关于时间终点,参考《SEMC NAND启动时间》 里的1.2节,方式保持一致。而关于时间起点,本次的测试选点做了一些优化,测NAND启动时为了图利便选在了最靠近POR引脚的电压转换器NC7SP125P5X的输入脚(Pin1)所在的Header上,然则我们知道任何一个被动电源器件都有转换时间,为了尽可能正确丈量启动时间,我们应该消除这种误差,因此本次选点放在了NC7SP125P5X的输出脚(Pin4),这个脚与主芯片POR引脚是直连的。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  为了让人人对电源器件转换时间有个深刻感受,痞子衡这次还专程量了一下Validation板上原始电源输入(5V Jack)到POR引脚上电的时间,这个时间足有210ms,凭据电源电路设计以及器件选型的差异,这个时间是差异的,以是应该从启动时间里抛除出来。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

1.3 制作应用程序

  关于应用程序制作,依旧是参考《SEMC NAND启动时间》 里的1.3节,只有一个细小改善,就是把翻转GPIO的代码放在SystemInit()函数最前面,尽可能地靠近Reset_Handler。

void SystemInit (void) {
    {
        CLOCK_EnableClock(kCLOCK_Iomuxc);
        gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
        IOMUXC_SetPinMux(IOMUXC_GPIO_AD_03_GPIO9_IO02, 0U);
        GPIO_PinInit(GPIO9, 2, &led_config);
        GPIO_PinWrite(GPIO9, 2, 1u);
    }

	// 关开门狗和SysTick

    while (1);

    // ...
}

1.4 下载应用程序

  应用程序的下载需借助痞子衡开发的NXP-MCUBootUtility工具(v2.3版本及以上),本次痞子衡一共测试了两款Flash,针对差异的Flash,在下载时选择的模子不一样:

  下面模子适用华邦W25Q256系列,设置成了四线、SDR、133MHz事情模式去启动:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  下面模子适用旺宏MX25UM51345系列,设置成了八线、DDR、166MHz事情模式去启动:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

1.5 示波器抓取信号

  一切准备就绪,可以用示波器抓Serial NOR启动时间了。通道一监测原始5V电源输入信号,通道二监测芯片POR信号,通道三来监测Flash片选信号(FSPI1A_SS0_B),通道四监测LED GPIO信号。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

拉钩项目(一)–项目流程+数据提取

二、最先测试

2.1 测试效果

  在宣布效果之前,痞子衡先带人人剖析一下示波器抓取的启动时间波形,利便人人明白后续表格里的各项组成。

  先来看人人相对生疏的Non-XIP启动的波形(MX25UM51345G,247KB App)。通道二毗邻POR引脚,电平拉高是启动计时的最先,启动后会先履历BootROM时间(CM7内核先执行ROM代码,做一些通例系统初始化,读取用户启动设置,然后设置好FlexSPI模块),底下再履历BootFlash时间(照样在ROM里执行,不外此时最先接见外部Flash,从Flash里读取FDCB、IVT、BootData以及搬移App,以是你会看到通道三(Flash的片选信号)上会有连续的波形转变,搬移完成之后便跳转到App里执行),最后你会看到通道四电平拉高了(App在执行)。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  作为对照,再来看一下XIP启动的波形(MX25UM51345G,246KB App)。BootROM时间跟Non-XIP基本差不多,这是可以明白的,同样的ROM代码在执行,消耗的机械周期是稳定的。BootFlash的时间显著缩短了,Flash片选的波形只有屈指可数的几回,这是由于ROM此时只需要读取FDCB、IVT、BootData,凭据IVT里的链接地址信息得知App不需要搬移就直接跳转了。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  剖析完了启动时间组成,让我们看效果吧。痞子衡基于Flash事情模式、App长度、App执行地址的组合一共做了8个测试,效果如下表所示(注:表中效果都是在1.25M次/秒的采样率下所得):

Flash型号
Timing模式
App长度
(bytes)
App执行位置 BootROM时间 BootFlash时间 总启动时间
W25Q256J
4bit, SDR, 133MHz
16390 XIP 6.926 ms 1.611 ms 8.537 ms
17922 ITCM 6.939 ms 2.203 ms 9.142 ms
251910 XIP 6.920 ms 1.612 ms 8.532 ms
253442 ITCM 6.953 ms 8.795 ms 15.748 ms
MX25UM51345G
8bit, DDR, 166MHz
16390 XIP 6.942 ms 1.618 ms 8.560 ms
17922 ITCM 6.944 ms 2.312 ms 9.256 ms
251910 XIP 6.916 ms 1.647 ms 8.563 ms
253442 ITCM 6.935 ms 8.897 ms 15.832 ms

2.2 效果剖析

  从上面表格里的效果我们可以获得如下三个结论:

  • 结论1:不管是哪种Flash毗邻,BootROM时间差不多是牢固的,大概在6.9ms
  • 结论2:XIP启动的情形下,BootFlash时间险些也是牢固的,跟App长度无关,大概在1.6ms
  • 结论3:Non-XIP启动的情形下,BootFlash时间跟App长度成正比,然则跟Flash事情模式(速率)不是正比(甚至可以说关系不大)

  关于结论3里的BootFlash时间跟Flash事情模式(速率)不是正比这点有需要睁开研究一下。痞子衡的测试效果是ROM从Flash拷贝247KB数据到ITCM,无论是从QSPI Flash拷贝照样从Octal Flash拷贝所花时间竟然险些是一致的,这个看起来挺新鲜的,究竟仅从Flash自身读接见速率而言,Octal Flash应该是QSPI Flash的五倍(8bit x 2 x 166MHz) / (4bit x 1 x 133MHz)。

  为了解开谜题,痞子衡对时序图里CS信号做了进一步剖析,下图是QSPI Flash的启动时序图,ROM拷贝247KB的数据耗时约7.833ms,每个CS周期是114.4us,扣除时序前期的空闲时间以及读Boot Header,拷贝App时代共有62个CS周期,那么每个CS周期现实拷贝了4KB数据。从QSPI Flash自己速率理论盘算,读4KB数据应该耗时 4KB / (4bit x 133MHz) = 61.59us,这与现实丈量的CS信号的低电平时间是吻合的。再来看CS信号周期的高电平(idle)时间足有52.8us,为什么会有这么长的空闲时间?疑问先放在这里。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  同样的方式再来剖析一下Octal Flash的启动时序图。从Octal Flash自己速率理论盘算,读4KB数据应该耗时 4KB / (8bit x 2 x 166MHz) = 12.33us,这与现实丈量的CS信号的低电平时间依然是吻合的。连系上面剖析的QSPI Flash CS低有用时间来看,两者确实是五倍的关系。然则此时的CS信号周期的高电平时间比QSPI Flash下的时间要更长,达到了100.47us,最终导致两种差异性能Flash下拷贝时间差不多。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

  剖析到这里,我们已经找到了线索,ROM从Flash里每拷贝4KB数据到TCM都要耗时约112us,速率瓶颈不在Flash自己读速率,而在于搬移时的系统开销,那么这个牢固开销到底是什么引起的?

  由于ROM代码是个黑盒子,我们看不见,痞子衡为了找到这个系统开销,在Octal Flash Non-XIP启动的App里用memcpy做了同样的数据搬移。凭据上面表格里的效果,我们知道ROM里搬移230KB数据需耗时6.576ms,经测试App里搬移230KB数据仅需3.265ms,ROM和App的区别主要是执行效率不一样(ROM设置的CPU主频是400MHz,App设置的CPU主频是996MHz;ROM的代码在ROM里,而App代码在ITCM里)。

    memcpy((void *)0x6000, (const void *)0x30002000, 230 * 1024);

  由于Non-XIP App不会为FlexSPI映射地址开启cache,痞子衡专程开了cache再次做了测试,这次拷贝230KB数据仅需724us,这个值险些已经逼近了理论盘算值(230KB/4KB) x 12.33us = 708.9us,以是ROM是在没有使能cache下做的数据搬移,真相大白。

//#if defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1)
    /* Region 7 setting: Memory with Normal type, not shareable, outer/inner write back. */
    MPU->RBAR = ARM_MPU_RBAR(7, 0x30000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);
//#endif

  这个发现也告诉我们使用memcpy()函数搬移Flash数据,在是否使能cache的情形下执行效率相差异常大,为什么会有这么大的差异,痞子衡底下会专门写篇文章具体剖析。

  至此,恩智浦i.MX RT1170 FlexSPI NOR启动时间痞子衡便先容完毕了,掌声在那里~~~

迎接订阅

文章会同时公布到我的 博客园主页CSDN主页微信民众号 平台上。

微信搜索”痞子衡嵌入式“或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/15744.html