福建信息职业技术学院 程智宾 林 晸
目前国内生产停车场管理系统绝大部分是采用“前端设备+现场控制器+管理PC机”的模式,还有很多停车场管理系统的合法性比对任务放在管理PC机上来完成,一旦PC机出现问题,停车场就无法正常运行,所以现在开发停车场控制器均要考虑具备脱离上位机正常运行的功能,采用嵌入式系统开发控制器的现象也越来越普遍,“管理控制一体机”代替“控制器+管理PC机”的模式将是一种趋势。因此,车辆信息、出入信息、费用等数据的存储及管理是停车场控制器开发的核心任务。
在开发停车场管理系统时,首先要对存储及管理的数据进行分析,需要存储哪些数据,哪些数据是重要的,哪些数据是次要的,有些数据操作频繁,而有些数据相对固定。通过深入理解停车场管理系统的工作原理,如果要保证停车场控制器脱离上位机正常运行,则需要对卡(用户)基本信息、卡操作记录、金额充值记录、进出信息记录等数据进行存储和管理。其中卡基本信息包括卡号、注册时间、会员类型(年卡、月卡、次卡、贵宾卡等)、收费类型、卡类型(远距离卡、近距离卡)等;卡操作记录就是对卡信息进行更改的记录,包括操作的时间等;金额充值记录包括充值时间、充值金额和当前金额等;进出信息记录包括进入时间、出去时间、收费类型、收费金额以及剩余金额等。具体存储字节长度如下:
(1)卡基本信息
操作平均周期:2个月一次
卡号:6个字节
注册时间:6字节
会员类型:1字节(月卡、次卡、年卡)
收费类型:1字节(根据规定进行设置费用)
卡类型:1字节(自动刷卡,手动刷卡)
信息长度:1(Hanler)+2(lenght)+15(data)+2(EndAddress)=20字节
(2)卡操作记录
操作平均周期:2个月一次
对卡基本信息更改操作时的记录如会员类型、换车时收费类型、自动刷卡与手动刷卡。操作时间:6个字节
更改前状态:3字节
更改后状态:3字节
信息长度:1(Hanler)+2(lenght)+12(data)+2(EndAddress)=17字节
(3)金额充值记录
操作平均周期:1个月一次
主要对金额操作的记录。
充值时间:6字节
充值金额:4字节float型
目前金额:4字节float型
信息长度:1(Hanler)+2(lenght)+14(data)+2(EndAddress)=19字节
(4)进出信息记录
操作平均周期:一天一次
主要对车辆进出信息记录。
进入时间:6字节
出去时间:6字节
收费类型:1字节
收取金额:4字节
剩余金额:4字节
预留:6字节
信息长度:1(Hanler)+2(lenght)+27(data)+2(EndAddress)=32字节。
考虑到FLASH芯片在使用时有存在以下几个特点,即必须以几K~几十K的块为单位进行数据的操作;擦除操作耗时较多,应减少擦除操作;尽量避免频繁地对同一地址操作,以免造成局部单元提前损坏等,所以在车库管理系统中还需配置EEPROM用来存储用于合法性比对的会员卡卡号和经常变动的出入信息,我们以4M FLASH和32KB EEPROM为例来分析非文件系统的数据存储空间分布及内容管理。
FLASH有4M,其存储空间分布和内容如下:预留空间1M,会员卡基本信息1M,会员卡进出信息记录1M,临时卡进出信息记录1M。
一张会员卡基本信息对应2K数据存储空间,分4个扇区进行存储,3个扇区分别用来存储卡基本信息、卡操作记录、金额充值记录,1个扇区为预留空间。每个扇区空间为0.5K,足够存储其相应的数据,所以会员卡基本信息1M,每张卡存储2K,1M/2K=0.5K,则可注册0.5K(512)个用户。另外进出记录,每次进出记录为32字节,1M/32=32768次,假设一天会员卡出入1000车次,则可存储时间32768/1000=32天。
EEPROM有32K,其存储空间分布及存储内容安排如下:预留空间10K,会员卡基本信息和出入信息16K、缓冲区1K,临时卡出入信息4K、缓冲区1K。
会员卡基本信息和出入信息存储位置的具体指向需24字节,包括初始化标记、数据存储开始地址、数据存储块大小、最大存储数据个数和预存储地址等;每张会员卡基本信息和出入信息需要占用32字节,分别是使用状态1个字节、卡号6个字节、时间6个字节、进出状态1个字节、当前存储位置4个字节、金额4个字节、信息库地址4个字节、卡操作区位地址2个字节、充值区位地址2个字节、卡状态1个字节、和校验1个字节,总共分配500组,则需16000个字节,预留484字节,总计16K。缓冲区会员卡存储指向需18字节,分别是引导码2个字节、数据长度2个字节、FLASH存储开始地址4个字节、分配FLASH扇区个数2个字节、使用扇区计数2个字节、PC访问扇区地址4个字节、PC访问扇区内地址2个字节;会员卡出入信息缓冲区32字节,分别是卡号6个字节、时间6个字节、出入状态1个字节、与PC机通讯状态1个字节、上次记录该卡的地址4个字节、支付金额4个字节、剩余金额4个字节、预留6个自己,分配16组,需要512字节。
临时出入信息32字节,16组,需要512字节,预留488字节,总计1K;临时卡存储指向需12字节,每张临时卡出入信息19字节,200组,则需3800个字节,预留284字节,总计4K;缓冲区临时卡存储指向需18字节,临时出入信息32字节,16组,需要512字节,预留488字节,总计1K。其字节分配方法与会员卡类似。
图1 AT45DB321D接口电路
图2 FM31256接口电路
本课题设计的停车场管理系统是针对单位的车辆出入管理,考虑固定用户在500多个的这种场合,当然也可以根据需要扩展容量,根据存储空间分布及内容管理的分析可知,4M FLASH和32K的EEPROM能满足系统的需要,可以保证在没有上位机的情况下,系统照常运行,且数据可以保留一个多月,当上位机工作正常时,即可把数据上传。经过查找资料和分析,采用AT45DB321D作为FLASH存储芯片,FM31256作为EEPROM存储和时钟芯片。
AT45DB321D FLASH存储芯片是ATMEL公司生产的串行Flash存储器,其存储器容量为4M BYTE,其接口为SPI模式,内部有8912页(每页512/528字节)内存(Flash Memory,也叫主存Main Memory)和两个Buffer(每个Buffer为512/528字节的SRAM)组成。停车场控制器采用STM32F103VET6 32位处理器作为核心,其I/O口丰富,应用灵活,处理速度快,应用该芯片的PA4-PA7脚分别接AT45DB321D芯片的/CS端、SCK端、SI端、SO端及/RST端,其接口电路如图1所示,分别是片选、串行时钟脉冲、数据写入、数据读取和复位的操作及控制。
停车场管理系统中,车辆在出入时,都必须记录其时间,所以控制器应配套时钟电路,FM31256芯片包括实时时钟、32K EEPROM、看门狗计数器、低电平复位及非易失性事件计数器等功能,并且具有访问次数多的特点,利用该芯片的EEPROM作为控制程序频繁访问的存储单元,即设置参数、会员卡信息、临时卡信息、掉电及时保存的数据,是一个理想的选择
FM31256芯片的数据写入和读取采用IIC总线方式,其接口电路如图2所示。SCL和SDA端通过上拉电阻与MCU的PB6、PB7端口相接;A0、A1是芯片的地址,本电路只用到一片,所以直接接地;PFI端口用2个相同的电阻进行分压,作为比较输入;另外端口,为时钟晶振电路和供电、备用电池供电。
数据存储包含着AT45DB321D芯片NAND FLASH的读写控制和FM31256芯片EEPROM的读写控制。
AT45DB321D是NAND芯片,其基本操作主要包括:复位操作、读操作、读状态操作、编程操作、随机数据输入操作和等,读写控制的函数定义如下:
#define ATMEL_SPI_PAGE_SIZE 528
#define ATMEL_SPI_MAX_PAGE_NUMBER 8192
/* Read */
#define READ_MAIN_PAGE 0xD2
#define READ_BUFFER1 0XD4
#define READ_BUFFER2 0XD6
#define READ_STATE 0XD7
……
static void SpiWriteByte(unsigned char byte_data)
/*SCK rasing edage:Master output data,Slave input data*/
{ SPI1SendByte(byte_data);}static unsigned char SpiReadByte()/*SCK falling edage:Slave output data*/
{ return SPI1ReadByte();}
……
FM31256在电路中当作MCU的从机,本身是通过I2C总线的时序方式来进行数据的读写操作的,由数据线(SDA)和一根时钟线(SCL)组成,一般的操作过程是:主设备发出开始信号(Start)----主设备发出1字节的从设备地址信息----从设备发出认可信号----主设备开始对从设备进行读写操作----主设备发出结束信号(Stop)。
FM31256内部有32 KB存储单元,地址划分为0000H-7FFFH,在进行读写操作时,首先发送“1 0 1 0 X A1 A0 R/W”的命令字节,目标地址长度为双字节,即RAM区的寻址能力为0-65535。本身具有内部地址锁存和自动累加功能,所以对连续地址区进行读/写操作时,我们只需发送存储区首地址则可。读写操作函数定义举例如下。
void Fm31256WriteByte(u16 addr,u8 value)
{ I2C_bytewrite(IIC_FM31256_COMP,addr,value);}
u8 Fm31256ReadByte(u16 addr)
{ return (u8)I2C_byteread(IIC_FM31256_COMP,addr);}
void EepromWriteByte(unsigned int addr,u8 value)
{ I2C_bytewrite(IIC_FM31256_MEM,addr,value);}
u8 EepromReadByte(unsigned int addr)
{ return (u8)I2C_byteread(IIC_FM31256_MEM,addr);}
……
本文根据停车场管理系统的工作原理,分析停车场控制器需要存储和管理的数据,对其空间分布和内容管理进行详细配置,应用STM32F103VET6 32位处理器灵活控制AT45DB321D FLASH存储芯片和FM31256 EEPROM存储芯片,以非文件系统形式对停车场管理系统的数据进行存储和管理,通过FLASH芯片和EEPROM芯片的配合使用,分块管理和缓冲管理等方法,使Flash的存储性能和数据的可靠性均有很大地提高。本课题设计的停车场控制器经过测试,在脱离PC机的情况下工作正常,数据存储管理合理,效果良好,为嵌入式系统Flash存储管理提供借鉴经验。
[1]程智宾.基于STM32的车辆门禁控制器设计与实现[J].机电技术,2012(4).
[2]林晸.不停车车辆出入管理系统设计与实现[J].电子世界,2012.
[3]叶碧峰.电子科技大学中山学院停车场信息管理系统的设计与实现[D],2011.
[4]刘文利.国内停车场管理系统的现状与发展趋势[J].中国新技术新产品,2011
[5]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.
[6]林火养.智能小区安全防范系统[M].北京:机械工业出版社,2011.
[7]叶树梅,季爱明,俞一彪.嵌入式系统中Flash存储管理策略[J].科学技术与工程,2011.