Edit online

XIP 模式

在主机模式下,可以配置 QSPI0 控制器工作在 XIP 模式,即通过 AXI 可以直接读取 SPI 的物理地址空间,就像访问内存空间一样,常用于 XIP 启动。此时,SPI 的物理地址需要映射为 AXI 可访问地址。实现 AXI 直接访问模式,主要包括两个模块:

  • AXI slave 模块:用于和 AXI master 进行通讯,并将地址和数据信息转换为 SPI 的地址和数据内容。
  • AXI 数据缓存:TX buffer 用于缓存 AXI 发送到 SPI 的命令和地址,RX buffer 用于缓存从 SPI 接收回来的数据。

XIP 模式传输

通过配置寄存器使能 XIP 模式传输,该功能主要用于 XIP 启动和读取部分不常用的代码数据,CPU 直接从 QSPI 取指令和数据,不用将数据拷贝到 SRAM 再读取。

对于 XIP 启动,CPU 通过 AXI 直接访问 QSPI 的映射地址进行取指令。在引导启动阶段使用 AHB 的方式初始化 QSPI, 随后跳转到 QSPI 映射空间的起始地址进行取指令。

控制器支持 8/ 16/ 32/ 64 字节的突发长度配置,可用于 XIP 模式。XIP 的传输流程如下:

  1. 系统上电后,在引导程序中通过 AHB 访问的方式,配置基本的 SPI NOR 初始化信息,使能 SPI NOR 工作在 Quad 模式;
  2. CPU 通过 master 发起读请求取指令,AXI slave 接收到读请求,获取地址信息和突发传输类型和长度;
  3. XIP 控制器从寄存器 SPI_BTRSPI_RCM 寄存器获取固定的数据传输格式,该方式仅支持 Quad I/O 和 QPI 模式;
  4. QSPI 控制器按照解析的格式进行数据传输,读取指令或数据信息并缓存到内部 RX buffer;
  5. 当 RX buffer 满时,AXI slave 将 ready 信号拉高,CPU 的 AXI master 开始取数据;
  6. 以上,完成一次读操作。

当开启 Cache 功能,CPU 每次读取 4*64bit 数据,相当于一条 cache line 的大小,此时只需要配置一次 NOR 的突发长度即可,每次 cache 读取数据都会使用固定的突发长度,且突发类型为 WRAP 模式。

如果 SPI NOR 配置为读命令 bypass 模式,之后的读操作不需要再发送读命令。