新闻  |   论坛  |   博客  |   在线研讨会
GP APDU Transport over SPI/I2C规范介绍
电子禅石 | 2023-03-16 13:32:34    阅读:14705   发布文章

简介

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 Field Prologue Field Prologue Field Information Field Epilogue 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 – 5b 4 – 1b

对于HD和SE是1对1的情况,这个规范建议用0001b做HD地址,0010b做SE地址。


协议控制域Protocol Control Byte (PCB)

PCB定义了block的类型,并可以用于传输一些控制数据


Type Sub-Type b8 b7 b6 b5 b4 b3 b2 b1

I-Block Application Data 0 N(S) M-bit 0 0 0 0 0

R-Block Error-free acknowledgement 1 0 0 N(R) 0 0 0 0

CRC error 1 0 0 N(R) 0 0 0 1

Other error 1 0 0 N(R) 0 0 1 0

S-Block RESYNCH request 1 1 0 0 0 0 0 0

RESYNCH response 1 1 1 0 0 0 0 0

IFS request 1 1 0 0 0 0 0 1

IFS response 1 1 1 0 0 0 0 1

ABORT request 1 1 0 0 0 0 1 0

ABORT response 1 1 1 0 0 0 1 0

WTX request 1 1 0 0 0 0 1 1

WTX response 1 1 1 0 0 0 1 1

CIP request 1 1 0 0 0 1 0 0

CIP response 1 1 1 0 0 1 0 0

RELEASE request 1 1 0 0 0 1 1 0

RELEASE response 1 1 1 0 0 1 1 0

SWR request 1 1 0 0 1 1 1 1

SWR response 1 1 1 0 1 1 1 1

Reserved for future use 1 1 x 1 0 x x x

Reserved for proprietary use 1 1 x 1 1 x x x


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类型的不同而不同。


Type Sub-Type Information Field Usage

I-Block Application Data Application Data

R-Block Error-free acknowledgement 不存在

CRC error 不存在

Other error 不存在

S-Block RESYNCH request 不存在

RESYNCH response 不存在

IFS request 1/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域结构

名称 长度 描述

PVER 1 协议版本,目前的版本是01

IIN长度 1 IIN(Issuer Identification Number)的长度

IIN 3-4 IIN(Issuer Identification Number)

PLID 1 物理层ID, 对SPI是0,对I2C是1

PLP长度 1 PLP域的长度

PLP 不固定 物理层参数 Physical Layer Parameters

DLLP长度 1 DLLP域的长度

DLLP 不固定 数据链路层参数 Data Link Layer Parameters (见后文)

HB长度 1 HB域的长度

HB 不固定 历史字节

CIP数据链路层参数

名称 长度 描述

BWT 2 Block的等待时间,以毫秒为单位。是SE收到的上一个字节的开始时间到下一个发送字节的开始时间之间的间隔

IFSC 2 SE的最大信息域长度(Information Field)

CIP物理层参数

名称 长度 描述

PWT 1 供电唤醒时间

MCF 2 最大时钟频率

PST 1 省电模式超时时间

MPOT 1 最小轮询时间

SEGT 2 SE保护时间

SEAL 2 最大SE访问长度

WUT 2 唤醒时间


————————————————


原文链接:https://blog.csdn.net/Eagle_K2/article/details/107696424


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客