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

📄 s50兼容卡协议.txt

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 TXT
字号:
一。S50卡的基本描述:

	* 16个扇区(s0-s15);每扇区4个块(bn0-bn3);每块16个字节。
	* 每个扇区的bn3为该扇区的密钥控制块,为卡片硬件设置区。
	* s0的bn0为s50卡片的ic出厂信息区,用户不可使用。
        * 对s50卡的读写是按块(16个字节)为单位的。
	* 每个块的读写操作均需要密码认证,其密码为该块所在扇区的keyA,或keyB

二。应用协议:(按扇区和块列表)
    ----------------------------------------------------------------------------------------------
    扇区s0:未使用
    ----------------------------------------------------------------------------------------------
	       
    ----------------------------------------------------------------------------------------------	
    扇区s1:
    ----------------------------------------------------------------------------------------------
    -------------------------------------    Memeroy Map   ---------------------------------------

	块4;功能:
               结构:byte[0]---------卡类型     
				      0x01:用户卡
				      0x00:起用卡
				      0x02:修改设置卡
				      0x03:停用卡
				      0x04:无效卡
				      0x05:测试卡   //
		     byte[1:14]----- 数据域  
		     byte[15]------- 块b01的数据总效验

	块5;功能:
               结构:byte[0:14]------ 数据域
		     byte[15] ------- 块5的数据总效验

	块6;功能:
               结构:byte[0:14]------ 数据域
		     byte[15] ------- 块6的数据总效验

	
	块7;功能;用于存储设置的KeyA,Contorl-Bit和KeyB 
		   初始化密码为6个0Xff
               结构:byte[0:5]-------KeyA
                     byte[6:9]-------Contorl_Bit
                     byte[10:15] ----KeyB


			Contorl_Bit 4个字节的定义:
      ================================================================
      |                          byte6                               |
      |     bit7   bit6   bit5   bit4   bit3   bit2   bit1   bit0    |
      |     /c23   /c22   /c21   /c20   /c13   /c12   /c11   /c10    |	
      ================================================================
      |                          byte7                               |
      |     bit7   bit6   bit5   bit4   bit3   bit2   bit1   bit0    |
      |     c13    c12    c11    c10    /c33   /c32   /c31   /30     |
      ================================================================
      |                          byte8                               |
      |     bit7   bit6   bit5   bit4   bit3   bit2   bit1   bit0    |
      |     c33    c32    c31    c30    c23    c22    c21    c20     |
      ================================================================
      |                          byte9                               |
      |     bit0   bit1   bit2   bit3   bit4   bit5   bit6   bit7    |
      |     ----   ----   ----   ----   ----   ----   ----   ----    |   
      ================================================================  
      注:/Cxx表示Cxx取反 	

       >>做用户卡时该扇区块的权限设置如下:(Contorl-Bit的设置):
	(写用户卡时,一定用未设置过卡硬件密码的卡片,用新卡的初始密码6个0XFF去写所有的数据)
                块b13: (C13,C23,C33) = (0,1,1) : KeyA,KeyB都不可读,KeyA,KeyB写需要KeyB      
                                                  CTR_BIT读写需要认证 KeyB 
                块b12: (C12,C22,C32) = (0,1,1) : 读或写都需验证 KeyB
                                                   
                块b11: (C11,C21,C31) = (0,1,1) : 读或写都需验证 KeyB
                                                    
                块b10: (C10,C20,C30) = (0,1,1) : 读或写都需验证 KeyB
       
		     
		     
    ----------------------------------------------------------------------------------------------	
    扇区s2~s15:未使用
    ----------------------------------------------------------------------------------------------
       
	
 三。各种卡类型的数据域结构

	1.0x01用户卡:
	bank4:		byte[0] ------- 0x01			用户卡的标识
	     		byte[1:3]------ 3 字节系统号 
		     	byte[4:6]------ 3 字节卡号  
		     	byte[7:9]------ 3 字节软密码
		     	byte[10]------- 1 字节最近一次充值地点标识
		     	byte[11:14]---- 4 字节最近一次充值时间(BCD年 BCD月 BCD日 BCD时)
		     	byte[15]------- 块4的数据总效验

	bank5:		byte[0:4]------ 5 字节余额/余量		(xx xx x.x xx xx)元
		     	byte[5:9]------ 5 字节备份余额/余量	(xx xx x.x xx xx)元
		     	byte[10:13]----	4 字节前次消费金额	(xx x.x xx xx)元
		     	byte[14]------- 用户卡状态字
					bit0	: 	1:上一次有非法用水操作0:上一次用水操作正常
					bit1	: 	1:卡已停用(余额为0)	    0:卡正常()
					bit2 	:	0:现金卡	    1:水量卡
					bit3 	:	0:余量和备份余量一致1:余量和备份余量不一致
					bit4 	:	固定0
					bit5 	:	固定0
					bit6	:	固定0
					bit7  	:	固定0
		     	byte[15]------- 块5的数据总效验

								
	bank6:	     	byte[0:4]------ 5 字节前次用水时间     (年/月/日/时/分) 
		     	byte[5:9]------ 5 字节前次用水前卡余量 (xx xx x.x xx xx)元	
		     	byte[10:12]-----3 字节前次用水量       (xx x.x xx)立方米
		     	byte[13:14]---- 2 字节前次结算单价     (xx . xx)元
		     	byte[15]------- 块6的数据总效验
		      

	bank7;		byte[0:5]-------KeyA		卡的硬件秘密A			写入开户卡中设定的密码
                     	byte[6:9]-------Contorl_Bit	卡读写权限的硬件设置区		
                     	byte[10:15] ----KeyB		卡的硬件秘密B			写入开户卡中设定的密码


	2.0x00起用卡:  (用户将表投入使用,需用起用卡设置表的密码,工作模式,参数等)
	bank4:		byte[0] ------- 0x00				   \\起用卡标识
	     		byte[1:3]------ 3 字节系统号   
			byte[4:9]----- 	6 字节硬件卡密码   
			byte[10:12]---- 3 字节软件卡密码
		     	byte[13]------- 表工作方式控制字1 
					bit[7]--------短信通讯起用位       \\1:起用 0:禁用
					bit[6]-------卡中余额BCD码性质     \\1:元   0:立方米				
					bit[5:4]-----位置  	           \\00:1000L
									   \\01:100L
									   \\10:1L
									   \\11:10L
					bit[3]------ 红外/485通讯起用位	   \\1:红外 0:485
					bit[2:1]---- 短信发送超时有效期    \\00:12小时
									   \\01:1天
                                                                           \\10:1周
                                                                           \\11:1月
					bit[0]-------起用卡是否给表设表号  \\1:要设定表号,0:不设定表号
		     	byte[14]------- 主台随机数1
		     	byte[15]------- 块4的数据总效验



	bank5:		byte[0:1]------ 2 字节设置单价值
		     	byte[2:8]------ 7 字节表号
		     	byte[9:14]----- 6 字节第一短消息目标号码	
		     	byte[15]------- 块5的数据总效验 

	bank6:	     	byte[0:5]------ 6 字节第二短消息目标号码
		     	byte[6:11]----- 6 字节短消息服务中心号码
			BYTE[12]------- 主台随机数2
		     	byte[13:14]---- 起用卡验证字 BYTE[13]:高字节,BYTE[14]:低字节。
					算法:	
					bank4,bank5,bank6除每bankX的byte[15]以外,所有的数据的累加成一个16位无符号INT型(HEX格式)
					,得到——起用卡验证字[HEX], 高8位放至——BYTE[14],低8位放至BYTE[13]
		     	byte[15]------- 块6的数据总效验
		     



	3.0x02修改设置卡:(在水表起用过后修改某些设置)
			byte[0] ------- 0x02
	bank4:	     	byte[1:3]------ 3 字节系统号 
		     	byte[4:6]------ 3 字节软密码
		     	byte[7]-------- 1 字节修改的表工作方式控制字
		     	byte[8]-------- 数据项长度
			byte[9:14]----- 数据域			
		     	byte[15]------- 块4的数据总效验

	bank5:		byte[0:14]----- 数据域	
		     	byte[15]------- 块5的数据总效验

	bank6:	     	byte[0:3]------ 任意
		     	byte[4:6]------ 任意
		     	byte[7]-------- 任意
		     	byte[8:11]----- 任意
		     	byte[12:14]---- 任意
		     	byte[15]------- 任意




	4.0x03停用卡:(清除所有用户设置,使水表处于未起用模式)
			byte[0]-------- 0x03
	bank4:	     	byte[1:3]------ 3 字节系统号 
		     	byte[4]-------- 3 字节软密码
		     	byte[7:14]----- 停用字      //'s''t''o''p''m''e''t''r'停用验证字串           
		     	byte[15]------- 块b01的数据总效验


	bank5:		byte[0:3]------ 任意
		     	byte[4]-------- 任意
		     	byte[5:8]------ 任意
		     	byte[9]-------- 任意
		     	byte[10:13]---- 任意
		     	byte[14]------- 任意
		     	byte[15]------- 任意

	bank6:	     	byte[0:3]------ 任意
		     	byte[4:6]------ 任意
		     	byte[7]-------- 任意
		     	byte[8:11]----- 任意
		     	byte[12:14]---- 任意
		     	byte[15]------- 任意


	5.0x04无效卡;	(非用户卡在刷过一次后就作废成无校卡)
			byte[0]--------0x04
	bank4:	     	byte[1:3]------ 任意
		     	byte[4]-------- 任意
		     	byte[5]-------- 任意
		     	byte[6:14]----- 任意
		     	byte[15]------- 任意


	bank5:		byte[0:3]------ 任意
		     	byte[4]-------- 任意
		     	byte[5:8]------ 任意
		     	byte[9]-------- 任意
		     	byte[10:13]---- 任意
		     	byte[14]------- 任意
		     	byte[15]------- 任意

	bank6:	     	byte[0:3]------ 任意
		     	byte[4:6]------ 任意
		     	byte[7]-------- 任意
		     	byte[8:11]----- 任意
		     	byte[12:14]---- 任意
		     	byte[15]------- 任意

	6.0x05工厂测试卡;(用于水表的功能测试)




制卡示例:

1. 制起用卡
	//************************************主台设定的参数***********************************//
	    起用卡标识:0x00
		系统号:892345
	    硬件卡密码:334414567535
	    软件卡密码:654321
     表工作方式控制字1:0xfb
			此值表示:起用短信通讯,起用红外通讯,需要给表设定表号,干簧管位置在10升的转针上,卡中余额BCD码是金额
			短信发送超时有效期为1天,
	   主台随机数1:0x23
       块4的数据总效验:0x63

	    设置单价值:2元4角3分    0x02 0x43
  给待开户表设定的表号:00000012345678
    第一短消息目标号码:013813828458
       块5的数据总效验:0x03

    第二短消息目标号码:013813828458
    短消息服务中心号码:013800250500
	   主台随机数2:0x54
  	  起用卡验证字:经计算得0xF638。byte[13]=0xF6,byte[14]=0X38
       块6的数据总效验:0x8f
	//**************************************************************************************//

	//*************************************写入卡的数据*************************************//
	写起用卡时要求使用硬件卡密码为6个FF的卡(未设置过硬件卡密码的卡),
	读写密码为 ff ff ff ff ff ff 
	bank4写入:00 89 23 45 33 44 14 56 75 35 65 43 21 fb 23 63

	bank5写入:02 43 00 00 00 12 34 56 78 01 38 13 82 84 58 03

	bank6写入:01 38 13 82 84 58 01 38 00 25 05 00 54 F6 38 8f

	bank7(不写) 起用卡不写bank7卡控制区
	//**************************************************************************************//
	一张起用卡制成后,只能设置一台水表,后水表将起用卡返写成无效卡,主台可将用过的起用卡回收使用。


2. 制用户卡(在上面起用卡起用过的水表上使用)
	//************************************主台设定的参数***********************************//
	    用户卡标识:0x01
		系统号:892345
		  卡号:000001
	    软件卡密码:654321
  最近一次充值地点标识:0X01       		当前营业厅地点表识   	     
      最近一次充值时间:06122910  		06年/12月/29日/10时
       块4的数据总效验:0x0E

             余额/余量:0010155000              00101.55000元/立方米
         备份余额/余量:0010155000 		00101.55000元/立方米
	  前次消费金额:00000000 		  000.00000元/立方米
	  用户卡状态字:0x00			正常使用中无非法操作
       块5的数据总效验:0xEA

      前次用水结算时间:0000000000	  	BCD年/BCD月/BCD日/BCD时/BCD分  
 前次用水前卡余额/余量:000000000000	        00000.00000元/立方米
            前次用水量:000000	       	        000.000立方米
	  前次结算单价:0000			00.00元	
       块6的数据总效验:0x00

           卡硬件密码A:334414567535		卡硬件密码有KEYA,KEYB两组,为方便主台和水表使用,设KEYA,KEYB相同
	  卡读写控制区:0f00ff                  块b13: KeyA,KeyB都不可读,KeyA,KeyB写需要KeyB,CTR_BIT读写需要认证KeyB 
                				块b12: 读或写都需验证 KeyB                                                  
                				块b11: 读或写都需验证 KeyB    
                				块b10: 读或写都需验证 KeyB
           卡硬件密码B:334414567535
	//**************************************************************************************//

	//*************************************写入卡的数据*************************************//
	读写密码为 ff ff ff ff ff ff 
	写起用卡时要求使用硬件卡密码为6个FF的卡(未设置过硬件卡密码,和控制区的卡),
	bank4写入:01 89 23 45 00 00 01 65 43 21 01 06 12 29 10 0E

	bank5写入:00 10 15 50 00 00 10 15 50 00 00 00 00 00 00 EA 

	bank6写入:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

	bank7写入:33 44 14 56 75 35 0f 00 ff 00 33 44 14 56 75 35 
	//**************************************************************************************//

2. 制停用卡(在上面起用卡起用过的水表上使用)	
	bank4写入:0389234565432173746F706d6574723b


⌨️ 快捷键说明

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