发卡通行组举例"/>
重庆发卡通行组举例
内存设计:#define GIDMAX 60typedef struct
{uint8_t code[25];uint8_t len;
}CQdianmaType;//sizeof 26 __packed 加和不加 没有影响 都是26[因为他没有U16这样 都是U8] typedef struct
{uint64_t version;//8uint8_t gid[GIDMAX][20];//1200
}GidType;//sizeof 1208 __packed 加和不加 没有影响 [都是U8] typedef struct
{uint8_t ip[50];uint16_t port;
}serverAddrType;//sizeof 52 __packed 加和不加 没有影响 但是再次目结构体有干扰 多了1typedef struct
{CQdianmaType devcode; //26uint8_t locatcode[23];//23 uint8_t jin[13]; //13uint8_t wei[13]; //13 serverAddrType net; //52GidType gidtype; //X*(20+8)
}_CQType;那么设计多大比较好?#define DSYS_DIANMA_ADDR 0x0807E000
这一页是2K也就是2048个字节!
(26+23+13+13+52+20X+8)<=2048
所以可以X最大是95.65!修改 #define GIDMAX 95+++++++++++++++++++++++++++++++++上面的计算有问题 它的根据是大家合并的时候结构体sizeof就是相加的!其实没有pack技术的话 不一定!合并以后会变大!!所以必须pack!!__packed typedef struct
{uint8_t ip[50];uint16_t port;
}serverAddrType;//52__packed typedef struct
{uint8_t code[25];uint8_t len;
}CQdianmaType;//26#define GIDMAX 95
__packed typedef struct
{uint64_t version;//8uint8_t gid[GIDMAX][20];//20*95
}GidType;//20*95+8__packed typedef struct
{CQdianmaType devcode;//26uint8_t locatcode[23];//23uint8_t jin[13];//13uint8_t wei[13];//13 serverAddrType net;//52GidType gidtype;//20*95+8
}_CQType2;//2035+++++++++++++++++++++++++++++++++
流程设计:
上电直接读出来到结构体
hip_flash_read( DSYS_DIANMA_ADDR ,(uint8_t *)&CQType ,sizeof(_CQType)
如果是FF那就是新设备
清空即可 所以cqdefault是没有必要的!!已经没有这个大地方放置了 找一个SRAM
也就是一个数据在SRAM 一个保存在FLASH
_CQType CQType@(0x10000000);
uint8_t mqttreadbuf[2048]@(0x10000800); 开始流程,配置以后就写入!流程设计:
1上电就读片内FLASH,数据放在结构体中--void sysCfg_init( void ){config.read(CFG_SYS_CQDM , (void **)&CQType );}
2每次修改数据就是改动这个结构体的部分--ble接口指令
3每次保存 可以直接擦除 在写入 因为我保证了结构体其他的没变化
4每次使用 的时候还需要去FLASH读吗?其实不用了 因为我一直都是最新的 思考:为什么我要保存20-22的呢?我可以直接保存10-11呀 余力卡举例:
50 01 20 00 02 00 03 01 01 01 19 10 17 01 01 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 51 typedef struct
{_Code Code[5]; // 5个块儿 每个块儿一个点码_Info Info; // 1个块儿 其他信息
}_YULICARD钉钉你的例子,用一个块儿写:点码20
“50012000020003010101191017010100”
写入点码10
0X50,0X01,0X20,0x00,0x02,0x00,0x03,0x01,0x01,0x01
在写入有效期到19年10月17日过期
0X19,0X10,0X17,
在写入类型标识 用户卡
0X01
在写入使能位
0x01
在写入CRC
0xXXtypedef struct
{ uint8_t cqcode[10]; // 点码20变10uint8_t endtime[3]; // 截止时间 3字节uint8_t setting; // 设置卡类别 uint8_t enable; //该块数据是否使能uint8_t crc0; // 校验 该块 一共16个字节 CRC8=8
}_Codetypedef struct
{ uint8_t UID[4]; // UIDuint8_t ID[9]; // 身份证9位 暂时0XFFuint8_t doornum; // 前面5个enable累和uint8_t mark[2]; //固定填写‘C’‘Q’ 方便快速和富凯卡分开"CQ"-->67 81--->0X43 0X51-->这样写卡!!
}_Info
思考:为什么我要保存20-22的呢?
我可以直接保存10-11呀 那样我可以保持多一倍!!!
更多推荐
重庆发卡通行组举例
发布评论