文件系统在EEPROM中的应用
扫描二维码
随时随地手机看文章
摘要: 介绍文件系统在Atmel公司的EEPROM芯片AT24C512中的应用。本文主要针对嵌入式Linux系统,通过编写EEPROM的块设备驱动程序,并格式化为相应的文件系统,从而达到按文件方式存取EEPROM的目的。
关键词: EEPROM; AT24C512; Linux; 文件系统
引言
在嵌入式系统中,EEPROM凭借使用简单、性能可靠、价格低廉的特点而广泛应用于小量而又重要的数据存储领域。目前,嵌入式产品层出不穷,应用繁多,相应的EEPROM随之出现。其中,两线EEPROM因其引脚少、封装小得到广泛应用。本文主要针对两线EEPROM AT24C512来创建文件系统,当然也适用于其他同类产品。
1 AT24C512简介[1]
AT24C512是Atmel公司生产的串行电可擦的可编程存储器。它采用8引脚封装,具有可掉电记忆、结构紧凑、64 KB存储容量等特点,可以在2线总线上并接多片芯片,适用于具有较大容量重要数据存储要求的嵌入式系统。
1.1 封装及引脚介绍
500)this.width=500" border="0" />
图1 AT24C512引脚图
AT24C512有多种封装:TSSOP、PDIP、SOIC、dBGA2、SAP等。其引脚顺序如图1所示。
A0,A1:设备地址。当串行总线上挂接多片EEPROM芯片时,用这个地址来区分各芯片。
SDA:串行数据。
SCL:串行时钟。
WP:写保护。低电平写允许,高电平写禁止。
VCC:电源。
GND:地。
NC:悬空。
1.2 芯片操作简介
(1) 设备寻址(device addressing)
在读写EEPROM前,需要一个开始标志和一个8位的设备地址去寻址。其设备地址格式如下:
500)this.width=500" border="0" />
其中,最后一位为读写操作位,1表示读操作,0表示写操作。[!--empirenews.page--]
(2) 写操作
AT24C512提供字节写和128字节页写功能。字节写与页写操作主要区别在于:后者不需要每写入一字节就提供一个结束标志,而是在处理器得到应答信号后继续写入数据,直到写完小于等于一页的数据。字节写和页写的操作如图2和图3所示。
500)this.width=500" border="0" />
图2字节写操作
500)this.width=500" border="0" />
图3页写操作
(3) 读操作
AT24C512的读操作有多种模式,包括当前地址读、随机地址读和连续多字节读3种方式。读操作基本与写操作同。当前地址读操作不发送片内地址,每次只读取当前地址的数据,片内读地址自动加1,直到读完整片EEPROM后置0。随机地址读操作需先指定片内地址,然后读出数据。而连续多字节读操作则综合了上述两种方式,既可以是当前地址读,也可以是随机地址读。每当处理器接收到一字节数据后返回一个ACK,EEPROM收到此ACK后地址自动加1,接着输出下一个字节数据,直到控制器返回NO ACK时,读过程结束。
2 AT24C512与主控芯片的连接
采用Atmel公司的工控芯片AT91RM9200[2]作为主控芯片。AT91RM9200有专用两线接口,可用来连接AT24C512。AT24C512与主控芯片的连接如图4所示。
500)this.width=500" border="0" />
图4 AT24C512与主控芯片的连接电路
由于AT91RM9200内部有两线控制器,因此对AT24C512的访问只需操作AT91RM9200的内部寄存器,而无需人为模拟AT24C512的访问时序。这为编程提供了方便,同时也保证了可靠性。这里以写操作的流程为例,简要介绍在主控芯片AT91RM9200下如何对AT24C512进行编程,如图5所示。
500)this.width=500" border="0" />
图5 写流程
3 Linux块设备驱动
3.1 Linux块设备驱动模型[3]
在Linux系统中(本文使用Linux内核2.6.28),设备驱动程序通常有固定的模式,既为编写具体的驱动程序提供了方便,也减少了错误的发生。在编写块设备驱动程序时,首先用register_blkdev注册块设备,之后分配处理函数。处理函数主要包括:request函数,当有读写操作时内核会调用该函数;open函数,用于打开设备;release函数,用于释放设备;ioctl函数,用于查询或设置一些信息。最后向内核注册磁盘。在这个过程中,最重要的一个结构是struct gendisk。上述所描述的处理函数都被写入该结构体,将该结构体必要的字段赋值后,就可使用add_disk将该结构体添加入内核。此时,磁盘设备将被激活,并随时会调用它提供的方法。[!--empirenews.page--]
3.2 在块设备驱动中访问EEPROM
为了访问EEPROM,就需要将对EEPROM的操作与块设备驱动关联起来。首先是在块设备驱动初始化代码中调用at91_twi_init对EEPROM进行初始化,然后在块设备传输函数block_transfer中调用AT91_TWI_Read和AT91_TWI_Write进行读写操作,这样就使得块设备驱动和EEPROM关联起来了。
为了提高效率,在对EEPROM写操作时采用页写模式。这里要注意的是,需要对写入的数据进行分割,因为AT24C512 提供的是128字节页写功能,如果多于128字节,需分成128字节的倍数。同时注意,在一次写结束时,应等待1个写周期时间,再进行其他的操作;在进行读操作时,为了提高效率,应采用连续多字节读方式。
4 建立文件系统
为了按文件方式存取EEPROM,在块设备之上建立文件系统是必要的。由于AT24C512只有64 KB的容量,建立文件系统时,应该选择本身占用空间少的文件系统。当然这要根据具体需求来作出决定。
下面以msdos、minix、ext2文件系统为例作个比较。首先分别使用mkdos、mkfs.minix、mke2fs 对块设备格式化,并挂载到某个目录下。在未写入任何文件数据的情况下,其结果如表1所列。
表1 文件系统对比
500)this.width=500" border="0" />
AT24C512 EEPROM只有64 KB容量,相比磁盘等大容量的存储设备,除稳定性外,最主要考虑的是有效空间利用率。从表1中可以看出,在这3种文件系统中,msdos文件系统的空间利用率要高一些,minix文件系统次之,ext2文件系统最低。但是msdos文件系统的缺点是只支持8.3格式的文件名,而minix文件系统支持的文件名最多为14个字符,ext2文件系统支持的文件名长度则高达255个字符。当然,实际采用何种文件系统应根据具体要求来作出选择。
5 结论
由于AT24C512这类串行EEPROM本身固有的特性,在写入和读取文件操作时,其响应速度要低于NOR Flash、NAND Flash等存储设备。尽管如此,EEPROM也有其优势,目前仍然大量应用于嵌入式系统中。在EEPROM上建立文件系统,给存取带来了极大的便利,也大大地简化了应用程序的编写。