一、 概述
本文将会介绍 SemiDrive E3 MCAL Fls 模块的简介以及基本配置。此外会结合实际操作的介绍,帮助新手快速了解并掌握这个模块的使用,文中的 MCAL 是基于 PTG3.0 的版本,开发板是官方的 E3640 网关板。
二、 Fls 模块简介
Fls 模块主要提供了对 XSPI 总线上的设备的读写擦服务,硬件上支持以下接口:
- Standard SPI
- Dual SPI
- Quad SPI
- Octal SPI(Hyperbus)
支持以下几种工作模式:
- Single mode,该模式下只有一个设备连到了XSPI 控制器。
- Switch device mode,该模式下有 2 个设备连到了 XSPI 控制器,SCLK/DQS/DQ 引脚都是相同的,但是有不同的片选引脚,同一时间只有其中一个片选引脚有效,具体接线如下图所示。
图 2.1 Switch device mode 连接图
(3)Dual core mode,该模式下2 个设备分别连接到 XSPI 控制器的 core0 和 core1,两个设备分别独立工作。具体接线图如下。
图 2.2 Dual core mode
(4)Parallel mode,该模式下,两个设备工作在并行模式,提供双倍的内存空间。
图 2.3 Parallel mode
(5)Lockstep mode,该模式下两个一样的内存设备分别连接到 XSPI 控制器的 PortA 和 PortB,所有对设备 A 的内存访问将和设备 B 完全一样,并且有 2 个周期的延迟。
三、 Fls 模块的主要配置
下面将对 Fls 模块的配置进行介绍,首先是 Fls 模块的通用配置。主要注意以下几个配置项,具体如下图所示。
图 3.1 Fls 模块通用配置一
图 3.2 Fls 模块通用配置二
FlsBaseAddress:该配置项用于配置 Fls 模块的基地址,该地址不是实际的物理地址。
FlsDefaultMode:可以配置为 Fast 或 Slow 模式。
FlsJobEndNotification:Job 完成回调函数,根据实际需求配置。
FlsJobErrorNotification:Job 错误回调函数,根据实际需求配置。
FlsMaxReadFastMode:Fast 模式每次调用 MainFunction 最大读取长度。
FlsMaxReadNormalMode:Slow 模式每次调用 MainFunction 最大读取长度。
FlsMaxWriteFastMode:Fast 模式每次调用 MainFunction 最大写长度。
FlsMaxWriteNormalMode:Slow 模式每次调用 MainFunction 最大写长度。
接着对 Fls 的Sector 进行配置,具体配置项目如下图所示。主要根据实际的 Flash 型号查看手册进行配置。
图 3.3 Fls 模块 Sector 配置
最后配置 Fls 模块的 OSPIController,具体如下图所示。
图 3.4 Fls 模块 Sector 配置二
主要的配置项目如下:
- OSPIController:根据实际的硬件连接选择 XSPI1 或 XSPI2。
- OSPIControllerPort:根据实际连接选择 PORTA 或 PORTB。
- OSPIControllerInterface:选择接口类型:SPI NOR 或 HYPERBUS。
- OSPIDeviceMode:选择 XSPI 的工作模式,总共有 5 种,具体参照第二章节的介绍。
- OSPIBusClockFrequency:配置 XSPI 初始化时钟频率。
- ExternalFlashSelect:特殊 Flash 类型选择,默认选择 Auto。
四、 实际操作
完成 Fls 模块的配置后我们需要进行实际验证,具体的验证代码如下图所示。该代码对 0x80000 的 Sector 进行写和回读比较的操作。
图 4.1 Fls 模块测试代码
将代码烧录到板子后重新上电运行,接上串口,输入命令 “runcase 2104” 对 flash 进行初始化,然后再输入 “runcase 2105”运行测试代码,具体的测试结果会打印出来,运行结果如下图所示。
图 4.2 串口打印信息
五、 参考资料
1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08