本帖最后由 小恩GG 于 2023-10-27 16:34 编辑
一, 文章简介 最近有客户RT1050项目中使用一款QSPI flash( Puya simiP25Q16H)作为XIP memory,但是总是遇到第一次下载不成功,重新上电之后再次下载能成功,app也能跑的现象,下载算法是使用超级下载算法RT-UFL。经过分析,这种情况通常和新的QSPI flash的QE没有使能有关。于是,笔者根据客户使用的QSPI flash的QE位置,在SDKflexspi_nor_polling_transfer代码中特地做了对应QE使能,让客户跑在RAM中运行,去查看使能QE之后,是否还有之前的新芯片烧录的问题。但是客户连flexspi_nor_polling_transfer都无法跑下去,根据客户之前的描述是硬件能够跑RAM代码,并且第一次下载不行,重新下载之后就能运行了,所以硬件APP实际上是能够运行。根据现象,初步推测新问题的出现可能和FlexSPI DQS被占用有关,通常情况下,推荐FlexSPI DQS浮空。因为给客户的flexSPI频率是120Mhz,如果DQS被用,FlexSPI read data的内部采样时钟源为:Read strobe provided by memory deviceand input from DQS pad,这种方式是会有问题的。所以再次让客户确认硬件,果然DQS在客户板子上被用作其他电路的控制引脚,通常这种情况有两点注意: 第一,FlexSPI时钟控制在60MHz之内。 第二,FlexSPI read data的内部采样时钟源配置为: Dummy read strobe generated by FlexSPI controller and looped backinternally (FlexSPIn_MCR0[RXCLKSRC] = 0x0) 所以,本篇文章重在,如何根据客户使用的QSPI flash,去准备对应的QE位置的测试代码,考虑DQS被使能情况下的操作,以及配套超级下载算法的修改与测试。 |