不識卡問題(modem的log沒有UIM卡相關的)
高通某些穿戴設備的芯片通過一些編譯選項把UIM的log disable了(爲了節省內存/緩存),disable的情況下,不僅僅把UIM的logdisable,還把CM/MMOC/WMS/REG等的log disable了。
修改編譯選項(modem_proc\build\ms\cust8909.xxxx.h)
檢查NV70210,是否設置了ENABLE_UIM_HOTSWAP = true,如果是,設置爲false。
使用default log mask 並且加延(NV 4205的57項)時抓取UIM開機的log
log會顯示 Uim power up @ 1.8V和MMGSDI_CARD_INSERTED_EVT,slot:0x1這些字樣!
一個APDU可以是一個命令,也可以是命令的響應。
命令APDU的一般格式: CLA INS P1 P2 P3 Data
響應APDU的一般格式: Data SW1 SW2
各個字節的意義如下: CLA: 是指令類型,GSM應用爲0xA0。
INS:每個命令的指令編碼,下面有定義。
P1,P2,P3:指令參數。0xFF是個無效值,P3給出了數據單元的長度。對於傳送命令,當SIM 流出數據時,P3=0表示數據的長度爲256,而SIM 流入數據時P3=0表 示沒有數據。
SW1,SW2:命令結果是否成功的狀態。
指令的5種情況
情況1:沒有輸入/沒有輸出 CLA INS P1 P2 P3(lgth=0x00) SW1=0x90 SW2=0x00
情況2:沒有輸入/輸出長度已知 CLA INS P1 P2 P3(長度值lgth) DATA(長度爲lgth) SW1=0x90 SW2=0x00
情況3:沒有輸入/輸出長度未知 CLA INS P1 P2 P3(lgth=0) SW1=0x9F SW2=lgth1 GET RESPONSE CLA INS P1 P2 P3(lgth2) DATA(長度leth1<=leth2) SW1=0x90 SW2=0x00
情況4:有輸入/沒有輸出 CLA INS P1 P2 P3(lgth) DATA(長度爲lgth) SW1=0x90 SW2=0
情況5:有輸入/輸出長度未知或已知 CLA INS P1 P2 P3(lgth) DATA(長度爲lgth) SW1=0x9F SW2=lgth1 GET RESPONSE CLA INS P1 P2 P3(lgth2) DATA(長度lgth2<=lgth1) SW1=0x90 SW2=0x00
11.11中命令集如下:
(1) SELECT 選擇一個文件的方法:
ATR(復位)之後,MF將取消被選擇,並且成爲當前的目錄。每個文件必須通過SELECT功能通過下面的規則來選擇。
這時,你可以選擇MF,也可以選擇MF目錄下的DF和MF目錄下EF,若想要選擇某一DF中的EF,必須先選擇該DF成爲當前目錄,再選擇DF中的EF。
例:
//SELECT
A0 A4 00 00 02 3F00
9F 17
//SELECT
A0 A4 00 00 02 7F10
9F 17
//SELECT
A0 A4 00 00 02 6F3A
9F 0F
CLA=A0:表示GSM應用 INS=A4:表示SELECT P1P2=0000:表示參數 P3=02:表示輸入文件ID的長度 3F00,7F10,6F3A表示選擇的文件ID SW1=9F SW2=17(23)/0F(15)表示命令正確結束,其中SW2表示響應值長度
(2) STATUS
此功能返回與當前文件目錄(根目錄或應用目錄)有關的信息,此操作不會改變當前EF內容;
這條命令可在任何時候使用,以獲得與GSM應用有關的信息;
輸入:無;
輸出:文件標識符,總的可用存儲空間,CHV激活/屏蔽,CHV狀態和其他的GSM詳細數據
例:
//SELECT
A0 A4 00 00 02 7F10
9F 22
//STAUTS
A0 F2 00 00 22
90 00
00005DD07F1002000000000015B10114060085838583000083830000000000000000
CLA=A0:表示GSM應用 INS=F2:表示STATUS P1P2=0000:表示參數 P3=22:表示返回響應值長度(從SELECT的返回值中獲取) SW1=90 SW2=00 表示命令正確結束 00005DD07F1002000000000015B10114060085838583000083830000000000000000表示返回的響應值(響應的參數/數據同使用SELECT命令選中MF和DF時的響應數據相同。)
(3) GET RESPONSE
此功能返回與當前文件目錄(根目錄或應用目錄)有關的信息
這條命令可在任何時候使用,以獲得與GSM應用有關的信息;
輸入:無;
輸出:文件標識符,總的可用存儲空間,CHV激活/屏蔽,CHV狀態和其他的GSM詳細數據
STATUS與GET RESPONSE:區別在於STATUS命令不適用與EF,其中P3所需要的len爲select響應的參數SW2
//SELECT
A0 A4 00 00 02 3F00
9F 17
//SELECT
A0 A4 00 00 02 7F10
9F 17
//SELECT
A0 A4 00 00 02 6F3A
9F0F
//GET RESPONSE
A0 C0 00 00 0F
0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C
9000
0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C
//--00 00 保留
//--0A F0 佔用的空間大小,表示7000字節
//--6F 3A 選中File的ID
//--04 文件類型,見11.11 9.3
//----'00':保留 '01':MF '02':DF '04':EF
//----此文件類型 EF
//--00 見11.11 9.2.1 detail 3
//----對於二進制和記錄文件,該字節爲保留字節。對於循環文件,除b6(0 based)外所有的bit都是保留的,b6=1表示當前所選擇的循環文件可以執行INCREASE命令
//--11 FF 44 訪問權限
//--01 文件狀態,見11.11 9.3
//----+--+--+--+--+--+--+--+--+
//----|b7|b6|b5|b4|b3|b2|b1|b0|
//----+--+--+--+--+--+--+--+--+
//---- | | | | | | | +-b0=0文件無效, b0=1文件有效
//---- | | | | | | +----RFU
//---- | | | | | | b2=0: 當文件無效時不允許讀和寫
//---- | | | | | +-------b2=1: 當文件無效時允許讀和寫
//---- +--+--+--+--+----------RFU
//----本字節表示文件有效,當文件無效時不允許讀/寫
//--02 後面數據的長度,表示2
//----01 文件結構,見11.11 9.3
//------'00':二進制文件(透明文件) '01':記錄文件(線性定長) '03':循環文件
//------此文件結構記錄文件
//----1C 記錄長度,見11.11 9.2.1 detail 4
(4)READ BINARY
此功能允許SIM卡從當前透明文件中讀取字節串;
如果不滿足EF文件READ指令的訪問准予條件,SIM卡拒絕該功能;
輸入:字節串的偏移地址和長度;
輸出:字節串;
//SELECT A0 A4 00 00 02 2F05 9F 0F
//GET RESPONSE A0 C0 00 00 0F 0000 0008 2F05 04 00 01FF55 01 02 0000 90 00
//READ BINARY A0 B0 00 00 08 6573656E66727074 90 00
//READ BINARY A0 B0 00 01 04 73656E66 90 00
CLA=A0:表示GSM應用 INS=B0:表示READ BINARY P1P2=0000:表示高低位偏移 P3=08:表示返回響應值長度(從SELECT的返回值中獲取) (當P1P2=0001,P3=04時表示向右偏移1位,返回長度爲4的響應值) SW1=90 SW2=00 表示命令正確結束
(5)UPDATE BINARY
此功能用於更新當前透明文件的字節串;
如果不滿足EF文件UPDATE指令的訪問准予條件,SIM卡拒絕該功能;
輸入:字節串的偏移地址和長度;
輸出:無;
//SELECT A0 A4 00 00 02 2F05 9F 0F
//GET RESPONSE A0 C0 00 00 0F 0000 0008 2F05 04 00 01FF55 01 02 0000 90 00
//READ BINARY A0 B0 00 00 08 6573656E66727074 90 00
//UPDATE BINARY A0 D6 00 00 08 0000000000000001 90 00
//READ BINARY A0 B0 00 00 08 0000000000000001 90 00 更新成功!
(6)READ RECORD 此功能用於讀取線性固定文件或循環文件的記錄; 如果不滿足EF文件READ指令的訪問准予條件,SIM卡拒絕該功能。若操作失敗,記錄指針不改變; 讀指令定義了4種模式: CURRENT模式(04):讀當前的記錄,記錄指針不變; ABSOLUTE模式(04+記錄號):讀給定記錄號的記錄,記錄指針不變; NEXT模式(02):功能執行前記錄指針加一,然後讀取指針指向的記錄。 PREVIOUS模式(03):功能執行前記錄指針減一,然後讀取指針指向的記錄。 輸入:模式、記錄號(ABSOLUTE模式)、記錄長度; 輸出:記錄;
//SELECT A0A4000002 3F00 9F17
//SELECT A0A4000002 7F10 9F17
//SELECT A0A4000002 6F3A 9F0F
//GET RESPONSE A0C000000F 00000AF06F3A040011FF440102011C 9000
//READ RECORD A0B201041C 80aabbccddFFFFFFFFFFFFFFFFFF07812143658709F1FFFFFFFFFFFF 9000
(7)UPDATE RECORD
向線性定長記錄的EF文件或循環記錄EF文件中寫入一條完整的記錄;
如果不滿足EF文件UPDATE指令的訪問准予條件,SIM卡拒絕該功能。若操作失敗,記錄指針不改變;
//SELECT A0A4000002 3F00 9F17
//SELECT A0A4000002 7F10 9F17
//SELECT A0A4000002 6F3A 9F0F
//GET RESPONSE A0C000000F 00000AF06F3A040011FF440102011E 9000
//UPDATE RECORD A0DC01041E
輸入數據: 111110000000000000000000000000000000000000000000000000000000
90 00
APDU= ApplicationProtocol data unit, 是智能卡與智能卡讀卡器之間傳送的信息單元, (給智能卡發送的命令)指令(ISO 7816-4規範有定義) CLA INS P1 P2 Lc Data Le
其中CLA爲指令類別;INS爲指令碼;P1、P2爲參數;Lc爲Data的長度;Le爲希望響應時回答的數據字節數,0表最大可能長度。
00A4040000:發送一個空的選擇命令,獲取卡和主安全域的信息。00A40400是select選擇對應的CLA,INS,P1和P2,後面2位是發送的文件名的長度。此命令使用文件名或應用標示符來選擇IC卡內DF(專用文件)或EF(基本文件)。
80此命令創建卡片文件系統,80CA9F7F00:獲取CPLC信息。8050XXXXX: 雙向認證並建立會話密鑰。
非接觸CPU卡應該支持以下與應用無關的常用指令命令:
編號 |
指令 |
指令類別 |
指令碼 |
功能描述 |
|
APPLICATION UNBLOCK |
84 |
18 |
應用解鎖 |
|
APPLICATION BLOCK |
84 |
1E |
應用鎖定 |
|
CARD BLOCK |
84 |
16 |
卡片鎖定 |
|
EXTERNAL AUTHENTICATE |
00 |
82 |
外部認證 |
|
GET CHALLENGE |
00 |
84 |
取隨機數 |
|
INTERNAL AUTHENTICATE |
00 |
88 |
內部認證 |
|
PIN UNBLOCK |
84 |
24 |
個人密碼解鎖 |
|
READ BINARY |
00 |
B0 |
讀二進制文件內容 |
|
READ RECORD |
00 |
B2 |
讀記錄文件指定內容 |
|
SELECT |
00 |
A4 |
選擇文件 |
|
UPDATE BINARY |
00/04 |
D6 |
寫二進制文件 |
|
UPDATE RECORD |
00/04 |
DC |
寫記錄文件 |
|
VERIFY |
00 |
20 |
驗證口令 |
編號 |
指令 |
指令類別 |
指令碼 |
功能描述 |
|
CHANGE/PIN RELOAD |
80 |
5E |
重裝/修改個人密碼 |
|
CREDIT FOR LOAD |
80 |
52 |
圈存 |
|
DEBIT FOR PURCHASE/ CASE WITHDRAW/UNLOAD |
80 |
54 |
消費/取現/圈提 |
|
GET BALANCE |
80 |
5C |
讀餘額 |
|
GET TRANSCATION PROVE |
80 |
5A |
取交易認證 |
|
INITIALIZE FOR XXX |
80 |
50 |
初始化XXX交易 |
|
UNBLOCK |
80 |
2C |
解鎖被鎖住的口令 |
|
UPDATE OVERDRAW LIMIT |
80 |
58 |
修改透支限額 |