解决qspi-flash驱动直接地址读模式只能访问默认16MB以内的问题

解决qspi-flash驱动直接地址读模式只能访问默认16MB以内的问题

初始化时主要需要配置qspi控制器的寄存器,在对flash进行操作的时候才是通过寄存器端口对flash进行操作;


访问flash的操作主要是有直接地址访问以及寄存器端口访问两种;

其中直接地址访问就是通过地址映射能够直接访问的方式

寄存器端口访问就是通过qspi控制器的CMD寄存器等发送命令进行配置读取擦除等操作

直接地址读寄存器是能够支持flash地址映射到指定地址比如飞腾e2000是0-0x0FFFFFFF

配置一次直接读寄存器,则后续对flash映射的地址进行读取时,都会按照这个寄存器配置的

容进行读取;


所以如果读取的时候只能读16MB以内,表示直接地址读模式已经开启,但地址配置的是3字节模式

而非4字节模式

本问题的解决办法是在初始化的时候配置qspi的直接地址读寄存器即可

对qspi控制器的LD寄存器进行读写可以发送CMD寄存器的指令到flash中

LD以及HD寄存器是当CMD指令后面需要跟上数据(比如地址)的时候使用,并且LD还能用来

当作发送命令到flash的触发动作

qspi的cs_set寄存器的值需要从flash的芯片手册中AC部分查看

一个非常好的读代码的方式是,每个功能逐次取看里面调用的函数

比如flash擦除功能,调用了do_flashe1函数,在这个函数里逐句去看,遇到调用函数的部分

就去这个调用的函数里面查看函数的内容,逐步把所有功能都看懂,同时就能够把所有函数看完

需要熟读qspi控制器以及flash芯片手册

flash的芯片手册里面的指令有两个,分为3字节模式以及四字节模式,比如擦除是D8H/DCH
其中DC是四字节模式

如图中的8‘hf0表示,8是该标志位占用8个bit,h是指后面的数据格式是十六进制,f0是指设置的值

posted @ 2026-01-28 18:16  Linux驱动开发  阅读(3)  评论(0)    收藏  举报