Java教程

掉电读卡器 - 设计文档_v0.1

本文主要是介绍掉电读卡器 - 设计文档_v0.1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

掉电读卡器设计文档

版本V0.1

 

 

 

 

 

 

深圳融卡科技有限公司

 

 

 

 

 

 

 

 

司 网 址:http://rongcard.com

司 电 话:0755-86032937

  址:深圳市南山区软件产业基地5B303


版本历史

版本

日期

版本描述

V1.0

2021/12/03

初次发布版本

 

 

 

 

 

 

 

目录

1. 概述

2. 模块设计

2.1. 主机通讯模块

2.1.1. 主机命令

2.1.2. URAT协议

2.2.3. RFU

2.2. 内核模块

2.3. 从机驱动模块

2.3.1. ISO7816

2.3.2. SPI

2.3.3. I2C

2.3.4. RFU

2.4. 私有指令处理模块

2.4.1. CMD_SET_WORKING_MODE

2.4.2. CMD_SET_SLAVE_EXE_TIME_LIMIT

2.4.3. RFU

2.5. 掉电指令处理模块

2.5.1. Init_PD_parameter

2.5.2. Get_PD_count

2.5.3. Set_PD_PageWriteCnt

2.5.4. Get_COS_info

2.5.5. RFU

3. 流程

3.1. 基本逻辑

3.2. 主机通讯流程

3.2.1. 拦截特殊指令

3.2.2. 处理特殊命令

3.2.3. 主机协议解析失败

3.2.3. 主机通讯超时

3.3. 从机通讯流程

3.3.2. 从机通讯超时处理

3.3.3. 从机协议解析失败

3.4. 掉电测试流程

3.4.1. 从机命令未能按预期触发掉电

4. 函数接口

4.1. 读卡器管理接口

4.1.1. 读卡器初始化

4.1.2. 读卡器配置

4.1.3. 主机消息分发

4.1.4. 打开指定的定时器

4.1.5. 关闭指定的定时器

4.1.6. 关闭所有定时器

4.1.7. 从机超时管理

4.2. 主机侧协议接口

4.2.1. 侦听主机消息

4.2.2. 主机侧协议解析

4.2.3. 读卡器响应数据封包

4.2.4. 响应主机消息

4.3. 从机侧协议接口

4.3.1. 侦听从机消息

4.3.2. 从机侧协议解析

4.3.3. 读卡器下发数据封包

4.3.4. 下发从机消息

4.3.5. 从机上电

4.3.6. 从机冷复位

4.3.7. 从机热复位

4.3.8. 从机下电

4.3.9 从机响应特殊状态字封包

4.3.10. 维护从机响应的等待时间

4.3.11. 从机超时中断处理

附录A 掉电时间计算公式

附录B 常量

附录C 全局变量

 

1. 概述

为了搭建 SE 的自动化测试环境,需要设计一种高契合度的读卡器:

为了在性能测试中得到更精准的执行时间,它具有计时功能;

为了在掉电测试中模拟更真实的用户场景,它提供一套掉电测试接口;

为了解决 SE 异常时总需要物理拔插的问题,它能根据在执行测试之前预设的策略模拟人为操作,并会以事先约定好的方式告知测试脚本,使测试可以更好地自动化;

它还可以在兼顾上述特性的同时,满足 SE 测试不同协议的需求,以确保测试环境的一致性。

1.1 是一种支持自动化的测试环境示意图。

1.2 是上述读卡器的框图。

 

1.1

1.2

本读卡器在同一时刻只支持连接一个主机和一个从机。

2. 模块设计

本读卡器共有5个模块,分别是:主机通讯模块、私有指令处理模块、掉电指令处理模块、内核模块、从机驱动模块。

工程文件结构可能如下:

2.1. 主机通讯模块

该模块负责与主机通讯,定义了主机通过读卡器操作从机的一些命令,以及主机与读卡器之间的通讯协议。

2.1.1. 主机命令

名称

命令

冷复位

FE FE FE FE

热复位

FE FE FE FD

断电

FE FE FE FC

注意,连接的操作等同于复位,与复位的区别在于主机显不显示复位应答的值。

2.1.2. URAT协议

2.1.2.1. 通讯报文格式

 

接口

类型

后续

长度

数据

Tag

数据

Len

数据

Value

时间

Tag

时间

Len

时间

Value

长度(字节)

1

2

1

2

X

1

1

X

XX

XXXX

00

XXXX

XXXXX

01

XX

XXXXX

2.1.2.2. 接口类型

接口名称

ISO7816

0x00

SPI

0x01

I2C

0x02

...

 

2.1.2.3. 通讯交互示例

--> 表示主机下发至读卡器

<-- 表示读卡器响应至主机

2.1.2.3.1. ISO7816冷复位

--> 00 0009 00 0004 FEFEFEFE 01 00

<-- 00 0017 00 0010 3B1D968117081212003D17060000C300 01 02 0108

2.1.2.3.1. ISO7816热复位

--> 00 0009 00 0004 FEFEFEFD 01 00

<-- 00 0017 00 0010 3B1D968117081212003D17060000C300 01 02 0054

2.1.2.3.1. ISO7816断电

--> 00 0009 00 0004 FEFEFEFC 01 00

<-- 00 0017 00 0002 9000 01 02 0012

2.2.3. RFU

保留扩展其它主机协议。

2.2. 内核模块

该模块充当主机和从机之间的“中间人”,使得它们之间无需实现对方的通讯协议,所有的交互均通过读卡器完成,包括一些基本的从机异常管理机制,以及记录从机的执行时间。

由于允许主机和从机支持多种通讯协议,因此该模块的实现方式可能是:主机和从机协议侧的接口定义为函数指针,协议切换时指向对应的协议实现函数,内核模块可以直接通过函数指针调用。

2.3. 从机驱动模块

该模块负责与从机通讯,定义了从机与读卡器之间的通讯协议。

2.3.1. ISO7816

2.3.2. SPI

2.3.3. I2C

2.3.4. RFU

保留扩展其它从机协议

2.4. 私有指令处理模块

该模块定义了一些供主机使用的私有指令。

2.4.1. CMD_SET_WORKING_MODE

2.4.1.1. 命令描述

设置读卡器的工作模式。

2.4.1.2. 命令格式

编码

值(HEX)

CLA

FF

INS

CC

P1

00

P2

00

LC

02

DATA

见数据域

2.4.1.3. 命令数据域

DATA_1

DATA_2

说明

01

00

正常模式

01

01

保留 EMV

01

02

保留 Memory card mode

01

04

保留 NFC Test Mode

01

80

掉电模式

2.4.1.4. 响应状态码

响应中可能出现的状态码:

 

SW1

SW2

说明

90

00

执行成功

2.4.2. CMD_SET_SLAVE_EXE_TIME_LIMIT

2.4.2.1. 命令描述

设置读卡器支持从机执行一条命令的最长时间。在达到该限制时间后,读卡器主动使从机下电。

2.4.2.2. 命令格式

编码

值(HEX)

CLA

FF

INS

CC

P1

01

P2

00

LC

04

DATA

见数据域

2.4.2.3. 命令数据域

四字节无符号整数,详见表 7.1 定义的 g_SlaveExeTimeLimit 全局变量。

2.4.2.4. 响应状态码

响应中可能出现的状态码:

 

SW1

SW2

说明

90

00

执行成功

2.4.3. RFU

保留扩展其它私有指令。

2.5. 掉电指令处理模块

与在程序中设置掉电桩的测试方法不同,掉电读卡器更加贴近用户场景,其原理是先执行一遍需要测试的指令,得到执行时间之后设置一个掉电时间的步长(例如1ms)和预期掉电的执行时间,然后再次执行测试指令,当测试指令执行到指定时间段后,掉电读卡器控制从机下电,返回掉电状态字给主机,然后主机可通过掉电读卡器让从机上电,进行一些掉电测试验证。

打桩掉电与掉电读卡器的主要区别在于前者可以精准测试上层逻辑,但无法在类似Flash擦写的过程中掉电,而后者可以覆盖任意时间段。

2.5.1. Init_PD_parameter

2.5.1.1. 命令描述

初始化掉电相关参数配置。

2.5.1.2. 命令格式

编码

值(HEX)

CLA

52

INS

DF

P1

00

P2

00

LC

00:默认时间系数为 1.0
02:表示需要指定时间系数
时间系数的定义在附录A

DATA

见数据域

LE

 

2.5.1.3. 命令数据域

一字节时间系数的整数 + 一字节时间系数的小数。

由读卡器组合,例如 00 + 05 = 0.5

2.5.1.4. 响应状态码

响应中可能出现的状态码:

 

SW1

SW2

说明

90

00

执行成功

2.5.2. Get_PD_count

2.5.2.1. 命令描述

获取上一条指令的执行时间。

2.5.2.2. 命令格式

编码

值(HEX)

CLA

52

INS

DF

P1

01

P2

00

LE

03

2.5.2.3. 响应数据域

字节无符号数值:表示上一条指令的执行时间,单位ms

2.5.2.4. 响应状态码

响应中可能出现的状态码:

SW1

SW2

说明

90

00

执行成功

2.5.3. Set_PD_PageWriteCnt

2.5.3.1. 命令描述

设置掉电时间的参数(启动掉电测试)

2.5.3.2. 命令格式

编码

值(HEX)

CLA

52

INS

DF

P1

02

P2

00

LC

03

DATA

见数据域

2.5.3.3. 命令数据域

DATA_1

DATA_2

DATA_3

说明

XX

时间参数的高字节

时间参数的字节

读卡器应忽略 DATA_1,在附录A中定义时间参数

2.5.3.4. 响应状态码

响应中可能出现的状态码:

SW1

SW2

说明

90

00

执行成功

2.5.4. Get_COS_info

2.5.4.1. 命令描述

获取卡片信息(已废弃)

2.5.4.2. 命令格式

编码

值(HEX)

CLA

52

INS

DF

P1

03

P2

00

LE

FF

2.5.4.3. 响应数据域

2 字节 map 计数 + 4 字节 used_addr_no + 2 字节 RTR_ADDR + 247 字节用户地址所在页有效数据

2.5.4.4. 响应状态码

响应中可能出现的状态码:

SW1

SW2

说明

90

00

执行成功

2.5.5. RFU

保留扩展其它掉电指令

3. 流程

3.1. 基本逻辑

3.1.1

 

3.2. 主机通讯流程

3.2.1

3.2.1. 拦截特殊指令

3.2.2 读卡器只有一个掉电子功能的场景

3.2.2. 处理特殊命令

3.2.3

3.2.3. 主机协议解析失败

3.2.4

3.2.4. 主机通讯超时

3.2.5

 

3.3. 从机通讯流程

 3.3.1

3.3.2. 从机通讯超时处理

3.3.2

3.3.3. 从机协议解析失败

3.3.3

 

3.4. 掉电测试流程

3.4.1

3.4.1. 从机命令未能按预期触发掉电

这种情况读卡器将直接返回从机的响应数据,所以只需关闭掉电定时器。

3.4.2

 

 

4. 函数接口

以下协议接口将被定义为函数指针,由设置从机协议时读卡器完成切换协议实现函数。

4.1. 读卡器管理接口

4.1.1. 读卡器初始化

4.1.1.1

接口名称

Reader_Init

接口描述

执行一些初始化操作

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.1.2. 读卡器配置

4.1.2.1

接口名称

Reader_config

接口描述

根据主机下发的命令参数和附带的数据执行私有命令

类别

名称

类型

描述

参数

cmd_type

u8

命令类型
0:全部配置初始化
1:获取上一条指令的执行时间
2:设置掉电时间参数
3:获取卡片信息(已废弃)
4:设置从机使用的协议

cmd_para

u32

命令参数

返回值

 

void

无返回

4.1.3. 主机消息分发

4.1.3.1

接口名称

Reader_handleHostCommand

接口描述

处理主机侧命令

类别

名称

类型

描述

参数

host_buf

u8 *

待执行的主机消息

host_bufL

u16

待执行的主机消息长度

返回值

 

void

无返回

4.1.4. 打开指定的定时器

4.1.4.1

接口名称

Reader_timerOpen

接口描述

计算掉电时间并打开定时器中断

类别

名称

类型

描述

参数

calc_mode

u8

详见附录A定义的计算掉电时间
0: 简单模式
其它值均默认使用简单模式

need_timer

u8

0:等待时间定时器
1:掉电定时器
其它值均忽略。

返回值

 

void

无返回

4.1.5. 关闭指定的定时器

4.1.5.1

接口名称

Reader_timerClose

接口描述

关闭定时器中断

类别

名称

类型

描述

参数

need_timer

u8

0:等待时间定时器
1:掉电定时器
其它值均忽略。

返回值

 

void

无返回

4.1.6. 关闭所有定时器

4.1.6.1

接口名称

Reader_timerCloseAll

接口描述

关闭所有定时器中断

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.1.7. 从机超时管理

4.1.7.1

接口名称

Reader_slaveTimerOutManage

接口描述

由从机超时中断处理函数调用,负责完成一些与协议无关的超时处理。

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.2. 主机侧协议接口

4.2.1. 侦听主机消息

暂时由读卡器直接调用指定主机协议类型的侦听接口,后续可能需要支持自动识别。

4.2.1.1

接口名称

Reader_listenHost

接口描述

侦听主机下发的消息

类别

名称

类型

描述

参数

host_buf

u8 *

存储主机侧下发的消息

返回值

message_length

u16

收到的消息长度

4.2.2. 主机侧协议解析

4.2.2.1

接口名称

Reader_resolveHostPackage

接口描述

解析主机侧下发的消息

类别

名称

类型

描述

参数

host_buf

u8 *

待解析的主机消息

host_bufL

u16

待解析的主机消息长度

返回值

result

boolean

解析结果
true:成功解析
false: 无法解析

4.2.3. 读卡器响应数据封包

4.2.3.1

口名称

Reader_packResp

接口描述

将需要返回给主机的信息进行协议封包

类别

名称

类型

描述

参数

reader_buf

u8 *

读卡器的响应数据

reader_bufL

u16

读卡器响应数据的长度

host_buf

u8 *

存储待响应给主机的消息

返回值

message_length

void

待响应给主机的消息长度

4.2.4. 响应主机消息

4.2.4.1

接口名称

Reader_response

接口描述

将协议包发送给主机

类别

名称

类型

描述

参数

host_buf

u8 *

待响应给主机的消息

host_bufL

u16

待响应给主机的消息长度

返回值

result

boolean

通讯结果
true:发送成功
false:发送失败

4.3. 从机侧协议接口

4.3.1. 侦听从机消息

4.3.1.1

接口名称

Reader_listenSlave

接口描述

侦听从机响应的消息

类别

名称

类型

描述

参数

host_buf

u8 *

存储从机侧响应的消息

返回值

message_length

u16

收到的消息长度

4.3.2. 从机侧协议解析

4.3.2.1

接口名称

Reader_resolveSlavePackage

接口描述

解析从机侧响应的消息

类别

名称

类型

描述

参数

slave_buf

u8 *

待解析的从机消息

slave_bufL

u16

待解析的从机消息长度

返回值

result

boolean

解析结果
true:成功解析
false: 无法解析

4.3.3. 读卡器下发数据封包

4.3.3.1

接口名称

Reader_packCommand

接口描述

将需要下发给从机的信息进行协议封包

类别

名称

类型

描述

参数

reader_buf

u8 *

读卡器的命令数据

reader_bufL

u16

读卡器命令数据的长度

slave_buf

u8 *

存储待下发给从机的消息

返回值

message_length

void

待下发给从机的消息长度

4.3.4. 下发从机消息

4.3.4.1

接口名称

Reader_send

接口描述

将协议包发送给从机

类别

名称

类型

描述

参数

slave_buf

u8 *

待响应给主机的消息

slave_bufL

u16

待响应给主机的消息长度

返回值

result

boolean

通讯结果
true:发送成功
false:发送失败

4.3.5. 从机上电

4.3.5.1

接口名称

Reader_slavePowerON

接口描述

解析从机侧响应的消息

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.3.6. 从机冷复位

4.3.6.1

接口名称

Reader_slaveColdReset

接口描述

解析从机侧响应的消息

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.3.7. 从机热复位

4.3.7.1

接口名称

Reader_slaveWarmReset

接口描述

解析从机侧响应的消息

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.3.8. 从机下电

4.3.8.1

接口名称

Reader_slavePowerOFF

接口描述

解析从机侧响应的消息

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.3.9 从机响应特殊状态字封包

4.3.9.1

接口名称

Reader_packSlaveRecv

接口描述

将需要模拟从机响应的特殊状态字进行协议封包。

类别

名称

类型

描述

参数

slave_buf

u8 *

存储从机消息

special_sw

u16

待封包的特殊状态字

返回值

slave_bufL

u16

存储从机消息的长度

4.3.10. 维护从机响应的等待时间

4.3.10.1

接口名称

Reader_slaveWTX

接口描述

读卡器将在下发从机命令之后,在侦听从机消息之前调用该接口,以处理协议中的延长等待时间操作。

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

4.3.11. 从机超时中断处理

4.3.11.1

接口名称

Reader_slaveTimerOutIRQHandle

接口描述

读卡器在协议规定时间内未接收到从机发送的延长等待时间消息时,触发从机超时中断,进入该中断处理函数,完成与协议相关的超时处理之后,调用第 4.1.7 章节定义的从机超时管理接口。

类别

名称

类型

描述

参数

 

void

无参数

返回值

 

void

无返回

附录A 掉电时间计算公式

时间参数用于控制预期掉电的执行时间;时间系数用于微调掉电时间。

简单模式掉电时间ms = 时间参数 * 时间系数

附录B 常量

6.1

常量名

常量值

描述

SW_POWER_OFF

0x6FFF

成功触发掉电定时器

附录C 全局变量

7.1

变量名

类型

长度

描述

g_ReaderMode

u8

1

读卡器工作模式
0:默认值,不拦截特殊命令
1:自动拦截并能够处理掉电相关命令
其它值未定义,按默认值处理

g_ReaderState

u8

1

读卡器状态,详见第 3.2 章节

g_PowerOffTimePara

u16

2

掉电时间参数,详见附录A

g_PowerOffTimeFactor

float

2

掉电时间系数,详见附录A

g_PowerOffFlag

boolean

1

掉电测试开关

0:默认值,表示没有特殊操作

1:表示启动掉电测试,详见第 3.2.5 章节

g_MessageBuf

u8 数组

1024

存储消息数据

g_CommandRespBuf

u8 数组

1024

存储命令和响应数据

g_SlaveExeTimeLimit

u32

4

设置从机执行一条命令的最长时间(ms)
0:默认值,表示没有限制
其它值,例如 1000 表示 1 秒

 



来自为知笔记(Wiz)

附件列表

     

    这篇关于掉电读卡器 - 设计文档_v0.1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!