ZYNQ-7000移植easyflash

一、EasyFlash

       Easyflash是一个开源的轻量级嵌入式Flash存储器库项目,可以将flash指定长度地址模拟为一个小型KV数据库,其资料在网上较为详尽。

二、ZYNQ-7000flash

1、硬件环境

     笔者所用的zynq-7000开发环境为米联客开发板,其上flash有两片,第一片是厂商是MICRON,第二片是SPANSION,两个flash大小都为16M,两片因此每个flash芯片的最大访问地址为0XFFFFFF。

2、flash驱动

       要移植easyflash首先需要具备完整的flsah驱动,但是米联客的驱动代码不太完善且存在bug,需要自行封装可用代码。

     网上帖子对于zynq flash驱动的描述大同小异,都是通过封装指令接口调用函数s32 XQspiPs_PolledTransfer(XQspiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, u32 ByteCount);实现基本的写入、读取和擦除等功能,该函数的作用是驱动向Qspi设备控制器发送指令和数据,Zynq Qspi设备控制器的指令格式可以通过芯片手册查询,如下图:

        可以看到长度为1byte,2byte和3byte的指令分别由不同的寄存器发送,而数据发送使用0X1C寄存器,一次发送四字节数据。根据实测结果,当我们向flash写一个字节数据时,会引入三个字节无效值,因此当写入数据小于四个字节时,实际写入数据为四个字节。该问题比较隐蔽,但是在easyflash写header信息时需要实现单字节写入,因此移植后可能异常。对于该问题的处理是方式之一,当写入数据不是四字节对齐时,每次写入前先读取出基地址Address偏移写入长度ByteCount后的三个字节数据(最多),然后将读取数据填充到写入数据后使之四字节对齐,从而保证只写入实际传入数据。

      需要注意的是读操作不可放在写使能和写操作之间,否则使能失效。

三、EasyFlash移植

      EasyFlash模块接口较为友好,用户主要需要在ef_port.c文件中适配flash驱动即可实现基本功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值