解决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是指设置的值
浙公网安备 33010602011771号