原文链接: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相关推荐

  1. 【PIC单片机】-- IIC相关知识

    文章目录 文章目录 00 写在前面 01 IIC相关知识 02 时序 03 寄存器 04 外设模块EEPROM 05 结尾 00 写在前面 该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟 ...

  2. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  3. 网络打印两个基本端口(LPD和9100)的相关知识

    打印设备和主机的连接方式(printer interface)形态多样,从历史悠久的串口并口到现在流行的网络打印和USB连接,另类的红外连接和蓝牙技术,还有超炫的火线连接(IEEE 1394). 我这 ...

  4. Redis数据库相关知识总结

    Redis数据库相关知识总结 1.NoSQL概述 1.1 为什么用NoSQL 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般不大,用单个数据库完全可以轻松应付! 在那个时候,更多的都是 ...

  5. 51单片机最小系统的相关知识

    51单片机最小系统的相关知识 单片机最小系统,或者称为 最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机.晶振电路.复位电路.下面给出一个5 ...

  6. Linux相关知识的第十一回合

    Linux相关知识的第十一回合 显示统计占用系统内存最多的进程,并排序 [hooper@magedu-demo ~] $ ps aux --sort=-%mem |head -6 USER PID % ...

  7. 转载:关于错排的相关知识

    转载:关于错排的相关知识 杭电2048相关知识充电 转自:错排公式 分类: 数论 关于程序2012-06-08 19:07 335人阅读 评论(0) 收藏 举报 n2 错排问题 错排问题 就是一种递推 ...

  8. 主板是计算机所有部分连接的基础,计算机基础相关知识答案.doc

    计算机基础相关知识答案 计算机基础相关知识 一.填空题: 1.计算机的硬件主要由(控制器).(运算器).(存储器).(输入输出设备)以及电源等硬件组成. 2.计算机硬件系统可以分为两大部分,即(主机 ...

  9. Redis面试题相关知识整理

    Redis面试题相关知识整理 1.Redis的应用场景 2.Redis的特点 3.Redis对各种数据类型的操作 4.Redis的持久化机制 5.Redis的缓存穿透/缓存击穿/缓存雪崩问题 6.Re ...

  10. 单片机小白学步系列(十) 单片机程序下载相关知识

    注:本篇在写<单片机入门指南系列>之前就已经写过,现在发现这篇比较合理的位置,应该是放在<单片机入门指南系列(六) 单片机最小系统--麻雀虽小,五脏俱全>之后的,但是由于之前考 ...

最新文章

  1. apache下IE6对js的bug处理
  2. 前端跨域请求get_前端实现跨域访问
  3. 自动推荐图表、智能分析,这个新出的分析工具有点酷!
  4. android 调用系统方法,android 调用系统功窗口方法
  5. Hadoop1.2.0开发笔记(九)
  6. 老男孩python全栈s21day21作业(面向对象)
  7. 天狼星网络验证源码/官方正版/内附搭建教程
  8. Spring Security系列(一)——登录认证基本配置
  9. 2、sudo时候出现no valid sudoers sources found, quitting
  10. python多态_python多态和规范
  11. QR法求解特征值特征向量
  12. linux nand 驱动,Linux NAND FLASH驱动分析(一)
  13. arcgis快速生成图框_arcgis制作图框及专题地图制作
  14. html颜色趋势,预测2015年网页设计配色趋势(4)
  15. 持续交付的发展与持续交付中的测试
  16. 游戏AI车辆(Auto Mobile City)项目开发日志(2021.10.18)
  17. clock latency 总结
  18. JAVA毕设项目实验室耗材管理系统(java+VUE+Mybatis+Maven+Mysql)
  19. android之IM即时通信原理
  20. STM32CubeMX生成工程顺序

热门文章

  1. 搜狗站长html标签验证,悦然建站分享:搜狗站长平台使用教程之添加网站
  2. 内向的人和陌生人聊天,如何做到有话可说
  3. 格子玻尔兹曼机(Lattice Boltzmann Method)系列5:LBM多相流实例之Shan-Chen模型
  4. html添加鼠标右键菜单,Fabric.js - 添加鼠标右键点击事件响应(附:右键菜单)...
  5. 计算机日期的格式怎么写,在excel表格中怎么把日期格式改成文本格式(excle表格中改变日期格式)...
  6. 组策略怎么禁用计算机管理,如何打开管理员禁用的组策略?
  7. after meet KeyNi liu
  8. 52_LSTM及简介,RNN单元的内部结构,LSTM单元的内部结构,原理,遗忘门,输入门,输出门,LSTM变体GRU,LSTM变体FC-LSTM,Pytorch LSTM API介绍,案例(学习笔记)
  9. 整理的一些java基础知识点,欢迎补充指正
  10. diamond源码解析