GP APDU Transport over SPI/I2C规范介绍
简介
IOT设备往往会使用安全元件(Secure Element,缩写SE)实现安全功能。SE和主机设备(Hosting Device,缩写HD)之间通过SPI/I2C接口连接,并传输数据。这个规范就定义了这个接口。类似OSI模型,这个协议分了物理层和数据链路层。
物理层
物理层接口可以是SPI或者是I2C
I2C
I2C总线必须包括两根信号Serial Clock Line (SCL)和Serial Data Line (SDA)。另外I2C-IRQ是可选的。这个协议中只支持7-bit Addressing,最大时钟频率为下列值:
o 400 kHz for Fast Mode
o 1000 kHz for Fast Mode Plus
o 3400 kHz for HS Mode
另外,如果SE支持Clock Stretching则HD必须也支持。
I2C-IRQ信号被SE通知HD,它已经准备好发送数据了。如果I2C-IRQ信号没有用,则HD必须用轮询的方式接收SE数据。
数据链路层
这个规范的链路层协议和[7816-3]的T=1 protocol,被称为T=1’ 协议。
数据链路层的数据被分成若干块(block)进行传输,块是链路层最小的传输单位。这个规范定义了三种块:
信息块(information block / I-block):应用层通过这种块传输信息,同时I-block也可以用于传输应答(acknowledgement)
应答块 (receive ready block / R-block):用于传输应答(acknowledgement)
控制块 (supervisory block / S-block):用于传送控制信息
每个block的结构如下:
Prologue FieldPrologue FieldPrologue FieldInformation FieldEpilogue Field
NAD (1 byte)PCB (1 byte)LEN (2 byte)INF (LEN bytes)CRC (2 bytes)
节点地址字节域Node Address Byte (NAD)
NAD域表示报文的源和目的地址。前4个bit是目的地址(DAD),后4bit是源地址(SAD)。源和目的地址不能一样,且不能是全0或全1。
Destination Address (DAD)Source Address (SAD)
8 – 5b4 – 1b
对于HD和SE是1对1的情况,这个规范建议用0001b做HD地址,0010b做SE地址。
协议控制域Protocol Control Byte (PCB)
PCB定义了block的类型,并可以用于传输一些控制数据
TypeSub-Typeb8b7b6b5b4b3b2b1
I-BlockApplication Data0N(S)M-bit00000
R-BlockError-free acknowledgement100N(R)0000
CRC error100N(R)0001
Other error100N(R)0010
S-BlockRESYNCH request11000000
RESYNCH response11100000
IFS request11000001
IFS response11100001
ABORT request11000010
ABORT response11100010
WTX request11000011
WTX response11100011
CIP request11000100
CIP response11100100
RELEASE request11000110
RELEASE response11100110
SWR request11001111
SWR response11101111
Reserved for future use11x10xxx
Reserved for proprietary use11x11xxx
注
N(S): I-block中发送的序列号,值是0和1交替,每发一个block就变一次。
M-bit:用在block链表中,1表示后面还有下一个block。
N(R ):每个R-block都带一位N( R),表示期待的下一个I-block的N(S)位的值。
说明
S(RESYNCH request): 请求重新同步resynchronization。每个I-block都会带N(S),resynchronization的意思就是重新从0开始计数。
S(IFS request): 用于获取HD和SE侧各自的信息域 (Information Field)的最大长度。
S(ABORT request):请求结束当前链。
S(WTX request): 如果SE需要比BWT更长的时间处理I-Block,则会发送S(WTX request)消息给HD,其中包含了要求延长的时间,整个值用BWT的整数倍表示。HD收到这个消息后应该回复S(WTX response)。
S(CIP request): HD请求SE返回CIP。
S(CIP response): SE对S(CIP request)的响应,其中包含了请求的CIP。
S(RELEASE request): HD释放SE,SE可以进入省电模式了。
S(RELEASE response): SE对S(RELEASE request)的响应。
S(SWR request): HD请求SE对其通信接口进行软复位,同时HD需要对N(S)位进行复位,丢弃之前的 block的连接信息。
-S(SWR response): SE对 S(SWR request)的响应。
长度域 Length (LEN)
这个域表示INF域的长度。
信息域Information (INF)
INF的内容根据block类型的不同而不同。
TypeSub-TypeInformation Field Usage
I-BlockApplication DataApplication Data
R-BlockError-free acknowledgement不存在
CRC error不存在
Other error不存在
S-BlockRESYNCH request不存在
RESYNCH response不存在
IFS request1/2字节的IFS值
IFS response同IFS request
ABORT request不存在
ABORT response不存在
WTX request长度为1字节的BWT的倍数
WTX response同WTX request
CIP request不存在
CIP response通信接口参数
RELEASE request不存在
RELEASE response不存在
SWR request不存在
SWR response不存在
后记域 Epilogue
内容是2字节的块数据的CRC校验。
通信接口参数(CIP)
通常在上电或者软复位后,主机设备需要获得通信接口参数才能和SE进行后续的通信。这个过程是通过主机发送CIP request,SE用CIP response响应实现的。通信接口参数包含在CIP response的INF域中,其结构如下:
CIP INF域结构
名称长度描述
PVER1协议版本,目前的版本是01
IIN长度1IIN(Issuer Identification Number)的长度
IIN3-4IIN(Issuer Identification Number)
PLID1物理层ID, 对SPI是0,对I2C是1
PLP长度1PLP域的长度
PLP不固定物理层参数 Physical Layer Parameters
DLLP长度1DLLP域的长度
DLLP不固定数据链路层参数 Data Link Layer Parameters (见后文)
HB长度1HB域的长度
HB不固定历史字节
CIP数据链路层参数
名称长度描述
BWT2Block的等待时间,以毫秒为单位。是SE收到的上一个字节的开始时间到下一个发送字节的开始时间之间的间隔
IFSC2SE的最大信息域长度(Information Field)
CIP物理层参数
名称长度描述
PWT1供电唤醒时间
MCF2最大时钟频率
PST1省电模式超时时间
MPOT1最小轮询时间
SEGT2SE保护时间
SEAL2最大SE访问长度
WUT2唤醒时间
————————————————
原文链接:https://blog.csdn.net/Eagle_K2/article/details/107696424
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。