发表于:2009/9/2 14:13:13
#0楼
在新设计的arm项目中基本都是用m25p(代码存储)和m25pe(数据存储)系列作为代码和数据的存储;m25系列之前是st公司的产品,现已把flash memory产品线转移到一家和intel等几家公司合资的名为
“
numonyx
”
的公司了。下面是一些flash memory 内存的软硬件设计心得体会随笔:
m25p 、m25px和m25pe/m45pe的区别
m25p - serial flash for code storage (代码存储)
http://blog.gkong.com/http://blog.gkong.com/images/file/pdf.gif" alt='图' onload="img_onload(this,{t:1})" />
m25p64.pdf
the m25p series offers added value to both high- and low-end applications with fast system speed. sequential read capability. low power consumption, small package and low cost.( 简单说,m25p提供了高速、连续读、低功耗,但它的指令集并不适合用于保存数据用,因为没有单字节的读写指令,m25p的编程模型如下:
(1) 写使能
(2) sector erase // 扇区清除,其实是把扇区写允许位所在的区域全部置为ffh。
(3) page programming // 只有(1)和(2)被正确执行后才有效。
m25px - serial flash for high performance (扇区读写的粒度在m25p和m25pe之间,但速度最高和效能最高,一般应用于机顶合之类的高端产品)
the sector/sub-sector erase serial flash family is offered with dual i/o and paves the way to multiple i/o technology. the m25px family offers improved speed of operation over the entire supply voltage range. as well as an extended temperature range.
m25pe/m45pe - serial flash with page erase (用于代替eeprom之类的数据存储解决方案;
他的常用程度可从proteus中有该系列的仿真模型可看得出
)
http://blog.gkong.com/http://blog.gkong.com/images/file/pdf.gif" alt='图' onload="img_onload(this,{t:1})" />
m45pe20.pdf
http://blog.gkong.com/http://blog.gkong.com/images/file/pdf.gif" alt='图' onload="img_onload(this,{t:1})" />
an2081 - how to migrate from the m95 spi eeprom to the m25pe spi serial flash (314kb, .pdf
the m25pe/m45pe are high-capacity, non-volatile memories offering a higher granularity and fast transfer of data and parameters. the 256 byte page can be individually erased and programmed, with a write instruction that offers the ability to update data at the byte level
. (有单字节更新指令是m25pe/m45pe作为数据和参数存储器的最直接的支持 )。
m25p 、m25px和m25pe/m45pe 编程
虽然汇编语言在嵌入式系统中是不可或缺,换句话说,汇编语言是每个嵌入式程序员所必顺学习的;因为他是最接近于机器码的符号语言,学习汇编语言其实更深层次的意义是通过对特定系列mcu的汇编语言的学习,从而学习该mcu的体系结构,在编程时能更有效地控制该mcu和优化c代码。
但实际编程中,“c” 现在是绝对的嵌入式编程语言首选,m25p、m25px和m25pe等芯片numonyx公司都提供了基于ansi c的驱动程序模板,基于该模板,可写出移植性和可读性都非常好的模块化程序。
http://blog.gkong.com/images/file/zip.gif" alt='图' onload="img_onload(this,{t:1})" />
m25pexx模板.zip.rar
http://blog.gkong.com/images/file/zip.gif" alt='图' onload="img_onload(this,{t:1})" />
m25pxx.模板zip.rar
(去掉.rar,其实是zip格式的)
现在嵌入式编程也却来却讲究可移植性、可读性和通用性。因此很多公司都提供了针对某个系列mcu的库(如st公司的stm32 库);这些库的运行性能是不高,但提供了用户一个标准接口,从而能节省很多资源,同时,对于那些运行效率很差的嵌入式系统程序,往往不是因为用了这些标准库的原因,而是程序设计者本身的功力问题(比如放着realease版本的lib不用非要用debug版本的lib
),因为在嵌入式系统开发中,讲究的是有针对性的优化程序,而不是一开始就把优化程序放在首位。
在这里讲下我对 flash memory 编程的理解如下:
(1)flash memory 分并行总线接口式的(直接连接mcu的地址总线、数据总线、控制总线),比如在用s3c44b0x(就象8051系列中的8031)来开发时就必须外接flash memory(k9f2808u0c 16m*8bit nand flash memory). 这种flash可直接寻址(由存储器控制器管理),编程方便。缺点就是管脚多,布线复杂。
另一种就是spi flash memory ,这种flash现在用得更为广泛,因为硬件连接线只要cs、in、out (可选:复位,保持,有的提供了忙与不忙的输出,这样就不用轮询而可用中断来判断flash 芯片是否正忙)。串行通信的芯片的一个缺点就是要编写一个接口,用于提供对芯片的读、写控制。换句话说,就是编程繁杂一点。而且要理解spi接口的定义才行。
spi接口的flash编程最关键的是要理解如下的几个内容:
(1)提供了spi接口的mcu说明了mcu已用硬件的方式实现了spi接口协议,我们所要做的只是设置mcu的spi的相关控制寄存器以符合对应的spi flash memory的协议接口,比如mcu都设成master(主模式);时钟线开始时是处于高还是处于低;接收数据是从第一个时钟沿(上升或下降沿)还是第二个时钟沿;时钟的波特率;发送的数据是8位的还是16位的等等。只要把mcu的spi设置得匹配spi flash memory的手册中所要求的。
通信其实是由硬件实现的
。
(2)要理解 spi flash 的指令集,我们可以想象spi flash其实相当于另一个mcu,因此,我们如何通信呢,由于没有集成“存储器控制器”这样的器件来无缝地和flash进行通信,因此,我们只能象写串口通信那样把我们所要求对方实现的功能以数据包的形式发送给 spi flash,这里所讲的指令集,其实就是封装在由spi硬件解码的数据帧中的能被spi flash理解的操作码和操作数。spi flash 接收到这些指令后,会执行相应的操作,这需要一些的指令周期,在操作的过程中,spi flash会设置相应的寄存器(status reg)位来反映当前的状态,而我们常常通过发送读 spi flash状态寄存器的指令去读 spi flash的当前状态,从而进行编程控制的。
在这里要强调一下的是:spi flash 其实内部集成有cpu的,所以他才能在执行mcu的命令时,也能继续接收mcu发送的指令(spi发送过去的);并进行处理。理解这一点是 spi flash memory 编程的关键
!!!!!
m25p 、m25px和m25pe/m45pe 硬件设计原则
(1)尽可能接近mcu、远离高emi 源(如晶振)
(2)由于flash 的速度高,所以要局部处理一下它的电源供电,比如加一个104和一个1uf和一个磁珠的组合。当要处理掉电保存时,可能还要加一个0.47f左右的超级电容和结合相关的电路,实现掉电数据的正确保存。
(3)一般来说,在时钟线上加100k的下拉电阻;在片选线上加一个10k的上拉电阻。它们的作用不外乎使空闲时处于一个明确的状态;保证空闲时时钟线和片选线的电位相反;时钟线上的电阻并不是随便选的,由于有分布电容的存在,所以时钟的下升沿和下降沿的时间受该下拉电阻和分布电容所影响(t=r*c);上/下降沿太陡emi增加,太缓不满足通信速度的要求。这要具体问题具体分析或用示波器具体读出。
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=99172&Name=zjcsharp