XIP 模式
28 Aug 2024
Read time: 2 minute(s)
在主机模式下,配置 QSPI0 控制器工作于 XIP 模式,可以通过 AXI 直接读取 SPI 的物理地址空间,就像访问内存空间一样,常用于 XIP 启动。在 XIP 模式下,SPI 的物理地址需要映射为 AXI 可访问的逻辑地址。
XIP 控制逻辑主要包括如下模块:
- AXI slave 模块:用于和 AXI master 进行通讯;
- XIP 控制器:将 AXI 的地址和数据信息转换为 SPI 协议规定的传输格式;
- AXI 数据缓存:TX buffer 用于缓存 AXI 发送到 SPI 的命令和地址信息,而 RX buffer 用于缓存从 SPI 接口接收到的数据。
XIP 模式传输:允许 CPU 或 其他 AXI Master 直接从 SPI NOR 获取数据,无需先将数据读取到内存中再获取。这是一种高效的数据访问方式,可以减小内存的使用空间。常用于获取较大的图像数据。
XIP 模式启动:CPU 通过 AXI 直接访问 QSPI 的映射地址读取指令。在系统引导启动阶段,通过 AHB 接口初始化 QSPI 控制器。完成相关配置后,CPU 跳转到 QSPI 映射的起始地址进行取指令,完成系统启动。
XIP 的详细传输流程如下:
- 系统上电后,在引导程序中通过 AHB 访问的方式对 QSPI 设备进行初始化。
在系统启动阶段,需要配置基本的 SPI NOR 初始化信息,配置 SPI NOR 配置寄存器的 QE 位为 1 ,确保其工作在 Quad 模式。
- 通过
XIP 模式相关的寄存器,并使能 XIP 模式传输。配置流程如下:
- 配置 SPI_RCM 寄存器,包括读命令指令值,dummy 数量,读命令 bypass 模式使能,Mode 字节等信息。
- 配置 SPI_BTR 寄存器,包括突发传输配置命令指令值,传输位宽,dummy 数量,回环和线性模式指令等信息。
- 配置 SPI_TMC 寄存器,配置 QADDR_EN 位置 1,选择 QIO 模式;配置 QPI_EN 位置 1,选择 QPI 模式。
- 配置 SPI_CFG.AMOD 位为 1,使能 XIP 模式。
注: 如果 SPI NOR 使能读命令 bypass 模式,则除第一笔读操作外,后续的读操作将无需重复发送读命令。此配置可以简化读取流程,提升数据访问效率。 - CPU 通过 AXI master 地址通道发起读请求,AXI slave 接收到读请求,获取地址信息、突发传输类型和突发长度。
- XIP 控制器从寄存器 SPI_BTR 和 SPI_RCM 获取固定的数据传输格式,该方式仅支持 Quad I/O 和 QPI 模式。
- 按照解析得到的传输格式,QSPI 控制器自动发送读命令,读取指令或数据信息并将其缓存到内部 RX buffer。
- CPU 通过 AXI master 数据通道从 RX Buffer 中获取指令或数据。
完成以上操作后,完整的读操作即告完成。
注: 如果开启 Cache 功能,CPU 每次读取 32 个字节数据,相当于一条 cache line
的大小,此时只需要配置一次突发长度即可。后续的 cache 读取都会使用这一固定的突发长度,且突发类型为 WRAP 模式,以此提高数据处理效率。