首页 > 编程知识 正文

卡西欧g-shock wr208ar使用教程,夏普sharp ar-2048nw的使用方法

时间:2023-05-05 12:42:43 阅读:232970 作者:4273

简介

本文总结本人最近的一项工作:NEXYS A7开发板通过Xilinx FPGA自带的Microblaze CPU核来完成读写FLASH操作。

首先吐槽一下,Microblaze核的资料太有限,虽然这个核其实性能还可以,但无奈是用的人太少了。CPU这种东西,就是用的人多了,软件资源才能丰富。

NEXYS A7是以 Xilinx Artix-7 系列FPGA为核心的一个开发板,Xilinx的开发工具提供一种软核Microblaze作为嵌入式CPU来使用,本文的目的就是优化Microblaze核读写FLASH的速率,原则上所有Xilinx系列FPGA都可以采用本文的方式来优化。

FLAHS说明 型号:S25FL128SAGNFI00

这个是Spansion公司的flash芯片,现Spansion已经被Cypress公司收购,相应的datasheet可以在网上搜索到。

读写指令

flash支持的读写指令如下表所示

仅介绍两个高速读指令:QOR、QIOR

 

QOR读:

从波形图上可以看到,SPI接口通过IO0信号线发出intruction+addr之后,经过8个dummy cycle后,以4线的方式返回当前地址的数据。并持续返回之后地址的数据,一直到读完整个地址!

也就是说,如果发一个从0地址开始的读命令,flash将自动返回整个地址空间的数据,且不会有额外的延时开销。此时是最理想的情况,将会达到理论最大速率。

 

QIOR读:

从波形图上可以看出,它比QOR读指令发addr的效率更高,QOR读需要24个时钟来发送24bit的addr,而QIOR读则通过4线来发送addr,因此仅需要6个时钟。

这种特性,对于高密度的访问非连续地址的应用场景非常合适,比如flash支持的XIP模式,即直接在flash上运行程序,那就需要flash读数据的延迟尽可能的小,此时QIOR读就显得非常有必要了。

 

页-page、扇区-sector、块-block

以上述组织形式的flash为例,

每页(page)为256字节(Byte)。一般以页为单位去写flash(又称“编程”),即每次要写256字节的数据。

扇区(sector)是flash做擦除的最小单位,即每次最少擦除一个扇区,也可以擦除4个扇区等。

典型的扇区(sector)大小为64KB,其包含64K/256=256个页(page)

有的flash在尾部/头部存在一组4KB大小的扇区,其包含4KB/256=16个页(page)

上述例子的flash,有254个64K字节大小的扇区 和 32个4K字节的扇区,总地址0x0000_0000 ~ 0x00FF_FFFF,共16M-Byte,即128M-bit

块(block)则是一组扇区(sector)的组合,没有固定大小,如4个扇区、8个扇区、16个扇区、半个芯片的扇区 等等。

 

实测性能:

 系统工作时钟为100Mhz,例化SPI模块来读写flash,timer模块来计时,uart模块来打印log

测试读10个page,即2560字节的数据量

采用QOR读指令(0x6B),用时2.593ms,数据速率0.987MBps

采用QIOR读指令(0xEB),用时2.581ms,数据速率 0.991MBps

测试读200个page,即256*200=51200=50K字节的数据量

采用QOR读指令(0x6B),用时41.462ms,数据速率1.206MBps

采用QIOR读指令(0xEB),用时41.450ms,数据速率1.206MBps

通过上述结果可以看出,每次读取的数据量越大,实际数据率会越高。

上述程序如果在片外ram上运行的话,数据速率会大大下降,实测最大数据率小于0.6MBps,可以软件的延迟开销占据了主要因素。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。