宝视来
明基
鸿合
快速搜索:

闪存接口

——单片机在LED屏硬件的设计
2014年02月10日 09:07  来源:中国数字视听网  字体【   

3.3闪存接口

闪存的存取有特殊的时序,闪存的内部结构也和具体应用要求有很大的不同。因此闪存的接口需要仔细设计。

K9F4008闪存芯片的存储结构组织如图2所示。

存储组织

K9F4008存储组织

K9F4008闪存的存储以块为单位,每个芯片共有128块。每块有32行,每行有4个帧,每帧含有32B.全部芯片为512KB。

闪存接口提供的闪存初始化函数中就包括对这样情况的处理。初始化函数要从闪存的第一个块中读出一个块映射表,该表下标是逻辑扇区,表内每项存储的是该逻辑扇区对应的物理块编号。初始化函数在必要时对闪存进行读写校验,然后将坏块从表中删除。再寻找新的良好块,将其编号填入到对应逻辑扇区的表项中。这样对应用来说,只见到连续的扇区编号,而不知道扇区究竟对应到那个块。

闪存的接口头文件Flash.h如下:

#ifndef_K9F4008_H_

#define_K9F4008_H_

voidread_log_page(u8sector,u8page,u8xdata*buf);

u8prog_log_page(u8sector,u8page,u8xdata*buf);

voiderase_log_blk(u8sector);

bitflash_init(void);

#endif

实现闪存的接口,首先就是依据说明书的时序定义闪存的基本操作。这里是以宏定义实现基本操作的。

#defineW_CMD(cmd_)\

bCLE=1;bWE=0;P2=(cmd_);bWE=1;bCLE=0

#defineW_ADDR(addr1_,addr2_,addr3_)\

bALE=1;bWE=0;P2=(addr1_);bWE=1;\

bWE=0;P2=(addr2_);bWE=1;\

bWE=0;P2=(addr3_);bWE=1;\

bALE=0

#defineW_DAT(dat_)bWE=0;P2=(dat_);bWE=1

#definewait_RBwhile(!bRB)

#definel2p(x_)fat_tbl[(x_)]

3.4EEPROM

内部集成的EEPROM是与程序空间分开的,利用ISP/IAP技术可将内部DATAFLASH当EEPROM,擦写次数10万次以上。EEPROM可分为若干个扇区,每个扇区包含512B.使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。

sfrIAP_DATA=0xC2;//Flashdataregister

sfrIAP_ADDRH=0xC3;//FlashaddressHIGH

sfrIAP_ADDRL=0xC4;//FlashaddressLOW

sfrIAP_CMD=0xC5;//Flashcommandregister

sfrIAP_TRIG=0xC6;//Flashcommandtrigger

sfrIAP_CONTR=0xC7;//Flashcontrolregister

根据使用说明对EEPROM的寄存器进行定义。

(编辑:daisy)

上一页123下一页
中国数字视听网微信公众平台:
搜索“数字视听网”或扫描下面的二维码,关注官方微信平台,开启视听行业新闻资讯新旅程!
本文导航
明基
MAXHUB
快捷
产品关注排行
"扫一扫"关注我