谈谈OTA(1)

以前还从来没写过技术类博客,今天新开一个栏目叫OTA,这三个字母就是我现在从事的工作了。OTA是Over the Air的缩写,我呢,就是做OTA服务器的。那么OTA到底是干什么的呢,它最主要的作用就是往你的SIM卡和手机动态安装一些程序或者更改一些配置,以前主要是用发短信的方式来做这件事,不过随着3G网络的到来,现在也会用BIP或者CATTP这些速度更快的协议对SIM卡发送信息了。我们平时发送的短信都是文本短信,这里的短信一般都是二进制短信,它里面封装了一个或多个APDU,手机收到短信后会把短信内容发给SIM卡,然后SIM卡会根据APDU来执行相应的操作,然后把结果返回。可能有一天你打开手机的时候,发现手机里怎么突然多了一个菜单或者手机里面的某些配置变了,这一般就是OTA在神不知鬼不觉的时候干的了。以前你要往SIM卡里面加点东西可能要跑一趟营业厅,但是现在不用了,一条短信就可以搞定。

今天首先介绍一些基本概念跟术语把,不过因为我主要做服务器端,对卡端也是在学习中,所以这些描述可能会有错误。首先谈谈SIM卡,SIM卡就是智能卡的一种,从它的全称Subscriber Identity Module也可以看出,它保存的主要是用户的身份信息,SIM卡里面基本就是一个非常小型的电脑,它有CPU, ROM,RAM和EEPROM等等。SIM卡里面也有文件的概念,是按文件夹的形式组织的,根目录叫做MF(Master File),目录叫DF(Dedicated File),文件叫做EF(Elementary File)。像你的短信,电话簿等等都是以文件的形式存在SIM卡中的。在2G时代SIM卡里面的操作系统跟应用基本上是分不开的,在3G时代操作系统跟应用分开了,也就是说卡里面不仅可以装通信有关的应用,还可以装跟银行等等有关的应用(当然只是技术上可行,真正实现还要这些公司相互协调)。这样的卡叫做USIM。如果描述的东西对2G3G卡都适用的时候,一般写成(U)SIM。

在手机里面有一个读卡器,读卡器跟(U)SIM卡之间是半双工、master-slave的通信方式,读卡器给卡发送一个APDU,也就是一个Command,然后卡执行这个APDU,然后返回一个成功或者失败的响应。然后手机发送下一个命令,就这样直到关机。

然后介绍几个术语,我们的手机号一般叫做MSISDN,在卡里面有一个文件保存了IMSI,在移动的服务器上保存了MSISDN和IMSI的对应关系,比如如果你的卡丢了,去移动补办一张新卡,移动只需要把新卡的IMSI跟你的MSISDN重新关联起来就行了,旧卡就作废了。在卡里面还有一个东西叫做KI,这就是你的手机卡的密钥了,它跟IMSI一起用来登录你的无线网络。看过《伯恩的身份》吗,里面伯恩复制一张手机卡主要就是复制两个东西:IMSI和KI,有了这两个东西,你就可以复制别人的SIM卡了。IMSI可以通过普通的APDU读出来,但是KI是读不出来的,如果要解密只能往卡上发大量的明文,然后根据KI加密后的密文进行比对来解出KI。 OK,扯的太远了,手机发送一条短信一般是发到短信中心(SMSC),然后短信中心转发给接收方。如果手机发送一条短信,这条短信就叫做MO(Mobile Originated),如果手机收到一条短信,这条短信就叫做MT(Mobile Terminated)。说了这么多,是不是很枯燥?好,要是有人有兴趣的话我下次再讲点^_^
### STM32F1系列微控制器OTA实现指南 #### 背景介绍 STM32的OTA(Over-The-Air)技术是一种通过无线通信方式,为设备分发新软件、配置甚至更新加密密钥的技术。这种技术允许中心位置向所有用户发送更新,确保每个接收者无法拒绝、破坏或改变这些更新,并且能够即时将更新应用到所有设备上[^3]。 #### 实现步骤详解 为了在STM32F1系列微控制器上实现OTA功能,可以按照以下方法操作: ##### 1. 开发环境搭建 使用STM32CubeMX工具生成初始化代码框架是一个常见的做法。该工具支持图形化界面配置外设和时钟树结构,简化了底层硬件驱动的复杂度。对于STM32F103开发板而言,推荐搭配STM32CubeIDE完成项目创建与编译工作[^2]。 ##### 2. 数据传输协议选择 针对文件下载部分,在实际案例中有开发者采用了Ymodem协议来处理固件包上传过程中的校验及重传机制等问题。因此如果计划利用串口作为调试接口,则需提前安装好相应的终端仿真软件如XShell以便后续测试验证阶段顺利开展。 ##### 3. 双分区存储设计 考虑到单片机内部Flash资源有限而又要满足在线升级需求的情况下,通常会采取双Bank架构策略即将整个可用空间划分为两个独立区域分别用于存放当前运行版本镜像以及待加载的新版映射副本。当检测到来自远程服务器推送过来的有效payload之后即可切换至备用区执行启动流程从而达到无缝过渡效果而不影响正常业务逻辑运作[^1]。 以下是关于如何设置应用程序跳转地址的一个简单例子: ```c void JumpToApplication(uint32_t ApplicationAddress){ typedef void (*pFunction)(void); SCB->VTOR = ApplicationAddress; // 设置中断向量表偏移寄存器 pFunction JumpAddress; JumpAddress = (pFunction)*((uint32_t*)ApplicationAddress); ((pFunction)((*(uint32_t*)(ApplicationAddress + 4))))(); // 跳转并调用目标函数入口点 } ``` 上述代码片段展示了怎样从Bootloader模式下转移到User App状态的方法之一。 ##### 4. 安全性考量 鉴于敏感信息安全的重要性日益凸显出来所以建议在整个传输链路当中加入必要的认证措施防止恶意篡改行为发生比如采用AES-GCM算法对每一块数据块进行封装后再传递出去同时保留MAC标签供接收端核验真伪之用以此保障整体解决方案具备较高的鲁棒特性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值