飞凌提供应用笔记和kernel源码来看,是将Nor Flash的设备s29lxxxs看做一个MTD设备,MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化硬件驱动框架。 采用的驱动总线是GPMC,是TI公司特用的总线,接触过STM32的同学应该了解FSMC,跟FSMC类似,也是一种内存控制器的总线,gpmc主要用于与nandflash,norflash,fpga进行通信。
GPMC信号线介绍
GPMC分别有下面所示这些信号线。
A【27:0】:gpmc的地址总线
A【16:1】 :gpmc的地址线和数据线复用
nCS【7:0】:gpmc的片寻信号线(低电平有效)
CLK :gpmc的外部时钟信号线
nADV/ALE:gpmc的地址和数据信号使能引脚 (低电平地址有效)
nOE/nRE:读取信号线(低电平有效)
nWE : 写信号线(低电平有效)
飞凌AM6254开发板与Nor Flash的地址线与数据线是复用的
基地址与区域大小的配置选择见下图,其中配置的寄存器为GPMC0_CONFIG7,对应寄存器基地址为0x3b000000,范围为0x400,
其他具体介绍,可以参考,飞凌提供的原厂资料:OK6254-C_linux5.10.87+Qt5.14.2_ 用户资料_R1_20220707\原厂资料\AM62x.pdf 12.4.3章节有对GPMC详细的介绍:
GPMC的设备树与内核驱动分析
设备树文件:arch/arm64/boot/dts/ti/OK6254-C.dts
GPMC的nor flash的引脚设备树配置:
Nor Flash的设备树参数配置:
AM6245的 GMPC控制器设备配置:
其中gpmc中的nor flash 的基地址配置在下面函数中,配置的是128MB的大小,基地址是:0x02000000
文件为:drivers/memory/omap-gpmc.c 为gpmc控制器的驱动。
mtd的设备驱动文件在:drivers/mtd/gpmc_nor.c,下图的分别为注册MTD设备的读写方式。以及注册MTD设备
总结:
GPMC的的单次读取周期为112ns,远高于采用传统spi接口驱动的nor flash,可见AM6254的处理器的GPMC接口驱动nor flash更有利于快速读取写入nor flash。