Mobile频段是指用于移动通讯的特定频率范围,这些频率范围被划分为不同的频段,以支持各种移动通信技术。本文将带您深入了解如何查找和设置4G通信的mobile频段,并获取关键的相关参数。
在深入探讨如何查找和设置Mobile频段之前,我们首先需要了解一些基本概念。4G mobile指的是第四代移动通信技术,常用于描述通过4G网络进行的高速无线数据传输和通信。4G网络最显著的特征是其高速数据传输能力。理论上,4G可以提供下行速率高达100Mbps(移动环境下)和上行速率达50Mbps(静止或低速移动环境下)。
4G网络采用了全IP网络架构,所有数据和语音通信都是通过IP(Internet Protocol)传输的。相比之前的移动通信技术(如2G和3G),4G能够更有效地处理数据流量,尤其是用于互联网服务和多媒体应用。
4g主要采用正交频分复用技术(OFDM)和多输入多输出技术(MIMO)。OFDM将宽频带划分为多个窄频带,从而提高了频谱的利用效率,并减少了信号间的干扰。它使得4G能够在同样的频谱下传输更多的数据,并具有更强的抗干扰能力。多输入多输出(MIMO)技术也广泛应用于4G网络中。MIMO使用多个天线来同时发送和接收数据,增加了信号的容量和覆盖范围,显著提高了数据传输速率。
. 准备硬件:typec接口USB数据线
2. 连接设备:PC电脑,操作系统为WINDOWS系统
3. 安装软件环境:基本的下载调试工具
4. 获取移动设备的软硬件资料:源码和工具
a. 使用Luatools下载和详细使用:https://docs.openluat.com/Luatools/
b. 本教程使用的demo:https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/mobile
5. 将固件和脚本烧录到模块中,使用说明参考:Luatools下载和详细使用
6. 源码和固件已打包,如下所示:点我,下载完整压缩文件包
7. 常量消息:发布的消息,可以使用 sys.waitUntil()或者 sys.subscribe()函数来获取消息是否发布。
a. 常量及其类型和解释:
- mobile.UNREGISTER:number,未注册
- mobile.REGISTERED:number,已注册
- mobile.SEARCH:number,正在搜索中
- mobile.DENIED:number,注册被拒绝
- mobile.UNKNOW:number,未知
- mobile.REGISTERED_ROAMING:number,已注册,漫游
- mobile.SMS_ONLY_REGISTERED:number,已注册,仅 SMS
- mobile.SMS_ONLY_REGISTERED_ROAMING:number,已注册,漫游,仅 SMS
- mobile.EMERGENCY_REGISTERED:number,已注册,紧急服务
- mobile.CSFB_NOT_PREFERRED_REGISTERED:number,已注册,非主要服务
- mobile.CSFB_NOT_PREFERRED_REGISTERED_ROAMING:number,已注册,非主要服务,漫游
- mobile.CONF_RESELTOWEAKNCELL:number,小区重选信号差值门限,需要飞行模式设置
- mobile.CONF_STATICCONFIG:number,网络静态模式优化,需要飞行模式设置
以下是重构后的内容:
```
网络切换以信号质量优先,需要飞行模式设置。0表示不开,1表示开启,2表示开启并加速切换,但会增加功耗。
LTE跳paging时,需要飞行模式设置。谨慎使用,0表示不设置,1~7表示增大或减小DrxCycle周期倍数。例如,1表示1/8倍,2表示1/4倍,3表示1/2倍,依此类推。8~12表示配置固定的DrxCycle周期,仅当该周期大于网络分配的DrxCycle周期时该配置才会生效。例如,8表示320ms,9表示640ms,10表示1280ms,依此类推。
PSM模式中的T3324时间单位为S。
PSM模式开关,0表示关,1表示开。
attach模式,0表示EPS ONLY(仅EPS),2表示混合模式。遇到IMSIdetach脱网问题时,建议设置为0。注意,设置为EPS ONLY时会取消短信功能。
SIM写入次数的配置和读取。
伪基站禁止接入的时间,取值为0时取消,0xffff表示永久禁止。
删除已保存的协议栈参数,重启后会使用默认配置。
蜂窝网络模块的USB以太网卡控制。bit0表示开关,1表示开启,0表示关闭;bit1表示模式,1表示NAT,0表示独立IP(在USB以太网卡开启前可以修改,开启过就不行);bit2表示协议,1表示ECM,0表示RNDIS(飞行模式里设置)。
关闭邻区测量。1表示关,0表示开(除了功耗测试外不建议使用)。
验证PIN码操作。
更换PIN码操作。
启用PIN码功能。
```
.3 本 demo 使用 API 简介
本 demo 使用了以下 API:
1. `mobile.status()`:获取网络状态。
2. `mobile.getBand(band, is_default)`:获取当前使用/支持的 band。
3. `mobile.setBand(band, num)`:设置使用的 band。
4. `mobile.flymode(index, enable)`:进出飞行模式。
5. `mobile.vsimOnOff(enable)`:切换内置虚拟卡和外置实体卡。
6. `mobile.rtime(time, auto_reset_stack, data_first)`:设置 RRC 自动释放时间间隔。
具体使用方法如下:
1. 获取网络状态:调用 `mobile.status()` 函数即可。
2. 获取当前使用/支持的 band:调用 `mobile.getBand(band, is_default)` 函数,传入参数 `band` 和 `is_default`,其中 `band` 为输出参数,表示获取到的 band;`is_default` 为可选参数,默认为 false,表示获取当前支持的 band,如果传入 true 则表示获取默认支持的 band。成功返回 true,失败返回 false。
3. 设置使用的 band:调用 `mobile.setBand(band, num)` 函数,传入参数 `band` 和 `num`,其中 `band` 为要设置的 band;`num` 为要设置的 band 数量。成功返回 true,失败返回 false。
4. 进出飞行模式:调用 `mobile.flymode(index, enable)` 函数,传入参数 `index`(编号,默认为 0,仅在支持双卡的模块上出现 0 或 1)和 `enable`(是否设置为飞行模式,true 为设置,false 为退出),可选。返回值为原飞行模式的状态。
5. 切换内置虚拟卡和外置实体卡:调用 `mobile.vsimOnOff(enable)` 函数,传入参数 `enable`,true 表示开启内置虚拟卡和外置实体卡,false 表示关闭。无返回值。
6. 设置 RRC 自动释放时间间隔:调用 `mobile.rtime(time, auto_reset_stack, data_first)` 函数,传入参数 `time`(RRC 自动释放时间,单位秒)、`auto_reset_stack`(是否自动重置堆栈)和 `data_first`(是否优先使用数据业务)。成功返回 nil,无返回值。
```
data_first
boolean
是否启用数据传输优化,true 启用,false 关闭,开启后在 ACK 或超时失败时才允许 RRC 提前释放。此功能于 2024 年 8 月 12 日启用。
返回值:
返回值类型
解释
nil
无返回值
mobile.setAuto(check_sim_period, get_cell_period, search_cell_time, auto_reset_stack, network_check_period)
作用:设置一些辅助周期性或自动功能
参数:
参数
传入值类型
解释
check_sim_period
int
SIM 卡自动恢复时间,单位毫秒,建议 5000~10000。写 0 或不写则关闭功能
get_cell_period
int
周期性获取小区信息的时间间隔,单位毫秒。写 0 或不写则关闭功能
search_cell_time
int
每次搜索小区时最大搜索时间,单位秒,不要超过 8 秒
auto_reset_stack
boolean
网络故障时尝试自动恢复,和飞行模式/SIM 卡切换冲突,true 开启,false 关闭
network_check_period
int
设置定时检测网络是否正常的间隔,单位毫秒,建议 60000 以上,留空则不做更改。
返回值:
返回值类型
解释
nil
无返回值
mobile.imei(index)
作用:获取 IMEI。
参数:
参数
传入值类型
解释
index
int
编号,默认 0。支持双卡模块上才会出现 0 或 1 的情况
返回值:
返回值类型
解释
string
当前的 IMEI 值,失败返回 nil
mobile.imsi(index)
作用:获取 IMSI。
参数:
参数
传入值类型
解释
index
int
编号,默认 0。支持双卡模块上才会出现 0 或 1 的情况
返回值:
返回值类型
解释
string
当前的 IMSI 值,失败返回 nil
mobile.iccid(id)
作用:获取或设置 ICCID。
参数:
参数
传入值类型
解释
id
int
SIM 卡的编号,例如 0,1,默认 0
```
返回值:
返回值类型
解释
string
ICCID 值,失败返回 nil
int
当前 CSQ 值,失败返回 0。范围 0 - 31,值越大越好
int
当前 RSSI 值,失败返回 0。范围 0 到 -114,值越小越好
int
当前 RSRP(参考信号接收功率)值,失败返回 0。取值范围 -44 ~ -140,值越大越好
int
当前 RSRQ(参考信号发送功率)值,失败返回 0。取值范围 -3 ~ -19.5,值越大越好
int
当前 SNR(信噪比)值,失败返回 0。范围 0 - 30,值越大越好
int
当前 SIM 卡槽编号,失败返回 -1
boolean
是否优先使用 SIM0,仅在 SIM 卡编号为 2 时有效。true 表示优先使用 SIM0,false 表示按平台默认设置,必须开机时配置才能有效
string
获取或设置 APN。如果要使用非默认 APN 激活,必须大于 0
新的APN名称,不填表示获取APN,填入表示设置APN,设置是否支持取决于底层实现。
```go
func setAPN(new_apn_name string, user_name string, password string, ip_type int, protocol int, delete_apn bool) (string, error) {
// TODO: 实现设置APN的逻辑
}
func getDefaultAPN() (string, error) {
// TODO: 实现获取默认APN的逻辑
}
func getServiceCellInfo() (map[int]interface{}, error) {
// TODO: 实现获取服务小区详细信息的逻辑
}
func getBaseStationInfo() ([]map[string]interface{}, error) {
// TODO: 实现获取基站信息的逻辑
}
func configNetworkSpecial(item int, value int) (bool, error) {
// TODO: 实现网络特殊配置的逻辑
}
func reqCellInfo(timeout int) error {
// TODO: 实现发起基站信息查询的逻辑,包含临近小区信息
}
func getPhoneNumber(id int) (string, error) {
// TODO: 实现获取手机卡号的逻辑
}
```
.1.2 查询 Mobile 相关数据
本节主要介绍如何查询与 Mobile 相关的数据。首先,我们需要调用 `mobile()` 函数来获取一个 Mobile 对象,然后通过该对象的方法来查询所需的数据。例如,我们可以通过调用 `mobile.imei()` 方法来获取设备的 IMEI 号码。
6.1.3 订阅查询的信息
在本节中,我们将介绍如何订阅查询的信息。我们可以使用 `subscribe` 函数来订阅需要查询的数据,并在数据发生变化时接收通知。例如,我们可以订阅 `mobile.imei()` 方法的返回值,以便在设备更改 IMEI 号码时收到通知。
6.1.5 获取 SIM 卡状态
本节将介绍如何获取 SIM 卡的状态。我们可以使用 `sim.status()` 方法来查询 SIM 卡的状态。这个方法会返回一个表示 SIM 卡状态的字符串,如 "ready"、"unknown"、"absent" 等。
7、功能验证
在实现的功能验证部分,我们已经实现了设置频率和查找到的 Mobile 相关参数的功能。用户可以通过调用相应的方法来设置设备的频率,以及查询设备的相关参数,如 IMEI、IMSI、ICCID、CSQ、RSSI、RSRQ、RSRP、SNR 等。
8、总结
本 demo 主要实现了查找和设置 Mobile 频段,以及获取 IMEI、IMSI、ICCID、CSQ、RSSI、RSRQ、RSRP、SNR 等相关参数。通过这些功能,用户可以方便地管理设备的通讯设置和网络连接状态。
9、常见问题
在本节中,我们将解答一些关于使用该 demo 时可能遇到的问题。
9.1 获取模块 SN
出厂时未必有写 SN(序列号),通常用作唯一标识符。如果需要获取真实的唯一 ID,可以使用 `mobile.imei()` 方法代替。如果需要更精确的唯一 ID,可以使用 `mcu.unique_id()` 方法。
9.2 专网卡如何上网
在使用 `mobile.apn()` 函数时,需要注意专网卡的设置。这里的示例仅供参考,实际设置需要联系卡商获取 name、user 和 password。