OTA简单介绍

转载baidu文库 

参考文档:IS_95B协议,683协议, 80-V0223-1_X3_ota

 

  OTAOver The Air的简称,也就是我们通常所说的空中接口。由发起方来分类,可以分成OTASPOTAPA。其中:OTASPOver the air service provisioning的简称,由用户端发起,通过拨打Activation code*228,*22800(800M A 系统),*22801800M B系统)来执行。OTAPAOver the air parameter administration的简称,由网络端发起,用户并不知晓。

  OTA的主要功能是下载NAM Parameter(号码分配模块)与PRL List(优先漫游列表),而且更多的应用是用于下载PRL

 

这里简要的介绍一下NAM参数:

NAM: 号码分配模块,每一个NAM是一些独立的网络参数的集合,MS正是依赖这些参数来接入网络。卡中只有一个NAMNV中最大可以支持4NAM,一般是2NAM

NAM参数有:

IMSI:国际移动站标识,1510进制数表示,由MCC,MNC,MIN组成。

MCC: 移动国家码码,310进制数表示,IMSI的最高3位,占10bit内存,存储在NV_IMSI_MCC_I

MNC: 移动网络码,210进制数表示,IMSI的第1112位,占7bit内存,存储在

NV_IMSI_11_12_I

MIN:  移动标识号码:是IMSI的最低10位,分成MIN2(3)MIN1(低7位)。MIN2存储在NV_MIN2_I中,占10bitMIN1存储在NV_MIN1_I中,占34bit

SPC:  Service Programming Code。安全密码,用于控制NAM参数的修改。如果要修改NAM参数,则必须先通过SPC验证。610进制数,范围从000000999999,存储在NV_SEC_CODE_I

SPASMSubscriber Parameter Administration Security Mechanism。是用来防止NAM值被未经认证的网络修改的安全机制。

A_KEY:用于鉴权的输入,存储在NV_A_KEY_I

A_KEY Checksum:在写A_KEY的时候需要输入26位的十进制数,前20位是A_KEY,后6位是CHECK SUMMS 先用A_KEY通过CAVE算法算出一个CHECK SUM跟输入的比较,如果相同则写允许写NV

ESN: 电子序列号,手机出厂时的序列号,也用于鉴权,存放在NV_ESN_I

UIM_ID:卡的ID。有卡版本把UIM_ID做为ESN号码。

NAME:可以用来存放运营商的名字

SSDShared Secret Data):当需要鉴权的时候,网络端发送随机数跟SSD过来,MS通过A_KEY,ESN,MIN,随机数产生SSD跟网络端发过来的SSD比较,如果相同则鉴权通过

MDN:用来存放电话号码,存储在NV_DIR_NUMBER_I

SID:系统标识,当前系统的系统标识,是一个动态变化的值,通过跟手机里面存储的Home SID,NID对进行比较,用来判断是不是漫游

NID:网络标识,也是一个动态变化的值,从当前捕获的系统中得到

HOME SID REG:是否允许网内SID漫游

FOR SID REG:是否允许网外SID漫游

FOR NID REG:是否允许网外NID漫游

HOME SID NID PAIR20对,存放在NV_SID_NID_LIST_I

 

PRL:漫游优先列表,在搜索系统中用到,可以通过QPST工具或者OTA更新。

PRL Enable:用来标识搜网时是用PRL还是用系统默认的表,存放在NV_PRL_ENABLED_I

 

下面时关于OTA流程的一些简要介绍:

OTASP (user-initiated OTA activation)

– NAM parameter download (IMSI, MDN)

– Preferred Roaming List (PRL) download

– Service Programming Lock download

         A-Key exchange

 

OTAPA (network-initiated OTA activation)

– New with IS-683A

– Supported in DMSS 3100 Release 2.0 and later

– Existing standard OTASP capability

– Service Programming without user intervention

– NAM lock

 

OTASP的工作流程如下:

用户拨打Activation code:(*FC + XX + SEND)发起呼叫。

其中*FCFeature Code*228*act),标识发起的是一个OTA call

xxSystem Selection Code00800 MHz, A-Band01800 MHz, B-Band

(关于Activation code详细的说明见IS683    3.2.1

 

建立call连接以后,MS与基站通过Data Burst来通讯:

   

基站给MS发送Request消息要求MS执行某种操作

然后MS回给基站Response消息告诉基站操作的结果:

Request消息的类型有下面几种:

–         OTASP_CONFIG_REQ_MSG:读取NAM参数配置

–         OTASP_DOWNLOAD_REQ_MSG:下载NAM参数到一个临时的存储器中

–         OTASP_MS_KEY_REQ_MSG:更新A_KEY  

–         OTASP_KEY_GEN_REQ_MSG:产生SSD

–         OTASP_REAUTH_REQ_MSG:重新鉴权

–         OTASP_COMMIT_REQ_MSG:把临时存储器中的NAM参数写到NV里面去

–         OTASP_PROT_CAP_REQ_MSGMS支持哪些OTA业务

–         OTASP_SSPR_CONFIG_REQ_MSG:读取PRL配置

–         OTASP_SSPR_DOWNLOAD_REQ_MSG:下载PRL到一个临时的存储器中

–         OTASP_VALIDATION_REQ_MSG:验证(包括SPC,SPASM

–         OTASP_OTAPA_REQ_MSGOTAPA业务

 

 

对应的Response消息类型有:

–         OTASP_CONFIG_RSP_MSG

–         OTASP_DOWNLOAD_RSP_MSG

–         OTASP_MS_KEY_RSP_MSG

–         OTASP_KEY_GEN_RSP_MSG

–         OTASP_REAUTH_RSP_MSG

–         OTASP_COMMIT_RSP_MSG

–         OTASP_PROT_CAP_RSP_MSG

–         OTASP_SSPR_CONFIG_RSP_MSG

–         OTASP_SSPR_DOWNLOAD_RSP_MSG

–         OTASP_VALIDATION_RSP_MSG

–         OTASP_OTAPA_RSP_MSG

 

下面通过一个PRL下载的例子来说明一下流程:

我们假定用户拨了*22800OTASP CALL已经建立好了,这时候CDMA状态处于Convation状态:

首先,基站想知道MS支持哪些OTA function,它发了一个Protocol Capability Request:

然后MS处理这条Data burst短信,返回一个Protocol Capability Response告诉基站它支持下面这些OTA 业务

 

因为Feature包含了Service Programming Lock,所以需要验证SPC,于是基站发送Validation RequestMS,并给出SPC=0看看是否跟手机当中的SPC匹配

MS验证SPC以后,回复Validation Response给基站,告诉基站验证成功

 

 

 

基站想知道MS支持的最大PRL长度是多少,于是发送SSPR Configuration Request读取MSPRL 长度的配置:

 

 

 

MS返回SSPR Configuration Resonse消息告诉基站它支持的PRL最大长度为3k,当前的PRL长度为3067PRL Version0

然后开始下载PRL到临时的存储器中,由于PRL表比较大,所以需要分段下载,segment_offset告诉MS偏移首地址多少开始存储,由于刚开始,所以值为0,Segment_size告诉MS这一段PRL的大小。Last_segment标识是不是最后一个PRL段。

MS返回存储的结果,告诉基站存储成功

其他的段重复上面的过程。

 

我们看一下最后两段的SSPR Download Request:

last_segment =1标识最后一段已经收到,整个PRL download结束

然后基站给MS发送Commit Request,要求把临时存储器里面的PRL表写到NV/RUIM中去:

MS处理Commit Request消息,存储完毕,告诉基站PRL写入成功

这时候整个PRL下载过程就结束了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

支持OTA需要打开的宏:

我们自己定义的宏:

LT_DIAMOND_UI_OTASP

 

部分代码如下

CALL建立好以后,cdmaMAIN STATE处于CDMA_TC(mccdma.c里面的mcc_subtask)CDMA_CONV子状态,这时候收到一条Data burst消息,调用tc_conv_msgmcctc.c函数进行处理。

switch (msg_ptr->msg.gen.msg_type)

{

  case CAI_TC_REV_BURST_MSG:/*Data burst type*/

next_state = process_tc_data_burst( &msg_ptr->msg, next_state );

      break;

}

 

process_tc_data_burstmcctcsup.c函数中因为收到的是OTA消息

if (msg_ptr->tc_burst.burst_type == CAI_OTA_ACTIVATION)

  调用otaspx_ext_to_int把消息转化成otasp的消息类型

typedef union

{

  otaspi_gen_msg_type          gen;

  otaspi_config_req_msg_type   config_req;   /* Configuration Request       */

  otaspi_download_req_msg_type dload_req;    /* Download Request            */

  otaspi_commit_req_msg_type   commit_req;   /* Commit Request              */

  otaspi_reauth_req_msg_type   reauth_req;   /* Re-Authenticate Request     */

  otaspi_ms_key_req_msg_type   ms_key_req;   /* MS Key Request              */

  otaspi_key_gen_req_msg_type  key_gen_req;  /* Key Generation Request      */

  otaspi_prot_cap_req_msg_type prot_cap_req; /* Protocol Capability Request */

  otaspi_sspr_cfg_req_msg_type   sspr_cfg_req; /* SSPR Config Request         */

  otaspi_sspr_dload_req_msg_type sspr_dload_req;  /* SSPR Download Request    */

  otaspi_validation_req_msg_type validn_req;   /* Validation Request       */

  otaspi_otapa_req_msg_type      otapa_req;    /* OTAPA Request               */

} otaspi_ftc_msg_type;

 

gen表示Request消息的类型,消息实体放入对应类型的块

转化成功以后再调用otasp_process_msg(otasp.c)处理具体的消息

switch (otasp_msg_ptr->gen.msg_type)

{

  case OTASP_CONFIG_REQ_MSG:

process_config_req (&otasp_msg_ptr->config_req);

break;

  case OTASP_DOWNLOAD_REQ_MSG:

next_state = process_dload_req (&otasp_msg_ptr->dload_req);

break;

}

otaspotapa最终执行的操作都在这个函数里。有兴趣的同事可以直接在这里(otasp.c)开始看OTA对不同类型消息的处理过程。这些代码由于我也是刚开始学习,不是很熟悉,准备下次再介绍。

 

另外,关于OTASP的一些UI的提示。

1:提示”Programming need initial”。在当前使用namMIN值没有被写过的情况下,需要在开机的时候提示用户。

uisstrt.c中处理。

Uistate_startup()

case INIT_S:中有很大一段代码是对NAM一些参数合法性的验证,如果超出范围,就整个NAM初始化掉。在读出MIN1或者MIN2的时候,如果ui_get_nv返回的状态是NV_NOTACTIVE_S,我们就在这里置一个标志,然后在进入idling的时候弹出pop框提示

2:在用户拨打*228,*22800,*22801的时候,需要在通话界面显示

   Searching。。。

        Activation

          OTASP

   ui_call_show_outgoing_call()中处理,画界面

3::在通话中,显示Programming in Progress

   ui_call_show_conversation()中处理,画界面

3OTASP完成以后,显示根据结果显示Programming Successful或者

Programming Unsuccessful

ui_call_show_release_call()处理,画界面

4OTASP/OTAPA结束以后,需要beep 3 声。

   end_conversation()中处理,设了一个400ms的定时器

#ifdef LT_DIAMOND_UI_OTASP

  /* OTASP ending  tone */

    if ( ISOTASP(curr_call.cm_info.call_type) )

    {

        ota_beep_time = 1;

        ui_menutimer_set((int4)400);

    }

#endif /* LT_DIAMOND_UI_OTASP */

   然后在call_end_disp_mode_event()中对timer事件进行处理

#ifdef LT_DIAMOND_UI_OTASP

    case UI_MENUTIMER_F:

       if(ota_beep_time < 3)

        {

            ota_beep_time ++;

            uisnd_tone( UI_EARBEEP_SND, SND_TIME, 200 );

            ui_menutimer_set((int4)400);

        }

#endif /* LT_DIAMOND_UI_OTASP */

 

OTAPA的流程跟OTASP类似,只是不需要UI的提示,因为OTAPA是网络端发起的,用户并不知道,所以在执行OTAPA操作的时候,不需要做UI处理。

 

OTA相关可能使用到的工具有:

QPSTQXDM

QXDM用来查看一些NAM项的内容

QPST--àRoam--àSave to file 得到   *****.qcn打开可以查看PRL的信息

 

这里介绍的只是OTA处理的一个大体框架,细节方面我会慢慢完善进去,因为刚接触OTA,难免有一些理解上面的错误,欢迎指正,谢谢

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值