“奥帝斯爱鲁比”通过精心收集,向本站投稿了8篇单片机实现对CF卡的读写,下面是小编帮大家整理后的单片机实现对CF卡的读写,欢迎阅读,希望大家能够喜欢。
- 目录
篇1:单片机实现对CF卡的读写
单片机实现对CF卡的读写
摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。关键词:CF卡 单片机 FAT文件格式
引言
由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。Windows标准文件格式有FAT、FAT32和NTFS。考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系统。单片机系统对CF卡的读写,就是从底层对它进行直接操作,包括寻址、创建文件和读写等。(本网网收集整理)
1 CF卡简介
CF卡内集成了控制器、Flash Memory阵列和读写缓冲区,如图1所示。内置的智能控制器,使外围电路设计大大简化,而且完全符合PC机内存卡的国际联合会PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口规范。实际上,控制器起到了一种协议转换的作用,即将对Flash Memory的读写转化成了对控制器的访问,这样不同的CF卡都可以用单一的机构来读写,而不用担心兼容性问题。CF卡的缓冲区结构,使得外部设备与CF卡通信的同时,CF卡的片内控制器可以对Flash进行读写。这种设计可以增加CF卡数据读写的可靠性,同时提高数据传输速率。
CF卡支持多种接口访问模式,有符合PCMCIA规范的Memory Mapped模式、I/O Card模式和符合ATA规范的True IDE模式。上电时,OE(9脚)为低电平,CF卡进入True IDE模式,此时引脚OE也叫ATA SEL;上电时,OE(9脚)为高电平,CF卡进入PCMCIA模式,即Memory Mapped模式或I/O Card模式,此时可通过修改配置选项寄存器进入相应的模式。
配置选项寄存器格式如下:
SRESETLevelREQconf5conf4conf3conf2conf1conf0SRESET―软复位信号;
Level REQ―中断模式选择(电平或边沿触发)。
例如,要加入Memory mapped模式,只需要在上电时保证OE为高电平,因为配置选项寄存器的conf5~conf0位的初始化值为“00000”;而要进入I/O Card模式,除了上电时保证OE为高电平外,还要进一步设置conf5~conf0,如表1所列。但是对于具体型号的CF卡而言,下面三种情况也是被CFA(CF card Association)所允许的:①上电时进入True IDE模式,工作过程中,只要监测到OE变为高,就退出True IDE模式;②允许卡在复位时重新配置;③上电时进入PCMCIA模式,允许过程中,只要监测到OE变为低,就进入True IDE模式。
表1 模式选择
conf5conf4conf3conf2conf1conf0模 式000000Memory map000001I/O Mapped,对应16位系统000010I/O,对应1F0h-1F7h/3F6h-3F3h000011I/O,对应170h-177h/376h-377h2 CF卡与51单片机的接口
CF卡在PC Memory方式与51芯片的接口电路如图2所示。由于采用CF卡上电后自动进入的Memory模式,而且不存在对特性寄存器的读写,故可将REG接高电平。片选信号CE1和CE2组合可选择数据位宽度,如表2所列。图2中CE2接VCC,选用的是8位(D7~D0)数据宽度。
表2 数据宽度选择
8位(D7~D0)8位(D15~D8)16位高 阻 CE10101CE21001为了实现即插即用的功能,CE卡上提供了两个用来检测卡是否存在的引脚(CD1、CD2),由卡内部接地。当主机检测到与其相连的CD1和CD2两个引脚同时为低电平时,可判断出卡与主机相连;否则,卡未与主机相连。
由于I/O口紧张,RDY/BSY引脚悬空不用,通过查询状态寄存器能判断CF卡是否准备就绪。在实际应用中,由于一次至少要读写一个扇区512字节,所以要扩充一块RAM。我们选用的是62256,容量为32KB,这样便可以支持大到2GB的CF卡(参见下文),增加了其扩展性。
3 FAT文件系统
FAT文件系统是基于DOS的文件系统。常说的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。考虑到CF卡的容量有限,宜选用FAT16。这里只对FAT文件系统作一简单介绍,更详细的内容请见参考文献。
磁盘的寻址方式有两种:物理寻址C/H/S(柱面/磁头/扇区)方式和逻辑块LBA(Logical Block Addressing)寻址方式。二者之间的转换关系为:
LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区数-1
采用LBA寻址方式,没有磁头和磁道的转换操作,在访问连续的扇区时,操作速度比物理寻址方式要快,而且也简化了对磁盘的访问。
硬盘的结构布局分为MBR(主引导扇区)和最多4个逻辑分区(含DOS分区或非DOS分区),而在DOS逻辑分区中的磁盘组织如下:
引导扇区FAT1FAT2根目标区数据区引导扇区DBR(DOS Boot Record):位于LBA 0扇区,包含跳转指令、厂商标识和DOS版本号、BPB(BIOS Parameter Block,BIOS参数块)、DOS引导程序、结束标志字AA55。其中BPB包含每扇区字节数、每簇扇区数、每个FAT扇区数、扇区总线、根目录项数等等参数。
FAT是给每个文件分配磁盘物理空间的表格。FAT16簇数的上限是2 16,即65536个,每簇扇区数的上限是64个,因此其分区空间的上限为2G。FAT1位于逻辑1扇区。FAT簇映射中,0000表示空簇,FFF0~FFF6备用,FFF8~FFFF表示簇链结束,FFF7表示坏簇,其余值表示其后续簇的簇号。图3所示的文件起始簇号为2,结束簇号为4,共占用2、3、4三个簇。
簇是存储文件的最小单位,可以包含多个扇区。当文件本身或文件的最后一簇哪怕只有1个字节,也要占去1簇。这样,当这种文件很多时,空间的浪费是很可观的。
文件目录表FDT(File Directory Table)是操作系统寻找文件的入口,其内容是每一个文件的目录。FDT中的每一个目录项由32个字节组成。前8个字节是文件名,不足时用空格填满。紧跟着的3个字节是文件扩展名,接下来是10个字节的系统保留字。然后是文件产生的时刻和日期占8个字节,再后的2个字节是文件首簇号,最后4个字节是文件大小。FDT的起始扇区可由FAT的大小计算出,而FAT的大小可在DBR中读出。
4 软件实现
按照FAT16方式存储文件,是一个通用的`解决方案。因为这样可以得到现有的DOS和Windows系统的支持,但是代价是浪费一部分空间,也就是说存储效率下降了。为了改善这一情况,采用了改进的存储方法。就是先创建一个空文件,并根据需要为其分配一个大的存储空间,写入动作只是从尾部追加数据。这样就避免了很多小文件的产生,既可以充分利用存储空间,又可以使地址连续。
CF卡的读写是通过卡内的缓冲区进行的,不支持直接读写存储区域。缓冲区为一个FIFO结构,读写顺序进行,不支持随机存取,系统只能一次性地按顺序读完或写完所有一个或多个扇区。
设计时使用LBA方式访问CF卡比较方便,读写时只需要先在相应的寄存器写入LBA地址即可。要设定LBA方式,需访问驱动器/磁头寄存器。内存模式下部分寄存器译码如表3所列。
表3 内存模式下部分寄存器译码
REGA10A9~A4A3~A0offsetOE=0WE=010X00000偶字节读侧字节写10X00011错误寄存器特性寄存器10X00102扇区数扇区数10X00113扇区号(LBA7~0)扇区号(LBA7~0)10X01004低柱面号(LBA15~8)低柱面号(LBA15~8)10X01015高柱面号(LBA23~16高柱面号(LBA23~16)10X01106驱动器/磁头(LBA27~24)驱动器/磁头(LBA27~24)10X01117状态寄存器命令寄存器驱动器/磁头寄存器结构如下:
1LBA1DRVHS3HS2HS1HS0LBA―1为LBA方式,0为C/H/S(柱面/磁头/扇区)方式;DRV―选择驱动器0或驱动器1;HS3~HS0―LBA27~24,或为C/H/S方式的磁头号。
文件创建过程也就是针对FAT和FDT的读写过程。首先在FDT中申请表项,创建文件名称、属性、起始簇号、文件大小等,然后修改FAT,分配数据空间,备份FAT。文件存储就是要先从FDT和FAT中获得文件的起始簇号和簇号链,即LBA地址。然后,将此地址送给寄存器3、4、5、6(表3中的offset3、4、5、6),向扇区数寄存器填写读写数据所占的扇区个数,再向CF卡的命令寄存器写入操作的命令字,写操作30H,读操作20H。当写入命令或写入数据后要查询状态寄存器的状态,以判定CF卡是否准备就绪或写入成功。状态寄存器结构如下:
BUSYRDYDWFDSCDRQCORR0ERR各位的值为1时含义如下:
BUSY―CF卡记,此时不能接受其它命令;
RDY―卡可以接受命令;
DWF―写错误;
DSC―卡准备就绪;
DRQ―CF卡请求数据传送;
CORR―数据错误但被修正,不会终止多扇区读操作;
ERR―在上一命令以某种错误结束,可以在错误寄存器中查看错误类型。
下面以向CF卡写一个扇区数据为例,给出图4所示流程和C程序代码。
bit flag_1,flag_2;
void cfwr
{
unsigned char status;
cfwr_comm(0xe0,0x00,0x00,0x6c);
//写参数命令,指向逻辑6c扇区
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x01)==0x01)
flag_1=1; //若ERR=1,置出错标志,做相应处理
while(status!=0x58);
cfwr_dat(); //写入数据
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x20)==0x20)
flag_2=1; //若DWF=1时,置出错标志,做相应处理
while(status!=0x50);
}
void cfwr_comm(unsigned char lba27,lba23,la15,lba7) //写参数命令函数
{PBYTE[0x02] 扇区数为1
PBYTE[0x03]=lba7;
PBYTE[0x04]=la15;
PBYTE[0x05]=lba23;
PBYTE[0x06]=lba27; //设定LBA方式
PBYTE[0x07]=0x30; //送写入命令30H
}
void cfwr_dat() //写数据函数
{unsigned int i,temp;
unsigned char xdata dat[512]; //dat[]存放一个扇区的数据
for (i=0;i<512;i++) //连续写512字节
{P1=P1 & 0xf8; //选中外部RAM
temp=dat[i];
P1++; //根据实际电路选择中CF卡
PBYTE[0x00]=temp;}
}
5 结论
笔者在湿度检测仪中,根据本文所介绍的方法,用CF卡向计算机转存数据,可以非常方便地对数据进行维护。
篇2:用CPLD实现单片机读写模块
用CPLD实现单片机读写模块
摘要:介绍实现单片机与Xilinx公司XC9500系列可编程逻辑器件的读写逻辑功能模块的接口设计,以及Xilinx公司的XC9500系列可编程逻辑器件的开发流程。关键词:复杂可编程逻辑电路微处理器在系统编程现场可编程门阵列
1概述
CPLD(复杂可编程逻辑电路)是一种具有丰富的可编程I/O引脚的可编程逻辑器件,具有在系统可编程、使用方便灵活的特点;不但可实现常规的逻辑器件功能,还可实现复杂的时序逻辑功能。把CPLD应用于嵌入式应用系统,同单片机结合起来,更能体现其在系统可编程、使用方便灵活的特点。CPLD同单片机接口,可以作为单片机的一个外设,实现单片机所要求的功能。例如,实现常用的地址译码、锁存器、8255等功能;也可实现加密、解密及扩展串行口等单片机所要求的特殊功能。实现嵌入式应用系统的灵活性,也提高了嵌入式应用系统的性能。
CPLD(复杂可编程逻辑电路)是一种具有丰富的可编程I/O引脚的可编程逻辑器件,具有在系统可编程、使用方便灵活的特点;不但可实现常规的逻辑器件功能,还可实现复杂的时序逻辑功能。把CPLD应用于嵌入式应用系统,同单片机结合起来,更能体现其在系统可编程、使用方便灵活的特点。CPLD同单片机接口,可以作为单片机的一个外设,实现单片机所要求的功能。例如,实现常用的地址译码、锁存器、8255等功能;也可实现加密、解密及扩展串行口等单片机所要求的特殊功能。实现了嵌入式应用系统的灵活性,也提高了嵌入式应用系统的性能。
2Xilinx公司的可编程逻辑器件
Xilinx公司的XC9500系列可编程逻辑器件是一款高性能、有特点的可编程逻辑器件。它的系统结构如图1所示。从结构上看,它包含三种单元:宏单元、可编程I/O单元和可编程的.内部连线。它的主要特点是:
①高性能。在所有可编程引脚之间pin-pin延时5ns;系统的时钟速度可达到100MHz。
②容量范围大。Xilinx公司的XC9500系列可编程逻辑器件的容量范围为36~288个宏单元;可用系统门为800~6400个。
③5V在系统可编程。可以编程10000次。
④具有强大的强脚锁定能力。
⑤每个宏单元都有可编程低功耗模式。
⑥没有用的引脚有编程接地能力。
Xilinx的XC9500系列可编程逻辑器件的主要性能如表1所列。
3CPLD同单片机接口设计
CPLD同单片机接口原理如图2所示。
CPLD同单片机接口设计中,单片机采用Atmel公司的AT89C52,CPLD采用Xilinx公司的XC95216。该CPLD芯片结构及性能见图1和表1。AT89C52通过ALE、CS、RD、WE、P0口(数据地址复用)同XC95216芯片相连接。
表1XilinxXC9500t系列器件
项目XC9536XC9572XC95108XC95144XC95216XC95288寄存器/个3672108144216288可用门数/个80016002400320048006400宏单元数/个3672108144216288fPD/ns57.57.57.51010tSU/ns3.54.54.54.56.06.0tCO/ns4.04.54.54.56.06.0fCNT/MHz100125125125111.1111.1fSYSTEM/MHz10083.383.383.366.766.7
注:fCNT=16位计数器最高工作频率;fSYSTEM=整个系统的最高工作效率。
ALE:地址锁存信号。
CS:片选信号。
RD:读信号。
WR:写信号。
AD0~AD7:数据地址复用信号。
本例的设计思想是,在XC95216设置两个控制寄存器,通过单片机对两个控制寄存器的读写来完成对其它过程的控制。
XC95216设置的两个控制寄存器,可以作内部寄存器,也可以直接是映射为I/O口。
图2XC9516同单片机接口原理图
4CPLD同单片机接口设置结果
本例中,使用Xilinx公司提供的FundationISE4.2i+Modelsim5.5f软件实现设计。实现设计的源文件模块如下:
/**************************
//MCU和XC95216接口程序
//目的:MCU读写XC95216
/**************************/
modulemcurw(MCU_DATA,ALE,CS,RD,WE,CONREG1,CONREG2);
inout[7:0]MCU_DATA;//单片机的地址数据复用信号
output[7:0]CONREG1,CONREG2;//内部控制寄存器
inputALE;//单片机的地址锁存信号
inputCS;//单片机的片选信号
inputRD;//单片机的读信号
inputWE;//单片机的写信号
reg[7:0]LAMCU_DATA;//内部控制寄存器
reg[7:0]ADDRESSREG;//内部地址锁存寄存器
reg[7:0]CONREG1;//内部控制寄存器
reg[7:0]CONREG2;//内部控制寄存器
assignMCU_DATA=RD?8'bzzzzzzzz:LAMCU_DATA;
initial//寄存器初始化
begin
LAMCU_DATA<=0;
ADDRESSREG<=0;
CONREG1<=0;
CONREG2<=0;
end
always@(negedge ALE
begin
ADDRESSREG<=MCU_DATA;//地址锁存
End
always@(posedge WE
begin
if(!CS&&ADDRESSREG[0]==0))LAMCU_DATA
<=CONREG1;//从地址为0的CONREG1寄存器读数据
elseif(!CS&&(ADDRESSREG[0]==1))LAMCU_DATA<=CONREG2;
//从地址为1的CONREG2寄存器读数据
elseLAMCU_DATA<=8'bzzzzzzzz;
end
else
LAMCU_DATA<=8'bzzzzzzzz;
End
Endmodule
使用Modelsim5.5f仿真结果如图3和图4所示。图中ALE、CS、RD、WE、MCU_DATA是测试激励源信号,代表AT89C52接口信号;CONREG1和CONREG2的内部寄存器;ADDRESSREG是内部地址锁存寄存器。
图3CONREG1写过程图4CONREG1读过程
图3是CONREG1写过程。首先,在ALE信号的下降沿,锁存MCU_DATA的数据到ADDRESSREG内部地址锁存寄存器。然后,在WE信号的上升沿,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
图4是CONREG1读过程。首先,在ALE信号的下降沿,锁存MCU_DATA(0X00)的数据到ADDRESSREG内部地址锁存寄存器。然后,在RD信号的低电平期间,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
从图3和图4可以看出,对CONREG1寄存器的读、写过程完全满足进序要求,CONREG2的读写过程同CONREG1一样,也完全满足时序要求,实现了期望的功能。
结语
本文实现CPLD与单片机接口设计是笔者设计的高速采样设备的一部分,经实际验证完全正确。简单地修改该模块,笔者已成功地将其应用于多个CPLD或FPGA与单片机接口的项目中。
篇3:TrueFFS原理及其在CF卡上的实现
TrueFFS原理及其在CF卡上的实现
摘要:CF卡是一种基于Flash技术的容量大、携带方便的存储介质,已在嵌入式系统等领域得到广泛的应用;但是,有限的擦写次数极大地限制了CF卡的使用寿命。TrueFFS通过一系列算法,能够延长CF卡的使用寿命,提高CF卡的使用效率。文章介绍了TrueFFS的原理,在CF卡上实现TrueFFS的方法,并对TrueFFS的性能进行了分析。关键词:TrueFFS 损耗均衡 闪速存储器 CF卡
闪速存储器最大的一个缺点就是寿命有限。可擦除的次数因芯片厂商而有所不同,一般都在1万~10万次左右。为了延长闪速存储器的寿命,提高使用效率,Msystems公司推出了TrueFFS系统。它为种类繁多的闪速存储器提供了统一的块设备接口,并且具有可重入、线程安全的特点;支持大多数流行的CPU架构,如PowerPC、MIPS、ARM、X86、68K等。
由于个性鲜明的闪速存储器越来越受到嵌入式系统工程师的青睐,业界流行的嵌入式实时操作系统VxWorks已将TrueFFS作为自身的一个可裁减的模块。目前该模块的版本为2.0,支持Intel、AMD、Toshiba、Fujitsu等厂家生产的大多数型号的闪速存储器和Flash卡,用户只需要更改少量代码,甚至可直接调用;但是,该模块对如今风靡的CF卡缺乏支持。
CF卡采用了Flash技术。形象地说,CF卡就是由若干片闪速存储器外加一个管理器组成;但是,CF卡具有携带方便、易于升级、存储量大、抗震性好、兼容性佳等优点。目前,CF卡标准已经达到1.4版本,容量从最早的2MB到现今的1GB。然而,有限的擦写闪数是闪速存储器遗传给CF卡的先天缺陷。本文介绍如何在CF上实现TrueFFS系统,硬件平台以PowerPC处理器(MPC8250,Motorola公司)为CPU,嵌入式操作系统是VxWorks。
1 TrueFFS的结构
TrueFFS本身并不是一个文件系统,需要在TrueFFS之上加载DOS文件系统才能使用,否则毫无意义。TrueFFS屏蔽了下层存储介质的差异,为开发者提供了统一的接口方式。应用程序对存储设备的读写就对像对拥有DOS文件系统的磁碟设备的操作一样。
如图1所示,TrueFFS由1个核心层和3个功能层组成:编译层、MTD层(Memory Technoilogy Driver)、Socket层。
翻译层主要实现TrueFFS和DOS文件系统之间的高级交互功能,管理文件系统和Flash中各物理可擦块的关系,以及TrueFFS中各种智能化处理功能,例如块映射、损耗均衡(wear-leveling)等。目前有三种不同的翻译层模块可供选择。选择哪一种模块要根据使用的Flash介质采用NOR技术、还是NAND技术,或者SSFDC技术而定。
MTD层实现对具体的Flash进行读、写、擦、ID识别、映射等驱动,并设置与Flash密码相关的一些参数。VxWorks的TrueFFS已经包括了支持Intel、AMD、Toshiba等厂商的大多数Flash芯片的MTD层驱动。新的器件需要编写新的MTD层驱动。
Socket层提供了TrueFFS和硬件之间的接口服务,负责电源管理、检测设备插拔、硬件写保护、窗口管理和向系统注册Socket等。
核心层将其它三层有机结合起来,处理全局问题,例如信息量、计时器、碎片回收和其它系统资源等。
我们最关心的是MTD层和Socket层。VxWorks只提供了编译后的二进制形式的核心层和翻译层驱动。在实现TrueFFS应用之间,先介绍一下TrueFFS的原理。
(本网网收集整理)
2 TrueFFS原理
2.1 损耗均衡
闪速存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大,但却有限;因此,随着使用次数的加长,它最终会变成只读状态,所以应该尽最大 可能延长它的寿命。行之有效的方法就是平衡使用所有的存储单元,而不让某一单元过度使用。这种技术被称之为损耗均衡。TrueFFS使用一种基于一张动态维护表的存储器――块映射的翻译系统来实现损耗均衡技术。当块数据被修改、移动或碎片回收后,这张维护表会自动调整。
然而,如果存储在Flash上的一些数据本质上是静态的,就会产生静态文件锁定问题。存储这些静态数据的区域根据不会被轮循使用,其它区域就会被更频繁地使用,这将降低Flash期望的生命值。TrueFFS通过强制转移静态区域的方法成功克服了静态文件锁定问题。因为映射表是动态的,TrueFFS能够以对文件系统不可见的方式转移这些静态数据区域。由于绝对强制损耗均衡方式会对性能产生一些负面影响,所以TrueFFS采取了一种非绝对损耗均衡算法。它保证了所有空间的使用近似平等而不影响性能。
2.2 碎片回收
块数据的修改使得Flash的一些块区域中的数据不再有效,并且这些区域在擦除之前变得不可写。如果没有机制来回收这些区域,Flash很快就会变成只读的状态了
。不幸的是由于这些块不可能单独擦除,回收这些块就有些复杂了。单次擦除被限制在一个叫作擦除单元的较大范围内,如对于AMD的Am29LV065D芯片来说是64KB。
TrueFFS使用一种被称为碎片回收的机制来回收那些不再包含有效数据的块。该机制从一个预擦除单元内复制所有的有效数据块到另一个新的被称为转移单元的擦除单元。然后,TrueFFS更新映射表,再擦除这个废旧的预擦除单元。这样,原来的块出现在外界时仍然包含了原来的数据,虽然这些数据现在已经存放在Flash存储器的其它空间。
碎片回收算法会找到并回收与下面标准最吻合的擦除单元:
①废块最多;
②擦除次数最少;
③最静态的区域。
2.3 块分配和关联数据集结
为了提高数据的读取效率,TrueFFS使用一种灵活的空间分配策略:将关联的数据(如由同一个文件的内容组成的多个块)集结到同一个单独擦除单元内的一段连续的区域中。为此,TrueFFS尽量在同一个擦除单元内维持一个由多个物理上连续的自由块组成的存储池。如果这样连续的存储池无法实现,TrueFFS分尽量保证池中的所有块是在同一个擦除单元内。如果连这样的情况也不可能的话,TrueFFS会尽量把块池分配到一个拥有最多可用空间的擦除单元内。
这种集结关联数据的途径有几个好处。首先,如果TrueFFS必须从一个小的存储窗口来访问Flash,那么这样集结了的`关联数据可以减少调用映射物理块到该窗口的次数,加快了文件继续访问速度。其次,这种策略可以减少碎片的产生。这是因为删除一个文件可以释放掉更容易回收的完整块,意味着碎片回收会变得更快。另外,它可以使属于静态文件的多个块存放在同一地址,这样当损耗均稀算法决定移动静态区域时,转移这些块就变得更加容易了。
2.4 错误恢复
向Flash写数据有时可能会出错,比如在响应文件系统写请求时、碎片回收期间甚至在TrueFFS格式化或擦除Flash时。在这些情况下,TrueFFS能够从错误中恢复过来;但在新数据第一次写入Flash时如果出错就会丢失这些数据。然而,TrueFFS非常仔细地保证所有已经存放在Flash上的数据是可恢复的,甚至能够避免用户由于不耐烦或好奇而猛地拔出Flash卡而可能造成的灾难性后果。
TrueFFS健壮的关键是它使用了一种“先写后擦”的策略。当更新Flash一个扇区的数据时,只有在更新操作完成并且新存储的数据校验成功后,先前的数据才会被允许擦掉。这样的结果是数据扇区不能处于部分写状态。操作成功的话新扇区的数据有效,否则老扇区的数据有效。很明显,这样有利于用户已经写到Flash上的数据的稳定性。
3 编程
TrueFFS的编程主要在MTD层和Socket层。首先必须在当前VxWorks生成目录的配置文件(config.h)中定义:INCLUDE_TFFS(包含TrueFFS系统)、和INCLUDE_TFFS_SHOW(包含TrueFFS系统的显示函数)。
3.1 翻译层
翻译层根据Flash的实现技术来选择。设计中选用了SST公司的型号为SST49CF064的CF卡,64MB容量。它是基于NAND的Flash技术,所以在文件中定义INCLUDE_TL_NFTL;如果是NOR技术,则定义INCLUDE_TL_FTL。
3.2 MTD层
文件cfCardMTD.c实现了MTD层的功能。在本设计中,MTD层主要实现4个函数:读、写、擦除和ID识别。
ID识别函数根据读取设备的ID号来选择与当前设备匹配的MTD驱动。识别函数中指定了针对当前设备的一些参数以及基本操作函数,并赋给一个叫FLFlash的数据结构。
FLStatus cfMTDIdentify(FLFlash*pVol);
数据结构中的主要参数赋值如下:
pVol->type=CF_ID; /*器件ID号*/
pVol->erasableBlockSize=512;/*可擦除的最小单元是512B*/
pVol->chipSize=0x4000000;/*器件容量为64MB*/
pVol-write=cfWriteRoutine;/*写函数*/
pVol->read=cfReadRoutine;/*读函数*/
pVol->rease=cfEraseRoutine;/*擦函数*/
pVol->map=cfMap;/*将CF卡的一段区域映射到内存空间*/
CF卡的读函数比Flash的读函数繁琐。它和写一样,必须根据一定的算法来读取数据,而Flash只需要直接从地址中读数据。但是,CF卡的擦函数非常简单,直接返回就可以了。因为CF卡可以直接调用写命令写入数据,CF卡本身能够自动完成擦除操作。CfMap函数将CF卡的一段区域映射到存储空间,一般为4KB。因为CF卡的40MB
地址空间并不映射到系统的存储空间中,映射可以加快系统访问CF卡的速度,而Flash的地址空间,所以Flash的MTD驱动中的该函数可以为空。
最后,识别函数必须在MTD驱动表单mtdTable[]中注册:
#ifdef INCLUDE_MTD_CFCARD
cfMTDIdentify,
#endif
并增加函数声明:extern FLStatus cfMTDIdentify (FLFlash vol).
3.3 Socket层
文件sysTffs.c实现了Socket层的功能。sysTffsInit函数是主函数,调用Socket注册函数cfSocketRegister(),初始化Socket数据结构FLSocket。
LOCAL void cfSocketRegister (void){
FLSocket vol=flSocketOf(noOfDrives);
tffsSocket[noOfDrives]=“F”/*Socket名称*/
vol.window.baseAddress=CF_BASE_ADRS>>12;/*窗口的基地址*/
vol.cardDetected=cfCardDetected;/*检测CF卡是否存在的函数*/
vol.VccOn=cfVccOn;/*CF卡上电函数*/
vol.VccOff=cfVccOff;/*CF卡继电函数*/
vol.initSocket=cfInifSocket;/*CF卡初始化函数*/
vol.setMappingContext=cfSetMappingContext;/*CF卡映射函数*/
vol.getAndClearCardChangeIndicator=cfGetAndClearCard ChangeIndicator;/*设置改变函数*/
vol.writeProtected=cfWriteProtected;/*CF卡写保护判断函数*/
noOfDrives++;
}
其中,映射窗口的基地址以4KB为单位。TrueFFS系统每100ms调用CF卡检测函数,判断CF卡是否存在。CF卡上电函数和断电函数主要用于节省系统功耗,当CF卡出于闲置状态时,TrueFFS就关闭CF卡的电源。CF卡初始化函数负责访问CF卡之前的所有前期工作。如果插入CF卡型号改变了,cfGetAndClearCard ChangeIndicator函数就会及时向TrueFFS系统报告。sysTffs.c中需要实现上述的所有函数。大部分情况下,开发人员不必关心FLSocket数据结构,只关心它的成员函数。一旦这些成员函数实现了,开发人员不能直接调用它们,它们被TrueFFS系统自动调用。
4 实现与性能分析
完成TrueFFS的编写之后,经过编译链接,如果一切正确,VxWorks运行时会调用tffsDrv()函数自动初始化TrueFFS系统,包括建立互斥信号量、全局变量和用来管理TrueFFS的数据结构,注册Socket驱动程序。当TrueFFS需要和底层具体硬件打交道时,它使用设备号(0~4)作为索引来查找它的FLSocket结构,然后用相应结构中的函数来控制它的硬件接口。成功完成Socket注册之后,用户就可以调用tffsDevCreate()创建一个TrueFFS块设备,调用tffsDevFormat格式化设备,再调用dosFsDevInit()函数加载DOS文件系统。之后,用户就可以像使用磁碟设备一样使用了CF卡了,如调用open、read、write、close、creat等文件操作函数。
TrueFFS的简单测试方法可以从主机复制一个文件到CF卡,再将这个文件从CF卡复制到主机,然后比较原文件和最后文件的区别。用户也可以调用tffsShow()或tffsShowAll()来查看TrueFFS的创建情况。
TrueFFS可以极大地延长Flash设备的寿命。一般CF卡可以擦写10万次,如果不使用TrueFFS系统,寿命就非常短。例如,在CF卡上实现一个FAT16格式的DOS文件系统,簇的大小是2KB,如果要向CF卡中写入一个8MB的文件,共占用4K个簇,出于可靠性考虑,每写一个簇,FAT表就更新一次,写一个8MB的文件,FAT表需要更新4096次;而FAT表一直位于某个固定扇区中,所以8MB的文件最多只能更新25次,一个每天需要备份的文件,那么CF卡的寿命只有25天。这种应用方式使CF卡寿命与其容量无关,其它绝大部分可用扇区白白浪费。
采用了TrueFFS系统之后 ,因为损耗均衡算法不允许FAT表固定在某个扇区中,损耗平均分配给所有物理扇区。期望的CF卡寿命可以用下列公式计算:
期望寿命=(容量×总擦写次数×0.75)/每天写入字节数
其中,0.7
5表示文件系统和TrueFFS管理结构的额外消耗系数。如果同样每天备份一个8MB文件,那么期望寿命=(64MB×100 000×0.75)/8MB=600000(天)(约1643年)。
可见,TrueFFS惊人地延长了Flash器件的寿命。VxWorks自带的TrueFFS驱动器覆盖了业界大部分主流Flash芯片,考虑了各种芯片的不同擦写算法,效率较低。对于产时性要求苛刻的系统,开发人员应该按照所用的Flash器件有针对性地制作了TrueFFS驱动器。目前某些CF卡本身实现了一定程度的损耗均衡算法,但是没有TrueFFS那么高效。
篇4:CF卡与双核DSP的实现
CF卡与双核DSP的实现
摘要:介绍了目前PC机中最为流行的硬盘接口技术和磁盘文件管理系统,并在此基础上实现了双核TMS320VC5421与CompactFlash存储卡的接口,解决了嵌入式系统普遍存在的数据空间狭小的问题。关键词:DSPIDE接口硬盘文件管理系统CompactFlash存储卡
目前,许多工业检测系统要求其前端设备能实时采集大量数据,有些系统甚至还要求其前端设备能够完成实时的数据处理。因此一般工业检测系统将其前端嵌入式系统与一台PC机相连或其前端设备就是一台PC机,再通过网络将采集到的数据传递给主控制系统。这类工业检测系统体积较大且对外部的环境要求高。
本文实现了TMS320VC5421与CompactFlash存储卡(以下简称CF卡)的接口。利用DSP的高速数字信号处理能力可完成数据的实时采集和处理;利用CF卡的容量大、非易失性和即插即用的特性可完成数据保存和传输。因此TMS320VC5401与CF卡的接口在工业检测前端系统的应用中有很好的前景。
1TMS320VC5421芯片介绍
数字信号处理器(DSP)是数字信号处理理论与超大规模集成电路(VLSI)技术融合的结晶。TMS320VC5421更是定点系列DSP中的佼佼者。其系统框架如图1所示。
TMS320VC5421有4个主要特点:
(1)TMS320VC5421包含两个独立的DSP子系统。每个子系统都有独立的程序空间、数据空间和I/O空间,且每个子系统分别具有片内4套总线即4条地址总线、4条数据总线(3种数据总线用来访问片内数据空间,1条数据总线用来访问程序空间)和2个地址发生辅助寄存器来实现并行运算和并行存储功能,提高CPU的运算效率。
(2)TMS320VC5421的每一个子系统都有6个独立的DMA通道,且可对每个DMA通道进行独立编程。TMS320VC5421的两个子系统的所有程序空间、数据空间和I/O空间都在每个DMA通道的寻址范围内。
(3)TMS320VC5421的工作频率最高可达到100MIPS,且两个子系统的工作时钟统一由子系统A控制。
(4)TMS320VC5421的两个子系统之间同步信号可以由IPIRQ中断提供。
TMS320VC5421有3种方式实现不同子系统中的数据传输:
(1)将数据存放在两个子系统共享的128KB程序空间中,由共享的128KB程序空间实现数据传递。
(2)将数据存放在与两个系统分别相连的16字的FIFO中,由FIFO实现两个子系统的数据传递。
(3)通过DMA将数据传输到任意子系统的任意空间。
2CompactFlash存储卡产品介绍
CompactFlash技术是由CompactFlash协会(CFA)提出的一种与PC机的ATA接口标准兼容的新技术,它致力于开发一种先进的、速度快、容量大、体积小、质量轻、功耗低且可移动的数字信息存储产品。
由图2可知,CF卡包含两个基本部分:片内的芯片控制器和片内的存储模块。片内的存储模块用来存储数字信息,片内的芯片控制器用来实现与主机的接口及控制数据在存储模块中的传输。
2.1CF卡控制器
CF卡控制器中包含两组寄存器:命令寄存器和控制寄存器。命令寄存器用来接受命令和传输数据;控制寄存器用作磁盘控制。这两个寄存器组通过REG信号进行区分。控制寄存器组主要用于控制CF卡的工作方式;命令寄存器组被分配在与ATA标准兼容的地址空间。当CF卡工作在I/O方式下,命令寄存器组的地址空间为IF0H~1F7H和3F6H~3F7H;当CF卡工作在寄存器方式下,命令寄存器组的地址空间为1F0H~1FFH。
当CF卡工作在存储器方式下,CF卡按照ATA标准以寄存器方式传送数据、命令和地址。些寄存器除数据寄存器为16位外,其它寄存器均为8位。
数据寄存器(R/W):这是一个16位数据寄存器,用于对扇区的读写操作。主机通过该寄存器向CF卡卡控制器写入或从CF卡控制寄存器读出扇区缓冲区的数据。
错误寄存器(R)和特性寄存器(W):错误寄存器反映控制寄存器在诊断方式或操作方式下的`错误原因。特性寄存器一般不使用。
扇区数寄存器(R/W):用来记录读、写命令的扇区数目。
扇区号寄存器(R/W):用来记录读、写和校验命令指定的起始扇区号。
柱面号寄存器(R/W):用来记录读、写、校验和寻址命令指定的柱面号。
驱动器/磁头寄存器(R/W):记录读、写、校验和寻道命令指定的驱动器号、磁头号和寻址方式(CHS模式或LBA模式)。
状态寄存器(R)和命令寄存器(W):状态寄存器反映CF卡驱动器执行命令后的状态,读该寄存器要清除中断请求信号。命令寄存器接收主机发送的CF卡工作的命令控制字[1]。
2.2CF卡的编址方式
CF卡的扇区寻址有两种方式:物理寻址方式(CHS)和逻辑寻址方式(LBA)。物理寻址方式使用柱面、磁头和扇区号表示一个特定的扇区。起始扇区是0磁道、0磁头、1扇区,接下来是2扇区,一直到EOF扇区;接下来是同一柱面1头、1扇区等。逻辑寻址方式将整个CF卡同一寻址。逻辑块地址和物理地址的关系为:
LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区数-1
采用逻辑寻址方式,没有磁头和磁道的转换操作,因此在访问连续扇区时,操作速度比物理寻址方式块。
3磁盘文件管理系统简介
为了能够对大容量磁盘上的数据进行有效的管理,Win9X在磁盘上建立了一个文件系统。该文件系统可对磁盘上的数据进行有效的管理。
磁盘文件系统将整个磁盘划分为4个独立的区域,每个区域包含磁盘的独立信息,且这4个独立区域中的信息组合成一个完整有效的磁盘文件管理系统,如表1所示。
表1磁盘文件管理系统结构
DOS引导扇区文件分配区(FAT)根目标区(FDT)文件数据区
(1)DOS引导扇区:该扇区是磁盘的引导扇区,包含一些重要的磁盘系统信息,如:磁盘总共包含多少个扇区,每个族包含多少个扇区,每个扇区包含多少个字节等。通过这些磁盘系统信息可以计算出磁盘的容量、FAT表和FDT表的起始位置以及文件数据存放的起始位置等。
(2)文件分配区(FAT):文件分配区包含两个完全相同的FAT表,其中一个FAT表用作备份FAT。每个FAT表以16字节为个单元。FAT的每一个单元都映射磁盘上的一个簇,其中的值就反映了该簇的使用情况。
(3)根目录区(FDT):根目录区专用来存放根目录下的文件信息。根目录下的每一个文件在该目录区都对应一个32字节的目录项。这32字节的目录项包含文件的名称、属性、文件的长度、文件在磁盘上的起始簇号、文件建立和最后修改和日期和时间等。这些32字节的小单元互相首尾相接,中间没有任何分隔标志。
(4)文件数据区:该区是磁盘存放所有信息的场所为了便于管理,文件管理系统以簇为单位将文件分配在文件数据区的存储空间。1族总是2n个连续扇区。文件在文件数据区存放的起始位置存放在其对应目录下的FDT表中,当文件的长度大于1K时,文件数据区的后续位置保存在FAT表中,即对应的FAT单元中的数值就是文件的后续部分所存放位置的簇号。
文件管理系统通过以上4个区域实现对磁盘上的文件进行有效的管理。文件管理系统将文件数据存放在文件数据区,将文件的属性存放在文件对应目录下的FDT表中,将文件的存放位置存放在FAT表中。因此文件管理系统通过FAT表和FDT表可以很方便地对文件数据区的文件进行管理。
4TMS320VC5421与CF卡的硬件接口
TMS320VC5421对外有I/O、程序和数据3个并行的16位访问空间,分别由对应的空间选择信号线选通。本硬件电路选用TMS320VC5421的I/O空间与CF卡接口,采用数据线分时复用方式。
如图3所示,本电路使用DSP子系统A与前向通道相连。DSP子系统A对采集到的数据进行实时处理,完成数据的实时处理后,通过核间的3种数据传输方式将采集到的数据发送到DSP子系统B中,并且通过核间中断IPIRQ通知DSP子系统B可以存储CF卡。
4.1CF卡即插即用的实现
(1)硬件提供判断条件。CF卡为了实现即插即用的功能,在自身电路上提供了两个用来检测CF卡是否存在的管脚(CD1、CD2)。CD1和CD2的有效电平为低电平,即当主机检测到与其相连的CD1和CD2两个管脚同时为低电平时,可判断出CF卡与主机相连;当主机检测到与其相连的CD1和CD2有一个管脚不为低,则可判断出CF卡未与主机相连。
(2)软件实现。首选定义全局变量(如:IsExist)用于记录CF卡是否与主机相连,当IsExist为0时表示CF卡未与主机相连;当IsExist为1时表示CF卡与主机相连。其次在每次操作CF卡时检测CF卡的CD1和CD2管脚。当检测到CD1和CD2管脚为低电平且IsExist为0时复位CF卡,重新检测CF卡的FAT表统计还剩余多少空间可以分配,检测完FAT表后置变量IsExist为1。当检测到CD1和CD2管脚为低电平且IsExist为1时,继续CF卡的正常操作。当检测到CD1和CD2为高时,停止CF卡操作,置变量IsExist为0。
4.2文件的存储
向CF卡创建文件的流程如图4所示。在CF卡初始化后(包含CF卡上电复位和统计剩余空间等),DSP向CF卡存储数据的核心部分就是首先向一些必要的寄存器填写必要的信息,如向扇区号寄存器填写读写数据的起始扇区号(LBA地址)和扇区数寄存器填写读写数据所占的扇区个数等。然后向CF卡的命令寄存器写入CF卡操作的命令字,如写操作则向CF卡的命令寄存器写入30H,读操作向CF卡的命令寄存器写入20H等。
本文介绍的TMS320VC5421与CF卡的接口电路已在实际印刷电路板上成功实现,该小型系统在工业设备的前端电路中具有广阔的应用前景。
篇5:用PIC单片机实现的IC卡读写器
用PIC单片机实现的IC卡读写器
摘要:详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。关键词:PIC单片机 IC卡读写器 SPI方式 USART方式
引言
本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。
图1是本设计的电路图,图中电源变换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通信数据线的保护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,从而保证数据线上的电压在0V~+5V之间,保护单片机和IC卡不受损坏。图中单片机的15脚和23脚分别与IC卡的输出引脚3和4相连。由于IC卡的输出电压为CMOS电平,而单片机能够正确的识别IC卡的输出信号,需要加上拉电阻。
1 SPI工作方式
串行外围设备接口SPI(Serial Peripheral Interface)总线技术是Motrola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件能力很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其它事务,因此得到广泛应用。
SPI模式允许8位数据同步发送和接收,支持SPI的.所有四种方式。SPI模式传输数据需要四根信号线:串行数据输出(SDO)线、串行数据输入(SDI)线、串行时钟(SCK)和从选择(SS)。其中,从选择线只用于从属模式。
1.1 SPI主模式
由于控制时钟SCK的输出,主模式可以在任何时候开始传输数据。主模式通过软件协议控制从模式的数据输出。
在主模式中,一旦SSPUF寄存器写入,数据就会发送或接收。在接收数据时,SSPSR寄存器按照时钟速率移位,一旦接收到一个字节,数据就传输到SSPBUF,同时中断标志位和状态标志位置位。
时钟的极性可以通过编程改变。在主模式中,时钟SCK的频率可以设置为:fosc/4(即Tcy)、fosc/16(即4Tcy)、fosc/64(即16Tcy)和定时器2(Timer2)输出的二分频等四种。在芯片时钟为20MHz时,SCK的最大频率为5.0MHz。
在本设计中,使用的就是SPI主模式,由单片机控制时钟SCK的输出。当向IC卡中写数据时,随时可以发送数据;当读IC卡内的数据时,先要发送任意一个数据(此时IC卡不处于写入状态,不会接收该数据), 给IC卡提供输出数据的时钟,然后再接收IC卡发出的数据。其时序如图2所示。(发送和接惦的数据均为6FH)
如果要连续发送数据,那么每次将数
[1] [2] [3] [4] [5]
篇6:用PIC单片机实现的IC卡读写器的论文
用PIC单片机实现的IC卡读写器的论文
摘要:详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。
关键词:PIC单片机 IC卡读写器 SPI方式 USART方式
引言
本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。
图1是本设计的电路图,图中电源变换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通信数据线的保护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,从而保证数据线上的电压在0V~+5V之间,保护单片机和IC卡不受损坏。图中单片机的15脚和23脚分别与IC卡的输出引脚3和4相连。由于IC卡的输出电压为CMOS电平,而单片机能够正确的识别IC卡的输出信号,需要加上拉电阻。
1 SPI工作方式
串行外围设备接口SPI(Serial Peripheral Interface)总线技术是Motrola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件能力很强,与SPI有关的`软件就相当简单,使CPU有更多的时间处理其它事务,因此得到广泛应用。
SPI模式允许8位数据同步发送和接收,支持SPI的所有四种方式。SPI模式传输数据需要四根信号线:串行数据输出(SDO)线、串行数据输入(SDI)线、串行时钟(SCK)和从选择(SS)。其中,从选择线只用于从属模式。
1.1 SPI主模式
由于控制时钟SCK的输出,主模式可以在任何时候开始传输数据。主模式通过软件协议控制从模式的数据输出。
在主模式中,一旦SSPUF寄存器写入,数据就会发送或接收。在接收数据时,SSPSR寄存器按照时钟速率移位,一旦接收到一个字节,数据就传输到SSPBUF,同时中断标志位和状态标志位置位。
时钟的极性可以通过编程改变。在主模式中,时钟SCK的频率可以设置为:fosc/4(即Tcy)、fosc/16(即4Tcy)、fosc/64(即16Tcy)和定时器2(Timer2)输出的二分频等四种。在芯片时钟为20MHz时,SCK的最大频率为5.0MHz。
在本设计中,使用的就是SPI主模式,由单片机控制时钟SCK的输出。当向IC卡中写数据时,随时可以发送数据;当读IC卡内的数据时,先要发送任意一个数据(此时IC卡不处于写入状态,不会接收该数据), 给IC卡提供输出数据的时钟,然后再接收IC卡发出的数据。其时序如图2所示。(发送和接惦的数据均为6FH)
如果要连续发送数据,那么每次将数据送到SSPBUF寄存器后,都要判断是否已经发送完该数据,即判断PIR1寄存器的SSPIF位是否为1。如果SSPIF位为1,则表明数据已经发送完毕,可以继续发送下一个数据。但此时还不能立即发送下一个数据,因为SSPIF位必须在程序中由软件清零,只有将SSPIF位软件清零后,才能继续发送下一个数据。
1.2 SPI从模式
在SPI从模式,数据的发送和接收领先SCK引脚上输入的外时钟脉冲,当最后一位被锁存后,中断标志位SSPIF(PIR1的D3)位。在休眠模式,从模式仍可发送和接收数据,一旦接收到数据,芯片就从休眠中唤醒。如果采用SS控制的从模式,当SS引脚接到VDD时,SPI模式复位;如果 彩CKE=1控制的从模式,必须开放SS引脚控制。
在本设计中,由于IC卡是存储器卡,不能提供时钟信号,因此不能采用从模式,只能采用主模式,由单片机控制时钟信号。
单片机的SPI方式初始化程序如下:
MOVLW20H ;将20H送到累加器
MOVWF SSPCON ;将累加器中的数送到SSPCON寄存器
BSF STATUS,RP0 ;将定RAM区的第1页
BCF SSPSTAT,SMP ;将SSPSTAT寄存器的SMP位置0
BSF SSPSTAT,CKE ;将SSPSTAT寄存器的CLK位置1
BCF TRISC,3 ;将端口C的第3位设置为输出
BCF TRISC,5 ;将端口C的第5位设置为输出
其中,上述第1、2行程序是配置控制寄存器,将SPI方式配置为主控模式,时钟频率为单片机时钟频率的1/4,并将时钟的高电平设置为空闲状态。第3行程序为换页指令,将指针转到第1页。因为PIC16F877单片机的数据存储器是分页的,而所要操作的寄存器在第1页,因此要用换页指令将指针到第1页。第4、5行程序是配置状态寄存器,将SPI方式设置为数据输出时钟的中间采样,时钟SCK的上升沿触发。第6、7行程序则是将RC口的RC3和RC5设置为输出。
2 USART方式
通用同步异步接收发送模块(USART)是两个串行通信接口之一,USART又称为SCI(Serial Communication Interface)。USART可以设置为全双工异步串行通信系统,这种方式可以与个人计算机PC或串行接口CRT等外围设备进行串行通信:也可以设置为半双工异步串行通信系统,与串行接口的A/D或D/A集成电路、串行EEPROM等器件连接。USART是二线制串行通信接口,它可以被定义如下三种工作方式:全双工异步方式、半双工同步主控方式、半双工同步从动方式。
为了把RC6和RC7分别设置成串行通信接口的发送/时钟(TX/CK)线和接收/数据(TX/DT)线,必须首先把SPEN位(TCSTAT的RD7)和方向寄存器TRISC的D7:D6置1。
USART功能模块含有两个8位可读/写的状态/控制寄存器,它们是发送状态/控制寄存器TXSTA和接收状态/控制寄存器TCSTA。
USART带有一个8位波特率发生器BRG(Baud Rato Generator),这个BRG支持USART的同步和异步工作方式。用SPBRG寄存器控制一个独立的8位定时器的周期。在异步方式下,发送状态/控制寄存器TXSTA的BRGH位(即D2)也被用来控制波特率(在同步方式下忽略BRGH位)。
向波特率寄存器SPBRG写入一个新的初值时,都会使BRG定时器复位清零,由此可以保证BRG不需要等到定时器溢出后就可以输出新的波特率。
对USART方式进行初始化的程序如下:
BSF STATUS,RP0 ;将指针指向数据存储器的第1页
MOVLW 0x19
MOVWF SPBRG ;设置波特率为9600
BCF STATUS
,RP0 ;将指针指向数据存储器的第0页
CLRF RCSTA ;将接收控制和状态寄存器清零
BSF RCSTA,SPEN ;串口允许
CLRF PIR1 ;清除中断标志
BSF STATUS,RP0 ;将指针指向数据存储器的第1页
CLRF TXSTA ;将发送控制和状态寄存器清零
BSF TXSTA,BRGH ;设置为异步、高速波特率
BSF TXSTA,TXEN ;允许发送
BCF STATUS,RP0 ;将指针指向数据存储器的第0页
BSF RCSTA,CREN ;允许接收
初始化完成后,即可发送或接收数据。在发送或接收数据时,通过查询发送/接收中断标志位即可判断是否发送完一个数据/接收到一个数据。发送/接收中断标地不需要也不有用软件复位。
在异步串行发送的过程中,只要TXREG寄存器为空,中断标志TXIF就置位。因此,TXIF为1并不是发送完毕的标志,但仍可以用TXIF标志来判断。因此当TXREG为空时,将数据送入后,数据会保留在TXREG寄存器中,直到前一个数据从发送移位寄存器中移出,即前一个数据发送完。
3 IC卡
IC卡是集成电路卡(Integrated Circuit Card)的简称,有些国家和地址称其为智能卡(Smart Card)、芯片卡(Chip Card)。国际标准化组织(ISO)在ISO7816标准中规定,IC卡是指在由聚氯乙烯(PVC)或聚氯乙烯酸脂(PVCA)材料制成的塑料卡内嵌入式处理器和存储器等IC芯片的数据卡。近年来,由于导半体技术的进步,集成化程度和存储器容量有了很大提高,并使CPU和存储器集成在一个芯片上,从而提高了数据的安全性。
在本设计中,IC卡采用的是AT45DB041B-SC芯片,该芯片的特点如一下:
*单一的2.7V~3.6V电源;
*串行接口结构;
*页面编程操作,单一的循环重复编程(擦除和编程,2048页(每页264字节)主存;
*两个264字节的SRAM数据缓存,允许在重编程非易失性存储器时接收数据;
*内置的编程和控制定时器;
*低功耗,4mA有源读取电流,2μA CMOS备用电流;
*15MHz的最大时钟频率;
*串行外围接口方式(SPI)――模式0和3;
*CMOS的TTL兼容的输入和输出;
*5.0V可承受的输入,SI、SCK、CS(低电平有效)、RESET(低电平有效)。
在本设计的调试过程中,曾测试过IC卡的输入输出电平,结果证明这种IC卡的输入电平与TTL兼容,而输出电平与TTL不兼容。
4 IC卡的电源提供电路
在本设计中,由于IC卡的电源电压范围为+2.7~+3.6V,而PIC单片机需要的电源为+5V,而且稳压源提供的电压也是+5V,因此,要设计一个稳压模块,给IC卡提供+3V左右的电压。设计电路如图3所示。
该电路的主要元件为LM317芯片,它是三端可调集成稳压器,输出电压为1.25~37V范围内可调。当其Vin端的输入电压在2~40V范围内变化时,电路均能正常工作,输出端Vout和调整端ADJ间的电压等于基准电压1.25V。该芯片内的基电路的工作电流IREF很小,约为50μA,由一个恒流性很好的恒流源提供,所以它的大小不受供电电压的影响,非常稳定。在图3中,B点为电压输出端,为IC卡提供电压。A点为控制端,与单片机的一个端口引脚相连,当该引脚为低电平时,三极管Q1不工作,B点输出电压约为3.15V;当该引脚为高电平时,三极管Q1工作,B点输出电压约为1.25V。在程序中查询IC卡插座中是否有IC卡,当有IC卡时,将A点所连的单片机引脚设置为低电平,从而为IC卡提供电源;当没有IC卡或对IC卡的操作结束时,将A点连的单片机引脚设置为高电平,从而不给IC卡提供电源。
IC卡的上电和下电程序如下。
IC卡上电子程序 IC卡下电子程序
POWERON POWEROOF
BSF STATUS,RP0 BSFSTATUS,RP0
BCF TRISE,0 BCF TRISE,0
BCF RTISE,1 BCF TRISE,1
BCF STATUS,RP0 BCF STATUS,RP0
BCF PORTE,0 BSF PORTE,0
BCF PORTE,1 BSF PORTE,1
CALL DLYTIM CALL DLYTIM
RETURN RETURN
在本设计中,单片机与IC卡通信的主程序流程图如图4所示。
5 与PC机的通信
在本设计中,有PIC单片机与PC机串行通信的功能。由于本设计所用的单片机PIC16F877有USART方式,该方式可将C口的RC5和RC7设置成异步串行通信模式,因而在本设计中,与PC机的通信模块电路就比较简单。将单片机C口的RC6和RC7设置为异步串行通信模式,经过MAX232A芯片进行电平转换后,将TTL电平转换为RS232电平,再与DB9接口相连,即可实现通信。在PC机端,可以用VC等编程工具根据通信协议编写软件来控制对IC卡的读写操作。
6 结论
经过调试,本设计能够在脱离在线仿真器的情况下,上电后独立的运行程序,并能在PC机软件的控制下,实现对IC卡中任意位置的读写,其中读写的起始地址、读写数据的个数以及数据内容可以在PC机端输入或选择。
本设计已在实际应用中测试过,具有实用价值。由于本设计中所使用的PIC单片机的程序存储器较大(8KB),因而可以编写较大的程序,实现多合一该卡器并由PC机控制读写哪种芯片的IC卡。另外,由于本设计所使用单片机的程序存储器是Flash存储器,因而可以方便地实现程序的下载和升级。
篇7:ARM7系统中实现CF卡存储的文件系统设计
ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。关键词:嵌入式文件系统CF卡ARM7
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。
目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。
另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不借助于专门的读卡器,这给PC的用户带来了不小的麻烦。CompactFlash卡全称为“标准闪存卡”,简称“CF卡”。CF卡的应用空间比较广,最常见的是在数码照相机中用于照片的存储。由于CF卡内部采用模拟硬盘控制器的设计,使得CF卡可以比较容易地通过IDE接口实现与电脑的连接,一定程度上可以起到移动存储的作用。
一般的嵌入式系统不会提供读写CF卡的接口,所以需要在文件系统中专门设计一个驱动程序。
1基本原理
图1所示的CF卡中,主机系统的控制器接口允许数据从Flash介质读写。CF卡的存取方式有三种:Memory方式、I/O方式以及TrueIDE方式。我们选择的是TrueIDE方式。需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的TrueIDE方式重新配置成PCCardATA方式。所以要让CF卡一直工作在TrueIDE,需要在电源加电启动时将OE输入信号接地。此方式也支持8位存取,但我们选择了16位存取。一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如图2所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的.文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
设计软件时,同时考虑了通用性及可扩展性,目的在于使该文件系统无需分别修改便能够对CF卡、IDE硬盘、RAMDisk、电子盘、SD等不同的存储介质进行操作;读出这些存储介质中的数据,并且可以将数据输送到不同存储设备上。
为了达到这些目的,我们针对不同CPU的不同处理方法,对硬件操作程序进行分离,将设备有关的底层程序变成与设备无关的上层操作。这样,当系统新增功能之后,不必更改每个子程序,只需要在某些接口文件的数据结构中添加或者更改数据项即可;又考虑到用户对上层操作的透明性,我们采用面向对象的方法,上层结构中存取操作的driver结构(含read、write数据项)是虚拟的,在底层才将它具体化为CF卡的读写扇区命令(操作码为:20h、30h)。
软件程序的主要流程如图3所示。
2系统设计实现
根据上述原理,可完成软件设计,其基本框架如图4所示,分为六个主要部分。
其中,CF卡驱动程序设计的关键是CF卡的存取操作函数所采用的命令码有些不同。另外,我们使用驱动程序对象来代表CF卡设备驱动程序。该驱动程序对象对于用户是部分不透明的,数据项包括读写函数的指针,这些函数由文件系统程序输出(包括两部分函数,用户可见API函数调用和用户不见驱动存取函数)。此对象的数据结构声明如下:
typedefstructCF_XFILE_DRIVER{
BYTEdriver_name;/*介质标示;C
F卡、IDE硬盘、Flash卡、RAMDISK等,删除驱动的话,需要重新记录DRIVER号*/
……/*IRP处理函数*/
}CF_XFILE_DRIVER;
如果有多个CF卡,需要用另外一个特定的数据结构Next_Driver来把它们水平连接在一起。然后,用链表来管理这些数据结构,管理方式类似于WDM(WindowsDriverModel)。
3测试分析
经过调试运行,该文件系统性能良好。与我们之前已经移植过的Nucleus、μC/OS-II、UNIX的操作系统的文件系统相比,本文介绍的文件系统可移植性更强;除了文中着重介绍的CF卡,经过对底层驱动的简单修改就可以应用于其它存储介质如RAMdisk、IDE硬盘、Flash等(其中IDE硬盘和Flash也已经调试成功)。另外,本文介绍的文件系统对硬件平台的配置要求降低,并且对于文件操作的运行速度并未减慢。
篇8:ARM7系统中实现CF卡存储的文件系统设计
ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。关键词:嵌入式文件系统 CF卡 ARM7
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。
目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的'嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。
另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不借助于专门的读卡器,这给PC的用户带来了不小的麻烦。CompactFlash卡全称为“标准闪存卡”,简称“CF卡”。CF卡的应用空间比较广,最常见的是在数码照相机中用于照片的存储。由于CF卡内部采用模拟硬盘控制器的设计,使得CF卡可以比较容易地通过IDE接口实现与电脑的连接,一定程度上可以起到移动存储的作用。
一般的嵌入式系统不会提供读写CF卡的接口,所以需要在文件系统中专门设计一个驱动程序。
1 基本原理
图1所示的CF卡中,主机系统的控制器接口允许数据从Flash介质读写。CF卡的存取方式有三种:Memory方式、I/O方式以及True IDE方式。我们选择的是True IDE方式。需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的True IDE方式重新配置成PC Card ATA方式。所以要让CF卡一直工作在True IDE,需要在电源加电启动时将OE输入信号接地。此方式也支持8位存取,但我们选择了16位存取。一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如图2所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
设计软件时,同时考虑了通用性及可扩展性,目的在于使该文件系统无需分别修改便能够对CF卡、IDE硬盘、RAM Disk、电子盘、SD等不同的存储介质进行操作;读出这些存储介质中的数据,并且可以将数据输送到不同存储设备上。
为了达到这些目的,我们针对不同CPU的不同处理方法,对硬件操作程序进行分离,将设备有关的底层
[1] [2]
★ cf签名
★ 读写体会
★ cf广告词个人
★ cf战队宣言大全
★ cf刷屏广告词
★ CF之战记叙文
★ cf战队宣言
单片机实现对CF卡的读写(共8篇)




