Modem相关知识__2019.12.03
原文鏈接:https://www.cnblogs.com/mobile-veterans/archive/2012/07/23/2600726.html
手機啟動流程中Modem啟動流程部分主要是通過AT命令集與Modem交互來實現對Modem及相關通訊服務的初始化,
其中為大家熟知的PIN碼校驗信息初始化、運營商網絡初始化、聯系人信息初始化、STK初始化等部分都包含其中。
原文鏈接:https://www.bbsmax.com/A/QV5Zjq75yb/
SIMLock鎖卡功能解析
一、鎖卡背景介紹
鎖卡即SIMLock,當手機開機啟動或者插入SIM卡時,手機modem側預置在NV項中的配置信息會與SIM卡中的信息做比對,檢測是否匹配。若匹配,則SIM卡可以正常使用。若不匹配,則SIM卡相關功能均無法正常使用,例如撥打電話、發送短信及上網等;或者是只能注冊2G網,不能注冊4G。
鎖卡的目的:一些運營商會要求控制某一類卡的使用,從而保護自己的利益(運營商定制機)
SIMLock鎖和圖案鎖,數字密碼鎖,PIN碼鎖,PUK鎖一樣,是Keyguard模塊中的一種鎖。
二、鎖卡的需求
鎖卡的需求方式有7種之多,常見的有NP鎖,NS鎖,CP鎖,SP鎖等
從安卓機器來看,目前最常用的是SP鎖(MCC/MNC),本文將解析SP鎖的加鎖流程
?
1、SIM卡熱插拔壓力測試,多次熱拔插,某次插入,不識別SIM卡;
2、不識別卡后,接著拔出卡再插入,可以再次識別。
?
MDlog看到的現象如下:
08:17:10:852最后一次拔出,sim task收到MSG_ID_SIM_PLUG_OUT_IND,接著08:17:12:412有觸發insert SIM中斷(拔插間隔不足兩秒),但是sim task沒有收到MSG_ID_SIM_PLUG_IND_IND msg,忽略了此次插入動作的處理。
?
[SOLUTION]
這種現象為SIM熱拔插太快,需要如下復測:
1、加大SIM EINT debounce time為100;
2、保持熱拔插間隔標準:拔卡后,請至少等待2S,讓SIM安全下電,sim state更新過來再插卡;插卡后,請至少等待1S,讓AP RILD ready再進行拔卡動作。若拔插太快,sim state出現混亂,就無法正確處理SIM熱拔插動作,就會出現某次插入無法識別SIM的問題。
3、復現問題后,請再次拔卡,再插卡,若能再次識別到卡,就說明是拔插太快導致的不識別卡問題。是測試手法的問題,非熱插拔功能出現問題,需要按照熱拔插間隔標準復測。
https://www.jianshu.com/p/809c721f5594
AT指令
SIM卡檢卡硬件電路設計:https://blog.csdn.net/luohuatingyusheng/article/details/96473340
原文鏈接:https://blog.csdn.net/qq734122899/article/details/53927913
getSimSerialNumber():獲取SIM卡號
getSimOperator():獲取供貨商代碼
getSimOperatorName():獲取供貨商
getSimCountryIso():獲取國籍
getNetworkOperator():獲取網絡運營商
getNetworkOperatorName():獲取網絡運營商名稱
getNetworkType():獲取網絡類型
原文鏈接:https://blog.csdn.net/wcsbhwy/article/details/89956736
Android中有三種PhoneFactory
1.PhoneFactory.java ——–>用于創建GsmCdmaPhone對象
2.ImsPhoneFactory.java ——–>用于創建ImsPhone對象
3.SipPhoneFactory.java ——–>用于創建SipPhone對象
原文鏈接:https://blog.csdn.net/weixin_33757911/article/details/92342619
一、modem插卡流程
1.Driver檢查到SIM卡插入以后,在sim_plug_in_call_back()中會發MSG_ID_SIM_PLUG_IN_IND給MOD_SIM;MOD_SIM在sim_task()中處理這個消息,并發送MSG_ID_SIM_ERROR_IND給L4C以及MM,消息中帶的cause是SIM_PLUG_IN。
2.隨后就是和正常的SIM卡初始化過程一樣,檢查PIN碼,讀取SIM卡的各種文件,然后發送消息MSG_ID_SIM_MM_READY_IND給MM,告訴MM模塊SIM卡已經ready了,并提供一些網絡注冊的信息,然后發送MSG_ID_SIM_MMRR_READY_IND給MOD_SMU,讓SMU通知L4C去搜索normal cell,最后發送MSG_ID_SIM_MMI_READY_IND給MOD_SMU,表示SIM卡初始化完成。
轉載于:https://my.oschina.net/u/2829875/blog/851833
原文鏈接:https://blog.csdn.net/zhenwenxian/article/details/7918273
modem和AP之間數據傳遞
modem和AP之間數據傳遞可以通過HSIC接口傳遞數據,也可以通過共享內存的方式傳遞數據。modem和AP之間協商,定義share memory的區域和要共享的條目item,分配一塊內存區域作為兩個模塊之間共享數據。發起端將要傳遞的數據放到共享內存的對應位置的單元。接收端讀對應的單元的共享內存的數值。
原文鏈接:https://blog.csdn.net/yaoming168/article/details/89559166
VoLTE是基于IMS的語音業務,它是一種IP數據,就是我們熟知的高清語音通話。
原文鏈接:https://blog.csdn.net/dailinqing1984/article/details/45722535
AP與modem直接通信由Share Memory負責,這是一塊兩端可以同時操作的內存區域。由于Modem占主導作用,在Application Processor啟動初始化時,從Share Memory區讀取已經由Modem predeclared的一些數據。
Share memory根據功能,分為靜態+動態部分,每個部分又分為數個小區,每個區的大小不一,與本區實現的功能相關。Modem會把所有區的offset+size信息存放在靜態去Heapinfo里。Linux通過讀取這個Heapinfo區信息,就知道Share memory的布局了。
簡單的說,Linux平臺高通驅動主要在如下幾個部分應用share memory服務:
1) Process command.
用來傳輸少量數據。實現兩邊的通信。比如不同驅動模塊上下電,電壓配置等。share memory最開始位置就是PROC區。
2)SMSM
實現兩邊的machine state同步。電源管理部分會用到。
3)RPC/DIAG
RPC是AP和Modem之間通信最常用的通道,有很完整的封裝協議,Linux根據兩個參數(proc+version)以client的身份可以找到Modem段的server,請求提供相應服務,同時有完備的request/reply機制,完成數據傳輸。同理,AP也可以作為server提供給Modem服務。
share memory有個channel allocation table,里面存放這64個channel的通道信息。每個通道可以實現數據傳輸。共享內存驅動(smd)初始化過程中,會建立64個通道的維護。RPC就是基于其中之一的channel.
Share memory兩邊都有線程在監控,一旦有數據更新,立刻通知監聽的模塊。當然,有些模塊中斷驅動,在中斷上下文里完成通知。
原文鏈接:https://blog.csdn.net/Sun19910114/article/details/38683677
終端 MODEM
步驟1 | DTR--> |
步驟2 | TXD--> |
步驟3 | <--DSR |
步驟4 | <--DCD |
步驟5 | <--CTS |
步驟6 | <--RXD |
1、由終端送DTR 信號到MODEM,DTR 信號由RS232 的DTR 腳送出,告訴MODEM 終端已準備好;
2、終端送TXD 信號到MODEM,終端經RS232 的TXD 送出一個一直保持在邏輯1 的信號給MODEM,它并
不是數據,而是一個握手信號,這個信號告訴MODEM,終端要和對方通信。如果MODEM 已準備好,則MODEM
將通過RS232 的RXD 信號線保持邏輯1 告訴終端MODEM 已準備好,可以利用MODEM 進行撥號了。這時終端
和MODEM 之間沒有任何數據在傳;
3、由MODEM 送DSR 到終端,當撥號完成后,MODEM 發出一個DSR 信號給終端,表示MODEM 已與MODEM
遠端的MODEM 作好連接的準備,也就是說MODEM 正在等待遠端MODEM 傳達室回的信息;
4、MODEM 送到DCD 到終端,當MODEM 和遠端的MODEM 完成握手后,MODEM 傳回DCD 信號給終端,表示
MODEM 已建立了連接;
5、MODEM 送CTS 到終端,上述過程完成后,終端仍然不能接收和送數據,必須等到MODEM 送出CTS 信
號,表示一切準備就緒;
6、MODEM 傳送數據給終端,終端開始接收或發送數據。
*:通訊過程中通過RTS/CTS 進行硬件流控,通過XON/XOFF 進行軟件流控。
原文鏈接:https://blog.csdn.net/sinat_30474567/article/details/51524310
public?String?readSIMCard()?{
????????????TelephonyManager?tm?=?(TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);//取得相關系統服務
????????StringBuffer?sb?=?new?StringBuffer();
????????switch(tm.getSimState()){?//getSimState()取得sim的狀態??有下面6中狀態
????????????????case?TelephonyManager.SIM_STATE_ABSENT?:sb.append("無卡");break;?
????????????????case?TelephonyManager.SIM_STATE_UNKNOWN?:sb.append("未知狀態");break;
????????????????case?TelephonyManager.SIM_STATE_NETWORK_LOCKED?:sb.append("需要NetworkPIN解鎖");break;
????????????????case?TelephonyManager.SIM_STATE_PIN_REQUIRED?:sb.append("需要PIN解鎖");break;
????????????????case?TelephonyManager.SIM_STATE_PUK_REQUIRED?:sb.append("需要PUK解鎖");break;
????????????????case?TelephonyManager.SIM_STATE_READY?:sb.append("良好");break;
????????}
?????????
????????if(tm.getSimSerialNumber()!=null){
????????????????sb.append("@"?+?tm.getSimSerialNumber().toString());
????????}else{
????????????????sb.append("@無法取得SIM卡號");
????????}
?????????
????????if(tm.getSimOperator().equals("")){
????????????????sb.append("@無法取得供貨商代碼");
????????}else{
????????????????sb.append("@"?+?tm.getSimOperator().toString());
????????}
?????????
????????if(tm.getSimOperatorName().equals("")){
????????????????sb.append("@無法取得供貨商");
????????}else{
????????????????sb.append("@"?+?tm.getSimOperatorName().toString());
????????}
?????????
????????if(tm.getSimCountryIso().equals("")){
????????????????sb.append("@無法取得國籍");
????????}else{
????????????????sb.append("@"?+?tm.getSimCountryIso().toString());
????????}
?????????
????????if?(tm.getNetworkOperator().equals(""))?{
????????????????sb.append("@無法取得網絡運營商");
????????}?else?{
????????????????sb.append("@"?+?tm.getNetworkOperator());
????????}
????????if?(tm.getNetworkOperatorName().equals(""))?{
????????????????sb.append("@無法取得網絡運營商名稱");
????????}?else?{
????????????????sb.append("@"?+?tm.getNetworkOperatorName());
????????}
????????if?(tm.getNetworkType()?==?0)?{
????????????????sb.append("@無法取得網絡類型");
????????}?else?{
????????????????sb.append("@"?+?tm.getNetworkType());
????????}
????????return?sb.toString();
????}
1、大多數的手機都含有兩個處理器。操作系統、用戶界面和應用程序都在Application Processor(即AP)(應用處理器)上執行,AP一般采用ARM芯片的CPU。運行在Application Processor(AP)的軟件包稱為AP包,包括操作系統、用戶界面和應用程序等;
2、手機射頻通訊控制軟件,則運行在另一個分開的CPU上,這個CPU稱為Baseband Processor(即BP)(基帶處理器)。與Baseband Processor(BP)相關的軟件包稱為BP包, 包括baseband modem的通信控制軟件等.
3、NV文件記錄一些手機相關的一些信息,如meid等。一般情況下,nv項與通信功能比較密切,例如nv項中會標記手機允許注冊的網絡,當前注冊的網絡等。比方說你手機里nv標記著是聯通3G網絡,而你插入移動卡的時候,就會出現找不到網絡新號的問題。當然一般nv項會隨著手機卡的插入重新寫入,nv項破壞之后會導致手機出現好多問題。
總結
以上是生活随笔為你收集整理的Modem相关知识__2019.12.03的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 7 分钟内黑掉 40 家网站?
- 下一篇: 百度运营笔试题