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 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
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。