之前在 “XMCD – i.MX RT11xx系列简单易用的特定外设配置功能”的文章给大家介绍了XMCD功能的基础知识和用法,不过前面是以RT1170为例介绍的,本文将基于RT1180着重介绍XMCD的特点以及使用时的注意事项。
XMCD offset
与RT1170 固定的XMCD偏移位置不同,RT1180的XMCD偏移量因启动设备而异。下表列出了使用不同启动设备时的XMCD偏移量。

XMCD支持配置以下外设:
HyperRAM/APMemory (FlexSPI接口)
SDRAM (SEMC接口)
XMCD配置HyperRAM/APMemory
XMCD利用FlexSPI RAM 配置块来配置连接到FlexSPI接口的HyperRAM或者APMemory PSRAM设备。
与RT1170相比,RT1180在使用XMCD时有一个limitation需要特别注意:
图1 RT1180 FlexSPI AHBCR寄存器
如上图所示,RT1180的FlexSPI模块开放了AHB Boundary Alignment功能且默认设置为No limit,该功能在RT1170中没有开放且默认设置为1KB。
RT1180 XMCD对于该功能保持了默认值设置,也就是对AHB读写操作的边界不做任何限制,因此对于那些规定了读写操作无法跨边界的外设来说,FlexSPI AHB读写一旦跨边界,则会出错。 比如图2中的Dual-die的HyperRAM,图3中的Apmemory厂商的OPI PSRAM,都有不能跨边界操作的要求。
基于此,若需要用到RT1180 XMCD去配置初始化HyperRAM或者APMemory PSRAM外设时,尽量选用没有这些限制的HyperRAM/PSRAM。若实在需要使用,则建议在应用程序中将AHBCR寄存器中的ALIGNMENT域设为非0值后再对HyperRAM/PSRAM进行读写操作。

图2 Dual-die HyperRAM
图3 Apmemory OPI PSRAM
XMCD配置SDRAM XMCD利用SEMC SDRAM配置块来配置连接到SMEC接口的SDRAM设备。相较于RT1170,RT1180在完整版配置方式中新增了图4中的几种配置。
1. SEMC模块DCCR寄存器相关配置
当dccr_en设为0时会使用默认的DCCR寄存器值(默认值为0xB),设为1时用户可以通过dccr_sdramen以及dccr_sdramval自定义设置DCCR寄存器。
2. SEMC模块SDRAMCRx寄存器相关配置
当sdramcr0_en, Sdramcr1_en, Sdramcr2_en, Sdramcr3_en设为1时用户可以自定义SDRAMCRx寄存器的值,设为0时则会将SDRAMCRx寄存器配置成默认的值,默认配置值如下所示:
SDRAMCR0 = 0x00000F30U | (port_size & 0x3U);(port_size为用户定义的)
SDRAMCR1 = 0x00772A22;
SDRAMCR2 = 0x00010A0D;
SDRAMCR3 = 0x21210409;
若选用的SDRAM的相关参数符合默认配置则可以直接选用默认配置,若有区别则需要用户自定义配置。


图4 RT1180新增配置数据结构
使用XMCD
4.1 使用SDK
RT1180 SDK中加入了XMCD功能,采用简化配置HyperRAM或者SDRAM,通过USE_HYPERRAM或USE_SDRAM宏定义选择初始化不同的外设,注意只能定义其中一个宏,因为XMCD不能同时初始化这两种外设。
任意打开一个示例工程,切换到flexspi_nor_hyperram_debug都会包含XMCD初始化HyperRAM的代码。

图5 工程文件中的XMCD
4.2 使用SEC工具
MCUXpresso Secure Provisioning Tool(SEC)是一款可以生成和配置可启动可执行文件的工具,可以支持XMCD功能进行FlexSPI和SEMC外设的配置。配置界面如图6所示:

图6 XMCD配置界面
用户首先需要准备一份应用程序,该应用程序链接到对应外设地址中,且不用带boot header,然后导入工具的Source executable image处。
XMCD下拉栏选择FlexSPI RAM或者SEMC SDRAM,然后点击Edit即可进行对应外设的简化配置,如图7所示:

图7 XMCD配置选择
配置完成后执行Build image生成可启动文件,最后利用Write image下载到板卡即可。
参考
1. i.MX RT1180 Reference Manual
2. XMCD – i.MX RT11xx系列简单易用的特定外设配置功能
