⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtm.h

📁 AT91fr40162的FLASH读写程序
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef dtm_h
#define dtm_h
#define _OPT_VERSION 1

#include "AT91R40008.h"
#include "lib_i2c.h"

// 类型定义
typedef unsigned char _BYTE;
typedef unsigned short _WORD;
typedef unsigned int _DWORD;
/* 16-bit Flash Data type */
typedef volatile unsigned short flash_word ;

#define	U8			unsigned char
#define	U16			unsigned short
#define	U32			unsigned int
#define	REG8		volatile unsigned char
#define	REG16		volatile unsigned short
#define	REG32		volatile unsigned int
#define	VPchar		*(REG8 *)
#define	VPshort		*(REG16 *)
#define	VPint		*(REG32 *)
#define	Pchar		(REG8 *)
#define	Pshort		(REG16 *)
#define	Pint		(REG32 *)


#define BAUDRATE	115200
// I2C使用的常量定义
#define AT24C256_CHIP1_ADDRESS	0xA0
#define AT24C256_CHIP2_ADDRESS	0xA6
#define AT24C64_I2C_ADDRESS		0xA0
#define FLASH_CHIP1				0x00
#define FLASH_CHIP2				0x01
#define I2CFLASH				0
#define I2CICCARD				1
#define AT24C256_PAGE_SIZE		64
#define AT24C64_PAGE_SIZE		16
#define I2CICCARDSPEED			100000
#define I2CFLASHSPEED			80000


// 常量定义
#define RECBUF_LEN  2048

// 定义加密解密用常量
#define B_BINFO         0x01                    // 加密最基本的信息
#define B_DINFO         0x02                    // 加密动态信息
#define B_FINFO         0x04                    // 解密指纹信息
#define B_DIEF          0x08                    // 加密日志信息
#define B_TIEF          0x10                    // 加密TIEF文件信息

// 指纹评分的界限
#define C_FIGTHVAL      		20                      // 指纹评分的界限
#define GETFEATURESFROMDCBT		0x00	
#define GETFEATURESFROMBIEF		0x01	

// Flash使用的常量
#define FLASH1_DAT_ADDRESS		0x0000				// 第一个DAT表项在FLASH中的地址
#define FLASH1_SPB_ADDRESS		0x0005				// 第一个SPB表项在FLASH中的地址
#define FLASH1_KEY_ADDRESS		0x0018				// 第一个KEY表项在FLASH中的地址
#define FLASH1_CDTI_ADDRESS		0x0059				// 第一个CDTI表项在FLASH中的地址
#define FLASH1_QUEUE_ADDRESS	0x0094				// 第一组队列指针在FLASH中的地址
#define FLASH1_CSI_ADDRESS		0x009A				// DCBT表项在FLASH中的地址
#define FLASH1_DCBT_ADDRESS		0x009E				// DCBT表项在FLASH中的地址
#define FLASH1_LOGBUF_ADDRESS	0x1AFE				// 日志存储区在FLASH中的地址
#define MAXFLASHLOGITEM_1		1436				// 第一片FLASH中的日志文件条数

#define FLASH2_DAT_ADDRESS		0x0000				// 第二个DAT表项在FLASH中的地址
#define FLASH2_SPB_ADDRESS		0x0005				// 第二个SPB表项在FLASH中的地址
#define FLASH2_KEY_ADDRESS		0x0018				// 第二个KEY表项在FLASH中的地址
#define FLASH2_CDTI_ADDRESS		0x0059				// 第二个CDTI表项在FLASH中的地址
#define FLASH2_QUEUE_ADDRESS	0x0094				// 第一组队列指针在FLASH中的地址
#define FLASH2_CSI_ADDRESS		0x009A				// DCBT表项在FLASH中的地址
#define FLASH2_FINGER_ADDRESS	0x009E				// 指纹数据区在FLASH中的地址
#define FLASH2_LOGBUF_ADDRESS	0x54DE				// 日志存储区在FLASH中的地址
#define MAXFLASHLOGITEM_2		613					// 第一片FLASH中的日志文件条数
#define MAXFLASHLOGITEM			2049				// FLASH中日志文件总条数

// 内存和FLASH中各种数据结构的长度信息
#define LENOFDCB          		211					// DCB表项的长度,含CRC
#define LENOFDAT          		5					// DAT表项的长度,含CRC
#define LENOFSPB          		19					// SPB表项的长度,含CRC
#define LENOFCSI          		4					// CSI表项的长度,含CRC
#define LENOFKEY          		65					// KEY表项的长度,含CRC
#define LENOFCDTI          		59					// CDTI表项的长度,含CRC
#define LENOFDCBT          		32					// DCBT表的DCB项数
#define LENOFLOGBUF1          	0x64F8				// FLASH中第一个日志缓冲区的大小
#define LENOFLOGBUF2          	0x3F12				// FLASH中第二个日志缓冲区的大小
#define LENOFQUEUEPOINT			6					// FLASH中队列指针的长度
#define LENOFMB  				337                	// 指纹模板的长度,含CRC
#define LENOFTZ  				512                	// 指纹特征的长度,含CRC
#define LENOFHZLIB         		127                 // 程序中使用到的字符的个数
#define VIDEOCOL           		128
#define VIDEOPAGE          		8
#define MAXFEATURE				64
#define LENOFPACKETDATA			1024
#define LENOFFLASHBOOTBLOCK		16*1024
#define LENOFFLASHPARABLOCK		8*1024
#define LENOFFLASHMAINBLOCK		480*1024

// IC卡各种数据结构的长度信息
#define LENOFIDEF  				9                	// IDEF文件的长度,含CRC
#define LENOFBIEFBASEINFO  		814                 // BIEF中静态信息的长度
#define LENOFBIEFTRAININFO 		35                 	// BIEF中训练信息长度,含CRC
#define LENOFBIEFTIMEINFO 		11                 	// BIEF中时间信息长度,含CRC
#define LENOFBIEF  				LENOFBIEFBASEINFO+LENOFBIEFTRAININFO*2+LENOFBIEFTIMEINFO*2		//906
									                // BIEF文件的长度
#define LENOFSTUDENTLOG         14                  // 学员IC卡中LOG文件的长度,含CRC
#define LENOFCOACHLOG         	18                  // 教练IC卡中LOG文件的长度,含CRC

// IC卡使用的常量

#define IC_IDEF_ADDRESS         	0              									// IC卡中IDEF文件的偏移
#define IC_BIEF_ADDRESS         	LENOFIDEF                  						// IC卡中BIEF文件静态信息的偏移
#define IC_BIEF_TRAININFO_ADDRESS   IC_BIEF_ADDRESS+LENOFBIEFBASEINFO       		// IC卡中BIEF文件训练信息的偏移
#define IC_BIEF_TIMEINFO_ADDRESS    IC_BIEF_TRAININFO_ADDRESS+LENOFBIEFTRAININFO*2  // ID卡中BIEF文件买钟信息的偏移
#define IC_DIEF_ADDRESS         	IC_BIEF_TIMEINFO_ADDRESS+LENOFBIEFTIMEINFO*2    // ID卡中DIEF文件的偏移
#define IC_TIEF_ADDRESS         	0              		 // ID长度

// 电源信息
#define ON   		1
#define OFF     	0

#define ISASCII            1
#define ISHEX              0

#define TRUE               1
#define FALSE              0

// 定义按键
#define LOGIN_PGUP_KEY       	0x2000                    	// 签到/上翻键
#define ENTER_MENU_KEY      	0x4000                    	// 确认/菜单键
#define CANCEL_CHANGE_KEY       0x0800                    	// 取消/换人键
#define LOGOUT_PGDN_KEY        	0x1000                    	// 签退/下翻键

#define MENU_LOGIN_KEY        	0x8001                    	// 菜单虚拟键
#define MENU_QUERY_KEY        	0x8002                    	// 菜单虚拟键
#define MENU_TMPLOG_KEY        	0x8003                    	// 菜单虚拟键
#define MENU_SETUP_KEY			0x8004


// 卡类型
#define ADMINCARD		0x01
#define COACHCARD		0x02
#define STUEDENTCARD	0x03
#define EXAMCARD		0x04
#define DADMINCARD		0x05
#define SADMINCARD		0x06

//队列指针类型的常量
#define OUTQUEUE		0x1
#define INQUEUE			0x2

// 定义系统的状态
#define S_INIT          0                       // 初始化状态
#define S_WAIT          10                      // 等待状态
#define S_WAIT_TRAIN    20                      // 等待训练状态
#define S_TRAINING      30                      // 训练状态
#define S_SETUP         40                      // 设置状态
#define S_QUERY         50                      // 查询状态

// 语言信息
#define S_InsertIC      0x01                    // 提示"请插卡"
#define S_RemoveIC      0x02                    // 提示"请拔卡"
#define S_VerifyOk      0x03					// 提示"验证通过"
#define S_FingerDown    0x04                    // 提示"请放手指"
#define S_FingerUp      0x08                    // 提示"请抬手指"
#define S_VerifyFail    0x06					// 提示"验证失败"
#define S_OperateFail   0x0C                    // 提示"操作终止"
#define S_OperateOk     0x09                    // 提示"操作完毕"

// 时钟
#define SPI_BASE_DELAY_TIME     (MCK/10000000)


// 显示类
#define SAVEDISP			0					
#define NOTRECOVERYDISP		0
#define RECOVERYDISP		1
#define NOTWAITDISP			0
#define WAITDISP			1
#define QUERYMODE			0
#define SETUPMODE			1


// 显示信息
#define M_LOGOUTOK         0xC0                 // 成功签退
#define M_RESET            0xC1                 // 请重新启动
#define M_LOGINOK          0xC2                 // 成功签退
#define M_FINGERDOWN       0xC3                 // 请放手指
#define M_FINGERUP         0xC4                 // 请抬手指
#define M_VERIFYOK         0xC5                 // 指纹验证通过
#define M_VERIFYFAIL       0xC6                 // 指纹验证失败
#define M_INDEXEMPTY       0xC7                 // 没有签到学员
#define M_ERROR            0xC8                 // 操作出错
#define M_NOLOGOUT         0xCA                 // 不允许教练签退
#define M_MEMERROR         0xCB                 // 存储器操作出错
#define M_ICERROR          0xCC                 // 卡操作出错
#define M_WAIT             0xCD                 // 请等待
#define M_NOFINGERDOWN     0xCE                 // 未检测到手指
#define M_KPARAZERO		   0xCF					// K系数不能为0
#define M_SETUPERROR	   0xD0					// 系统设置错误
// 函数返回信息
#define C_OK               0x00                 // 操作正确
#define C_CMDERR           0x01                 // 命令字错误
#define C_PARAERR          0x02                 // 命令参数错误
#define C_CRCERR           0x03                 // 校验和错误
#define C_ICTIMEOUT        0x10                 // 卡超时错误
#define C_ICNOTINIT        0x11                 // 卡未初始化
#define C_ICINITNOTEND     0x12                 // 卡初始化未结束
#define C_ICLOCKED         0x13                 // 卡锁定
#define C_ICUNKNOWN        0x14                 // 卡状态未知
#define C_ICINVALID        0x15                 // 卡无效
#define C_ICOPTERR         0x16                 // 卡操作失败
#define C_ICVERIFYERR      0x17					// 卡回读错误
#define C_ICCRCERR         0x18                 // 卡校验和错误
#define C_NOFIG            0x19                 // 无指纹信息
#define C_PWDERR           0x1B                 // 操作员口令错误
#define C_NOIC             0x20                 // 卡未插入
#define C_ITEMNOTFOUND     0x21                 // 柜员内部编号不匹配
#define C_INDEXFULL        0x23                 // 索引已经满
#define C_DUPCLERK         0x24                 // 柜员号已经存在
#define C_CLERKNOTFOUND    0x25                 // 找不到对应的柜员
#define C_FIGIMGERR        0x30                 // 规定时间未采集到指纹图像
#define C_FIGENRERR        0x31                 // 指纹登录错误
#define C_FIGCMPERR        0x32                 // 指纹不匹配
#define C_FIGSMPERR        0x33                 // 指纹采样错误
#define C_FIGNOMB          0x34                 // 没有采集过指纹模板
#define C_ICCHANGED        0x40                 // 卡号不匹配
#define C_TIMEOUT          0x50                 // 通讯超时错误
#define C_NOCKINFO         0x60                 // 没有权限信息
#define C_CKINFOERR        0x61                 // 磁卡数据错误
#define C_FIDERROR         0x70                 // FID模块操作错误
#define C_FIDACKERROR      0x71                 // FID模块操作错误,命令返回错误应答
#define C_ENROLLERROR      0x72                 // 指纹采集失败
#define C_OVERFLOW         0x81                 // 取DIEF文件长度越界
#define C_FLASHERR		   0x91					// 读写FLASH错误	
#define C_FLASHFULL		   0x92					// FLASH中的队列已经满
#define C_FLASHCRCERR	   0x93					// 读写FLASH错误
#define C_FLASHVERIFYERR   0x94					// 回读错误
#define C_NOTOK            0xff                 // 通用错误
#define C_ICNOTMODIFIED    0x00                 // IC卡没有修改过
#define C_CKCMD            0x00                 // 表示收到的命令为磁卡命令
#define C_PROCESSCMD       0x01                 // 表示收到的命令为处理命令
#define C_NOTCOACHIC       0xA0                 // 非教练卡
#define C_ERRORKEY         0xA1                 // 按键错误
#define C_CANCELED         0xA2                 // 操作被取消
#define C_END              0xA3                 // 读FLASH时结束,读完队列中当前内容后,队列为空
#define C_CMPERR           0xA4                 // FIDRecieve接收到的信息比较错误
#define C_FINGERTIMEOUT    0xA5                 // 未在规定的时间内放置手指错误
#define C_EMPTYQUEUE	   0xA6					// 读队列前,判断队列的内容为空,不读
#define C_DOWNSTATUSERROR  0xA7                 // 下载时手持机状态错误
#define C_DATETIMEERROR	   0xA8					// 时间日期错误	
#define C_NOTADMINIC       0xA9                 // 非管理员卡

// 读写操作信息
#define ICREAD             0x0
#define ICWRITE            0x1

// 存储器映象信息
#define	EBI_CS1			((unsigned int )0x400000) //0x400000
#define	wADDRESS		(Pint(EBI_CS1))		// CPLD
#define	BASE_CS2		((unsigned int )0x20000000)
#define	pCPLD			(Pchar(BASE_CS2))		// CPLD
#define	BASE_CS3		((unsigned int )0x30000000)
#define	pBCT			(Pchar(BASE_CS3))		// CPLD

// BCT寄存器地址
#define BCT_CRL 		0x00
#define BCT_CRH 		0x01
#define BCT_CSRL 		0x02
#define BCT_CSRH 		0x03
#define BCT_VRLL 		0x04
#define BCT_VRLH 		0x05

// BCT寄存器常量
#define BCT_CRL_PDS		(1<<3)
#define BCT_CRL_LDS		(1<<2)
#define BCT_CRH_SLM 	(1<<3)
#define BCT_CRH_DCI 	(1<<2)
#define BCT_CSRL_SOCK1	(1<<3)
#define BCT_CSRL_SOCK2	(1<<2)
#define BCT_CSRH_TXDR 	(1<<3)
#define BCT_CSRH_SDOUT 	(1<<2)
#define BCT_VRLL_VRL3 	(1<<3)
#define BCT_VRLL_VRL2 	(1<<2)
#define BCT_VRLL_VRL1 	(1<<1)
#define BCT_VRLL_VRL0 	(1<<0)
#define BCT_VRLH_VRL5 	(1<<3)
#define BCT_VRLH_VRL4 	(1<<2)
#define BCT_VRLL_MASK	BCT_VRLL_VRL3|BCT_VRLL_VRL2|BCT_VRLL_VRL1|BCT_VRLL_VRL0
#define BCT_VRLH_MASK	BCT_VRLH_VRL5|BCT_VRLH_VRL4

// BCT延时时间信息
#define BCT_REG_DELAY	1
#define BCT_WE_DELAY	1
#define BCT_RESET_DELAY (10*10000)
#define BCT_DCI_DELAY	1					/* 150us */
#define BCT_DSC_DELAY	0
#define BCT_OPEN_WAIT	(1000*10000)
#define BCT_INIT_WAIT	(1000*10000)
#define BCT_SAMPLE_WAIT	(1000*10000)

// BCT图形长宽信息
#define BCTWIDTH		256
#define	BCTHEIGHT		384
#define	IMG_WIDTH		160
#define	IMG_HEIGHT		240

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -