查看: 2436|回复: 2

[原创] 【经验分享】RT1050 MX25U6432 QSPI调试

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20067
最后登录
2024-4-28
发表于 2021-10-22 17:49:14 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-10-22 17:51 编辑

【经验分享】RT1050 MX25U6432 QSPI调试
一 文档说明
   最近总是遇到客户在使用RT10XX加上外部QSPI flash的自定义板子遇到不能启动的问题,所以本文以客户实际板子RT1050+MXICMX25U6432芯片为例,给出如何调试一个和官方板子不一样的RT+QSPI情况。


二 测试准备与测试
   首先查看开发板的QSPI是否连接在RT的flexSPI的boot引脚,如果是MIMXRT1050-EVKB板子换QSPI 芯片,需要注意电阻修改:
OPTION1: USE Hyperflash( DNPR153~R158, Mount R356,R361~R366)
OPTION2:USE QSPI FLASH(Mount R153~R158, DNP R356,R361~R366)
   其次,在确定开发板能够使用JLINK通过SWD接口找到内核的情况下,可以借助SDK的flexspi_nor_polling_transfer工程对外部的QSPI初步测试,主要查看QSPI是否可以正常通信,擦写,读取和编程。如果这一套都可以,说明QSPI和RT芯片的硬件通信完全没有问题,可以烧录客户的APP予以debug。
   flexspi_nor_polling_transfer在SDK中的工程路径:
SDK_2_10_0_EVKB-IMXRT1050\boards\evkbimxrt1050\driver_examples\flexspi\nor\polling_transfer
  测试该工程的时候需要注意,代码需要下载到芯片RAM中测试,这里以MCUXpresso IDE为例:
1.jpg
图1
  调试之前,还需要确认如下几点:
a.     LUT相关的QSPI操作命令是否一致,需要查看使用的QSPI 芯片数据手册去对比。
b.    QSPI QE 位是否一致,如果不一致需要修改寄存器值位置

2.1  MX25U6432 LUT命令对比
主要查看工程中flexspi_nor_polling_transfer.c中const uint32_t customLUT[CUSTOM_LUT_LENGTH] 相关的命令。
和源SDK对比,主要两点区别:
1)    /* Erase Sector  */
  1.     [4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
  2.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD7, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

  3. to

  4.     /* Erase Sector  */
  5.     [4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
  6.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x20, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
复制代码

2.jpg
图2
2)    /* Page Program - quad mode */
  1.     [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
  2.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
  3.     [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
  4.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

  5. to

  6.     /* Page Program - quad mode */
  7.     [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
  8.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x38, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x18),
  9.     [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
  10.         FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),
复制代码

3.jpg
图3



2.2  QE 位确认
4.jpg
图4
Status1bit 6
对应的代码是:
status_tflexspi_nor_enable_quad_mode(FLEXSPI_Type *base)
#define FLASH_QUAD_ENABLE        0x40
可以看到0X40正好是bit6,这点不需要修改。如果使用芯片不一致,则需要修改为对应的位。

2.3 QSPI读写测试
所以下面直接在RAM中运行,调试结果:
5.jpg
图5
可以看到,芯片的试步,擦除,读取编程都没有问题。


三, APP debug
   本文测试debugger是基于JLINK,下载算法使用超级下载算法RT_UFL.
安装JLINK驱动
安装之后,驱动在C:\ProgramFiles\SEGGER\JLink
下面可以按照RT_UFL的文章调试MCUXPresso 工程:
APP代码可以使用SDK的led_blinky, SDK路径:
SDK_2_10_0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky
调试之前,需要修改XIP文件夹下的FCB,默认的是Hyperflash,内容修改为:
  1. const flexspi_nor_config_t qspiflash_config = {
  2.     .memConfig =
  3.         {
  4.             .tag              = FLEXSPI_CFG_BLK_TAG,
  5.             .version          = FLEXSPI_CFG_BLK_VERSION,
  6.             .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
  7.             .csHoldTime       = 3u,
  8.             .csSetupTime      = 3u,
  9.             .sflashPadType    = kSerialFlash_4Pads,
  10.             .serialClkFreq    = kFlexSpiSerialClk_100MHz,
  11.             .sflashA1Size     = 8u * 1024u * 1024u,
  12.             .lookupTable =
  13.                 {
  14.                     // Read LUTs
  15.                     FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
  16.                     FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
  17.                 },
  18.         },
  19.     .pageSize           = 256u,
  20.     .sectorSize         = 4u * 1024u,
  21.     .blockSize          = 64u * 1024u,
  22.     .isUniformBlockSize = false,
  23. };
复制代码


RT_UFL打包到JLINK驱动之后,需要注意下MCUXpresso 工程的配置,JLINK server选择为:
C:\ProgramFiles\SEGGER\JLink\JLinkGDBServerCL.exe
工程debug device选择为MIMXRT1050_UFL_L0
6.jpg
图6
7.jpg
图7
测试结果如下:

8.jpg
图8

目前为止,完成了外部QSPI MX25U6432的下载与测试,退出debugger模式,芯片启动模式改为internal boot,可以看到Led 灯闪烁。

evkbimxrt1050_flexspi_nor_polling_transfer.zip (8.83 MB, 下载次数: 15)
回复

使用道具 举报

  • TA的每日心情
    开心
    昨天 10:30
  • 签到天数: 147 天

    [LV.7]常住居民III

    10

    主题

    386

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2024-4-28
    发表于 2021-10-25 10:43:47 | 显示全部楼层
    太详细,学习了。。。。
    加油加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 17:31
  • 签到天数: 559 天

    [LV.9]以坛为家II

    34

    主题

    5919

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5715
    最后登录
    2024-4-28
    发表于 2021-10-26 13:27:56 | 显示全部楼层
    十分详尽,感谢!
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 06:08 , Processed in 0.131782 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表