三網(wǎng)合一SIM卡(分身卡),是指一張SIM卡同時支持移動、電信、聯(lián)通三大運營商網(wǎng)絡(luò),無需擔憂網(wǎng)絡(luò)信號差,即可實現(xiàn)三大運營商全網(wǎng)覆蓋。
三網(wǎng)合一SIM卡,通常有2種封裝形式:
1. QFN8 5x6封裝(MFF2)。主要應(yīng)用于物聯(lián)網(wǎng)設(shè)備,需要二次貼片生產(chǎn)。
2. Nano SIM封裝。即可應(yīng)用于物聯(lián)網(wǎng),也可用在手機上,作為普通SIM卡使用。不需要考慮二次貼片,但需要考慮成品厚度。
三網(wǎng)合一卡內(nèi)部器件由3個運營商的貼片卡和1個主控MCU芯片組成。
運營商的貼片卡,是移動、聯(lián)通、電信三大運營商發(fā)行的貼片卡,也是SIM卡,外觀為QFN 2x2封裝,有資費,可以正常打電話和上網(wǎng)。
主控MCU芯片,起橋梁的作用。ME并不直接與卡片通信,而是與主控MCU芯片通信,由主控MCU將ME的指令,轉(zhuǎn)發(fā)給所選擇的卡片,并將返回數(shù)據(jù)返回給ME。
每一個時間點,只會有1張SIM卡與MCU通信。三網(wǎng)合一卡的主控MCU內(nèi)部有Flash,存儲了當前使用的是哪一張,當ME讀取ICCID、IMSI時,MCU會把這些指令,發(fā)送給對應(yīng)的SIM卡,并將SIM卡的ICCID、IMSI轉(zhuǎn)發(fā)給ME。ME會把這些數(shù)據(jù),發(fā)送給網(wǎng)絡(luò),由網(wǎng)絡(luò)發(fā)起對該SIM卡的入網(wǎng)鑒權(quán)。ICCID、IMSI、鑒權(quán)數(shù)據(jù)的響應(yīng)等,都是來自運營商的卡片,只是通過了主控MCU的轉(zhuǎn)發(fā)而已。
MCU另外還會建立自己的STK菜單,通過STK菜單,用戶可以手動切換當前使用的SIM卡;MCU也可以對ME發(fā)起主動式命令(Proactive command),查詢當前網(wǎng)絡(luò)的信號強度,如果信號強度,低于某一數(shù)值,則切換成下一張SIM卡;也可由平臺側(cè),發(fā)起AT指令,進行SIM卡的切換操作。切換SIM卡后,MCU會重新存儲當前的SIM卡編號,并要求ME對卡片重新復位(Proactive command實現(xiàn),不需要插拔卡),完成重新入網(wǎng)的操作。
MCU一方面充當橋接芯片的作用,把需要入網(wǎng)操作相關(guān)的APDU命令,轉(zhuǎn)發(fā)給SIM卡;另一方面,充當管理SIM卡的作用,決定是否需要進行切換SIM卡操作。
首先,主控MCU芯片本身得是SIM卡芯片。SIM卡芯片都具有硬件的ISO7816接口,可以根據(jù)外部CLK的頻率不同,采用不同的速率通信。與UART不同的是,ISO7816需要外部時鐘,外部時鐘頻率范圍1 ~ 5M。初始通信時(ATR階段),372個CLK為一個ETU,然后可由ME發(fā)送PPS,改變速率,如TA1 = 0x96時,16個CLK為一個ETU。如果主控MCU沒有硬件的ISO7816接口,就需要軟件模擬7816通信,軟件模擬的通信會不穩(wěn)定,因為外部時鐘是變化的(1 ~ 5M),不同的ME提供的時鐘可能不同。
其次,主控MCU芯片,需要有多個GPIO,用于與運營商卡片通信。主控MCU除了自身作為SIM卡外,還需要操作3家運營的卡,并與之通信。
再則,主控芯片面積需要足夠小,外圍器件足夠少。如果MCU面積太大,或者外圍器件過多,要將主控MCU與3家運營商的貼片卡,合封成一個芯片,將很難實現(xiàn)。
中巨偉業(yè)的SK32G101智能卡芯片,具有220K的Flash、5K的RAM、硬件7816接口及4個GPIO等,中巨偉業(yè)提供了完整的三合一卡源代碼和SDK開發(fā)包,已經(jīng)把與ME、SIM卡通信的底層代碼寫好,開發(fā)者直接調(diào)用就可以。SK32G101與SIM卡通信,最高支持FIDI=0x95,與ME通信,最高支持FIDI=0x97。
切換SIM卡,按照切換方式分,可分為手動切換和自動切換:
1. 手動切換 可以通過STK菜單,進行人工選擇,手動切換。
2. 自動切換 通過APDU指令、AT指令、Proactive Command等,實現(xiàn)SIM卡切換。
切換SIM卡,按照切換發(fā)的起者,分為平臺側(cè)觸發(fā)切換和MCU側(cè)觸發(fā)切換。當SIM卡切換完成,需要由MCU發(fā)送REFRESH命令給ME,要求ME對SIM卡重新復位入網(wǎng)。
發(fā)送REFRESH過程:
SEND:80F2000C00 ;Status
ASSERT:910B
SEND:801200000B
ASSERT: D009 8103010104 82028182
1. 平臺側(cè)觸發(fā)切換
優(yōu)點:平臺側(cè)獲取網(wǎng)絡(luò)信號非常容易,并且穩(wěn)定可靠,不會有ME兼容性問題。
缺點:通信模組需要改動,定制。
(1)客戶通過AT指令將APDU切換指令發(fā)給卡片。指令格式如下
|
CLA |
INS |
P1 |
P2 |
Length |
|
00 |
54 |
XX |
00 |
00 |
l 01:切換為聯(lián)通
l 02:切換為移動
l 03:切換為電信
l 80:關(guān)閉卡片自身切換功能。只處理平臺側(cè)發(fā)出的切換指令。
l 81:開啟卡片自身切換功能。
(2)客戶通過AT+CLCK="SC",1,"XXXX"指令發(fā)送其他控制指令,進行相關(guān)操作。“XXXX”是控制指令。對于卡端來說,該AT指令就是卡片的Enable PIN指令。0028000108指令,后面4位相當于PIN值內(nèi)容。所以需要針對如下特定PIN值做相關(guān)操作
l 0100:切換為聯(lián)通
l 0200:切換為移動
l 0300:切換為電信
l 8000:關(guān)閉卡片自身切換功能。只處理平臺側(cè)發(fā)出的切換指令。
l 8100:開啟卡片自身切換功能。
(3)客戶通過AT+CSCA="xxxx",145"xxxx"指令發(fā)送其他控制指令,進行相關(guān)操作?!?/span>XXXX”是控制指令。對于卡端來說,該AT指令就是卡片的更新短信中心號指令。指令流程為:
SEND:00A4080404 7FFF6F42
ASSERT:61XX
SEND:00DC010428FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0491XXXXFFFFFFFFFFFFFFFFFFFFFF
指令中XXXX字段需要兩兩反轉(zhuǎn)寫入,即用戶采用0100設(shè)置,指令中的內(nèi)容為1000。例子如下:
00DC010428FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF04911000FFFFFFFFFFFFFFFFFFFFFF。
l 0100:切換為聯(lián)通
l 0200:切換為移動
l 0300:切換為電信
l 8000:關(guān)閉卡片自身切換功能。只處理平臺側(cè)發(fā)出的切換指令。
l 8100:開啟卡片自身切換功能。
2. MCU側(cè)觸發(fā)切換
優(yōu)點:通信模組無需改動
缺點:ME種類繁多,并非所有的ME都能很好的支持Proactive command
(1)卡片6F7E(LOCI)文件最后一個位置更新狀態(tài)字節(jié)內(nèi)容進行判斷
SEND:00A4080404 7FFF6F7E
ASSERT:61XX
SEND:00D600000B FFFFFFFFFFFFFFFFFFFFXX
指令中“XX”為位置更新狀態(tài)?!?/span>XX”的b3b2b1位,定義為:
000:Updated
001:not Updated
010:PLMN not allowed
011:Location Area not allowed
當“XX”的b3b2b1位,不為“000”和“001”時,就可以由MCU發(fā)起SIM卡切換
(2)MCU用 “RUN AT COMMAND”向ME發(fā)送AT命令:AT+CSQ,獲取網(wǎng)絡(luò)信號強度,如果網(wǎng)絡(luò)信號強度低于預(yù)設(shè)值,就可以由MCU發(fā)起切換。
SEND:80F2000C00 ;Status
ASSERT:9118
SEND:8012000018
ASSERT: D016 8103013400 82028182 050353544B 280641542B435351
SEND:801400002381030134000202828103010029150D0A2B4353513A2032352C39390D0A0D0A4F4B0D0A
ASSERT:9000
ME回應(yīng):+CSQ:<rssi>,<ber>。若信號rssi低于20,就由MCU發(fā)起SIM卡切換。
(3)MCU用 “SET UP EVENT LIST” 命令,要求ME監(jiān)控“位置狀態(tài)事件”,當位置狀態(tài)發(fā)生變化,ME就會通知SIM卡。位置狀態(tài)信息中含有網(wǎng)絡(luò)信息,當無網(wǎng)絡(luò)時,就可由MCU發(fā)起SIM卡切換。
(4)MCU用 “PROVIDE LOCAL INFORMATION” 命令,請求 ME 給 SIM 卡發(fā)當前本地信息,獲取“網(wǎng)絡(luò)測量結(jié)果”。若測量值低于預(yù)設(shè)值,則由MCU發(fā)起SIM卡切換。
平臺側(cè)
在實際開發(fā)過程中,一般會用工具(邏輯分析儀、7816協(xié)議監(jiān)聽設(shè)備等)監(jiān)聽ME和MCU之間的通信。另外,為了模擬無信號環(huán)境,通常會把ME放入屏蔽箱中。然而在監(jiān)聽的同時,卻很難屏蔽手機信號(監(jiān)聽設(shè)備會起天線作用,導致信號無法屏蔽)。那么可以在MCU內(nèi)部的Flash,存儲APDU日志,替代工具監(jiān)聽。存儲的APDU日志,可通過專用指令,由讀卡器讀出。
STK(SIM卡應(yīng)用工具箱),是在原SIM卡被動式的操作系統(tǒng)上,衍生出的SIM卡主動交互式的操作系統(tǒng)。它提供的機制,允許SIM卡中的應(yīng)用與支持該應(yīng)用的ME進行交互操作,即支持SIM卡與ME之間的主動式對話,從而使移動用戶擁有個人化附加業(yè)務(wù)。
從 ME 到 SIM 卡的通信使用 T=0 的協(xié)議。該協(xié)議中,ME 總是向 SIM 卡發(fā)起命令,沒有 SIM 卡發(fā)起與 ME 通信的機制。這就限制了 SIM 卡引入請求 ME 支持 SIM 卡新特性的可能,ME 可以事先知道 SIM 卡應(yīng)該采取什么動作。主動式 SIM 卡命令采用 T=0 協(xié)議,但增加了一個新的狀態(tài)響應(yīng)字 SW1。這個狀態(tài)響應(yīng)和正常結(jié)束(’90 00’)的意思相同,而且可以和大多數(shù)允許正常結(jié)束的命令一起使用,同時也允許 SIM 卡向 ME 發(fā)出信息發(fā)送的提示,ME使用 FETCH 功能查出是什么信息。
主動式SIM卡通過在SIM卡業(yè)務(wù)表中激活主動式SIM卡業(yè)務(wù)進行標識。在SIM卡初始化期間, ME發(fā)出TERMINAL PROFILE命令用于標識支持主動式SIM卡。然后ME根據(jù)輪詢間隔命令確定的時間間隔,向SIM卡發(fā)送STATUS命令。
STK相關(guān)的4條命令:
1. TERMINAL PROFILE,告知SIM卡手機對STK的支持能力。初始化SIM卡的過程中發(fā)給SIM卡。
|
COMMAND |
CLA |
INS |
P1 |
P2 |
Length |
|
TERMINAL PROFILE |
A0 |
10 |
00 |
00 |
lgth |
2. ENVELOPE,手機發(fā)送數(shù)據(jù)或者事件給SIM卡。
|
COMMAND |
CLA |
INS |
P1 |
P2 |
Length |
|
ENVELOPE |
A0 |
C2 |
00 |
00 |
lgth |
3. FETCH, 手機從SIM卡獲取命令
|
COMMAND |
CLA |
INS |
P1 |
P2 |
Length |
|
FETCH |
A0 |
12 |
00 |
00 |
lgth |
SIM 卡可以發(fā)送一系列主動式 SIM 卡命令,命令如下:
— CLOSE CHANNEL,請求ME關(guān)閉專用數(shù)據(jù)通道。
— DISPLAY TEXT,在顯示屏上顯示文本或圖標。
— GET CHANNEL STATUS,請求ME返回所有可用數(shù)據(jù)通道的當前狀態(tài)。
— GET INKEY,向屏幕發(fā)送文本或圖標,要求返回單個字符響應(yīng)。
— GET INPUT,向屏幕發(fā)送文本或圖標,要求返回一個響應(yīng)。
— GET READER STATUS,提供附加讀卡器和已插入的附加卡信息。
— LANGUAGE NOTIFICATION,通知ME目前在SIM卡應(yīng)用工具箱中文本所使用的語言。
— LAUNCH BROWSER,要求ME的瀏覽器能解釋與URL相關(guān)的內(nèi)容。
— MORE TIME,不要求ME有任何操作,命令的目的是申請更多的處理時間。
— OPEN CHANNEL, 請求ME啟用命令參數(shù)所設(shè)定的數(shù)據(jù)通道。
— PERFORM CARD APDU,請求ME向附加卡發(fā)送一APDU命令。
— PLAY TONE,請求ME通過耳機、聽筒或其他揚聲器發(fā)出聲音。
— POLL INTERVAL,協(xié)商在空閑模式期間ME向SIM卡發(fā)送STATUS命令的頻率。
— POWER OFF CARD,用于結(jié)束與附加卡之間的會話過程。
— POWER ON CARD,用于啟動與附加卡之間的會話過程,并且返回所有的ATR字節(jié)。
— PROVIDE LOCAL INFORMATION,請求ME將本地信息傳遞給SIM卡,例如(MCC+MNC)。
— RECEIVE DATA, 請求ME返回給SIM卡專用數(shù)據(jù)通道的接收數(shù)據(jù)。
— REFRESH,請求ME執(zhí)行SIM卡的初始化過程,命令可使ME復位SIM。
— RUN AT COMMAND,向ME發(fā)送一AT命令,并且返回給SIM卡此AT命令的響應(yīng)。
— SELECT ITEM,SIM卡提供一套菜單項目列表供用戶選擇。
— SEND DATA, 請求ME在專用數(shù)據(jù)通道上發(fā)送SIM卡提供的數(shù)據(jù)。
— SEND DTMF,在呼叫建立時請求ME發(fā)出DTMF(雙音多頻)聲音。
— SEND SHORT MESSAGE,向網(wǎng)絡(luò)發(fā)送短消息或SMS-COMMAND。
— SEND SS,向網(wǎng)絡(luò)發(fā)送SS請求。
— SEND USSD,向網(wǎng)絡(luò)發(fā)送USSD字符串。
— SET UP CALL,建立呼叫。
— SET UP EVENT LIST,SIM卡為ME提供一事件列表。
— SET UP IDLE MODE TEXT,為ME提供一字符串用作空閑模式文本。
— SET UP MENU,SIM卡提供一套菜單添加到ME原有的菜單結(jié)構(gòu)中。
— TIMER MANAGEMENT,要求ME管理一定時器(啟動,停止,取當前值)。
4. TERMINAL RESPONSE: 手機返回SIM卡執(zhí)行主動式命令的結(jié)果
|
COMMAND |
CLA |
INS |
P1 |
P2 |
Length |
|
TERMINAL RESPONSE |
A0 |
14 |
00 |
00 |
lgth |
SIM卡可以發(fā)起主動式命令,獲取網(wǎng)絡(luò)信號相關(guān)信息,詳細資料,請參閱GSM11.14規(guī)范。
1. PROVIDE LOCAL INFORMATION,請求ME將本地信息傳遞給SIM卡
此命令請求 ME 給 SIM 卡發(fā)當前本地信息。目前這些信息限于:
— 位置信息(移動國家代碼、移動網(wǎng)絡(luò)代碼、位置區(qū)代碼、當前服務(wù)小區(qū)的 ID 號);
— ME 的 IMEI;
— 網(wǎng)絡(luò)測量結(jié)果和 BCCH 信道列表;
— 當前日期、時間和時區(qū);
— 當前 ME 語言設(shè)置;
— Timing Advance。
2. RUN AT COMMAND,向ME發(fā)送一AT命令,并且返回給SIM卡此AT命令的響應(yīng)。
SIM使用此命令向ME發(fā)送AT命令,就像是由連接的TE發(fā)起的一樣。然后ME應(yīng)在終端響應(yīng)中向SIM返回AT響應(yīng)。
AT指令:AT+CSQ
響應(yīng):+CSQ: <rssi>,<ber>
查詢網(wǎng)絡(luò)信號強度,<rssi>:信號強度
3. SET UP EVENT LIST,此命令提供一套事件集,此事件集是 ME 應(yīng)當監(jiān)視的當前事件列表。
事件列表:
00:MT呼叫;
01:已連接呼叫;
02:呼叫拆線;
03:位置狀態(tài);
04:用戶動作;
05:空閑屏幕可用;
06:讀卡器狀態(tài);
07:語言選擇;
08:瀏覽器終止;
09:數(shù)據(jù)可用;
0A:數(shù)據(jù)通道狀態(tài)
ME的種類繁多,各家ME所支持STK/CAT功能各不相同,有一些ME即使是在TERMINAL PROFILE中表明支持的功能,在實際測試時,也不一定有。以下簡單羅列幾種ME的TERMINAL PROFILE。
1. iPhone
FFFFFFFF7F9D00DF BF00001F E2000000C3F0000700016800510100000008028007700603
2. VIVO 5G
FFFFFFFF7F9F00FF FF03021F E2000000C3FB0007041178007101000000380280877C0603
3. 華為暢享
FFFFFFFF7F9F00DF FF00001F E2081106C3C0000000004000510000000018
4. 移遠CAT1模組
3301E8C2110C0007 9C00001F 226000000300000000000000000000000000000000
5. 大夏龍雀CAT1模組
3F01EDE2119C0007 8400001F 4060000043C00000000040
TERMINAL PROFILE中,可用于獲取網(wǎng)絡(luò)信號的相關(guān)字節(jié)及編碼:
|
BIT8 |
BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
第四字節(jié)(主動式 SIM 卡命令):
BIT8 —— 主動式 SIM 卡命令:提供本地信息(NMR)
BIT7 —— 主動式 SIM 卡命令:提供本地信息(MCC,MNC,LAC,Cell ID,IMEI)
BIT6 —— 主動式 SIM 卡命令:SET UP MENU
BIT5 —— 主動式 SIM 卡命令:SET UP CALL
BIT4 —— 主動式 SIM 卡命令:SEND USSD
BIT3 —— 主動式 SIM 卡命令:SEND SS
BIT2 —— 主動式 SIM 卡命令:SEND SHORT MESSAGE
BIT1 —— 主動式 SIM 卡命令:SELECT ITEM
第五字節(jié)(事件驅(qū)動信息):
BIT8 —— 事件:讀卡器狀態(tài)
BIT7 —— 事件:空閑屏幕可用
BIT6 —— 事件:用戶活動
BIT5 —— 事件:位置狀態(tài)
BIT4 —— 事件:呼叫拆線
BIT3 —— 事件:呼叫接線
BIT2 —— 事件:MT 呼叫
BIT1 —— 主動式 SIM 卡命令:SET UP EVENT LIST
第八字節(jié)(主動式 SIM 卡命令):
BIT8 —— 第 2 個性能配置參數(shù)
BIT7 —— SET UP CALL 命令中第 2 個α標識符
BIT6 —— 執(zhí)行 AT 命令
BIT5 —— 建立空閑模式文本
BIT4 —— GET INKEY 命令的二進制選項
BIT3 —— 主動式SIM卡命令:PROVIDE LOCAL INFORMATION(日期,時間和時區(qū))
BIT2 —— 主動式 SIM 卡命令:TIMER MANAGEMENT(取當前值)
BIT1 —— 主動式 SIM 卡命令:TIMER MANAGEMENT(啟動,停止)
第九字節(jié):
BIT8 —— RFU,bit=0
BIT7 —— 主動式 SIM 卡命令:LAUNCH BROWSER
BIT6 —— 主動式 SIM 卡命令:LANGUAGE NOTIFICATION
BIT5 —— 主動式 SIM卡命令:PROVIDE LOCAL INFORMATION (Timing Advance)
BIT4 —— 主動式 SIM 卡命令:PROVIDE LOCAL INFORMATION (語言)
BIT3 —— 主動式 SIM卡命令:PROVIDE LOCAL INFORMATION (BCCH 信道列表編碼)
BIT2 —— 發(fā)送DTMF命令
BIT1 —— 持續(xù)執(zhí)行 DISPLAY TEXT 命令
QFN8 5x6封裝(MFF2),因為需要二次貼片生產(chǎn),所以在合封芯片時,可以選擇高溫錫膏。在二次貼片時,高溫錫膏不容易被融化,就不容易導致合封芯片鼓包及內(nèi)部虛焊。另外,QFN8三合一卡,可能會放入測試座中,寫入數(shù)據(jù),所以在切割時,5x6的尺寸,可以稍微的縮小一點,這樣會更容易放入測試座中。
Nano SIM封裝(MP2),不需要考慮二次貼片生產(chǎn),但需要考慮成品厚度。Nano SIM厚度一般控制在0.7mm以內(nèi),否則很難塞進手機中。在PCB板設(shè)計時,盡量選用2層PCB板,PCB板厚度不超過0.2mm。在整體打磨時,不能磨到芯片內(nèi)部的綁線。
相關(guān)案例