一、Luatools使用问题
使用教程:http://oldask.openluat.com/article/4
1.1 烧录下载
1.1.1、 2G模块无法烧录下载
-
检查下载线连接是否正确,下载线要连接模块的host_txd、host_rxd、gnd
-
检查下host_txd、host_rxd是否与其他管脚短路,特别是host_txd和vddio相邻,可能会因为贴片或者焊接问题导致短路
-
下载线不稳定,更换ft232/cp2102等芯片串口线对比试一下
-
检查供电以及开机是否正常,测量vbat 3.6V到4.2V,并拉低pwrkey 2000ms开机
-
检查下载口电平是否匹配,支持2.8V,兼容3.3V
-
更换电脑usb口或者更换电脑对比测试
-
模块可能损坏【静电击穿、炉温过高可能导致损坏】,更换模块对比测试确认
-
如果出现下载过程中失败问题,参考如下顺序排查
1)供电可能不稳定,使用稳定的电源供电,可以直接用稳压电源对vbat供电对比确认
2)下载线可能不稳定,更换ft232/cp2102等芯片串口线对比试一下
更多详细说明参考:http://doc.openluat.com/article/600/0
1.1.2、 2G开发板无法烧录下载
-
参考开发板使用手册,确认跳线帽使用是否正常
-
开发板上已经有usb转串口芯片,所以要使用micro usb线,不要使用usb转串口线
-
检查供电以及开机是否正常,测量vbat 3.6V到4.2V,并长按pwrkey开机
-
检查下载口电平是否匹配,支持2.8V,兼容3.3V
-
更换电脑usb口或者更换电脑对比测试
-
模块可能损坏【静电击穿、炉温过高可能导致损坏】,更换模块对比测试确认
-
如果出现下载过程中失败问题,参考如下顺序排查
1)供电可能不稳定,使用稳定的电源供电,可以直接用稳压电源对vbat供电对比确认
2)下载线可能不稳定,更换ft232/cp2102等芯片串口线对比试一下
1.1.3、4G模块(开发板)无法烧录下载
-
检查下载线连接是否正确,如果是模块,要连接模块的usb_dp、usb_dm、vbus、gnd;如果是开发板,要连接usb口,luatools准备好下载后,拨动开关拨到on位置
-
需要使用稳定的usb下载线,不要使用usb转串口下载线
-
检查供电是否正常,测量vbat 3.6V到4.2V
-
要安装驱动,参考:http://oldask.openluat.com/article/92, 注意:安装好驱动之后,在烧录固件过程中,设备管理器中会出现下图所示的下载驱动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-24f53taG-1619422566511)(http://oldask.openluat.com/image/show/attachments-2019-10-P2aiLCiP5db9ad0250805.png “undefined”)]
烧录固件,正常开机后,设备管理器中会出现下图所示的3种驱动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDM7kCFW-1619422566523)(http://oldask.openluat.com/image/show/attachments-2019-10-nP7l5Mlr5db9acf3b676b.png “undefined”)]
如果没有出现这些端口,或者有感叹号,表示驱动没有安装成功,请重新安装驱动
注意:如果电脑安装了USBPcap,会造成下载驱动有感叹号,从而造成无法烧录固件,但是可以正常抓取日志。如果遇到此问题,请删除USBPcap后再试;此问题可以参考下图操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCqhW8QU-1619422566524)(http://oldask.openluat.com/image/show/attachments-2019-11-cWGdgtNF5dd3a643e6a80.png “undefined”)]
-
更换电脑usb口或者更换电脑对比测试
-
模块可能损坏【静电击穿、炉温过高可能导致损坏】,更换模块或者开发板对比测试确认
-
如果出现下载过程中失败问题,参考如下顺序排查
1)供电可能不稳定,使用稳定的电源供电,可以直接用稳压电源对vbat供电对比确认
2)下载线可能不稳定,更换稳定的usb下载线
1.1.4、生成量产文件时的加密功能有什么用
如果项目有安全性方便的考虑,防止别人拿到设备后,读取自己写的脚本文件,可以在生成量产文件时,打开加密功能选项,输入密码,Luatools对所有脚本和其他资源文件进行加密,即使别人拿到了加密设备,也无法解密出原始的脚本和资源文件
1.1.5、4G开发模式下的“USB打印Trace、UART1打印Trace、UART2打印Trace”是什么功能
可以选择输出脚本日志的端口,默认是USB输出日志,如果烧录或者生成量产文件时,选择了指定端口输出日志,注意在Luatools主界面,选择对应的打印口,这样在Trace窗口才能输出日志
1.1.6、Luat开发方式下可以烧录哪种类型的文件
任何类型的文件都可以烧录,例如mp3、bmp、png、jpg、txt、自定义后缀的文件等等,烧录后,脚本如何访问这些文件,参考1.1.7章节
1.1.7、脚本代码中如何读取通过Luatools烧录进模块的文件
通过Luatools烧录进模块的文件,开机启动时,根据不同类型的文件,会自动创建不同的目录保存这些文件,完整的文件路径(filePath)定义如下:
2G模块:
- 如果是lua文件,例如xxx.lua:非加密下载时,文件路径为/lua/xxx.lua;加密下载时,文件路径为/lua/xxx.luae
- 如果是非lua文件,例如xxx.mp3:非加密下载时,文件路径为/ldata/xxx.mp3;加密下载时,文件路径为/ldata/xxx.mp3e
4G模块:
- 无论什么格式的文件,例如xxx.lua,文件路径都为:/lua/xxx.lua
考虑到对内存的消耗过大可能会造成内存不足的问题:如果文件较小(小于4KB),可以使用io.readFile(filePath)一次性全部读出;如果文件较大(大于4KB),可以使用io.readStream(filePath, offset, len)分段读出
1.1.8、Luat开发方式下可以烧录某个项目的部分文件吗?
不可以。每次烧录,都会删除模块中之前的所有脚本和资源文件,所以每次烧录,必须烧录某个项目的所有脚本和资源文件(包括lib脚本文件)
1.1.9、打开串口失败
Luatools打开串口时,会对波特率做校验,如果串口芯片的波特率满足不了要求,会打开失败
2G模式下,波特率为921600;4G模式下,波特率为115200
目前遇到过如下几种打开串口失败的情况:
1. 使用了PCIE转串口卡,这种串口卡不支持921600波特率,所以在2G开发模式下会提示打开失败,在4G模式下可以正常打开
1.2、日志输出
1.2.1、2G模块(开发板)无法输出日志
- 参考1.1.1和1.1.2章节,先检查一下数据线、供电、跳线问题
- 联系代码开发者,确认一下代码中是否关闭了日志输出功能
- 联系代码开发者,确认一下代码中是否配置了host口、uart1或者uart2输出日志功能,Luatools选择的打印口要和代码配置一致
1.2.2、4G模块(开发板)无法输出日志
- 参考1.1.3章节,先检查一下数据线、供电问题
- AT版本固件不支持通过Luatools trace窗口输出日志,通过sscom等串口工具,连接ASR Modem Device AT口,发送ATI命令检查一下版本号是否正确
- 联系代码开发者,确认一下代码中是否关闭了日志输出功能
- 联系代码开发者,确认一下代码中是否配置了usb口、uart1或者uart2输出日志功能,Luatools主界面选择的打印口要和代码配置一致
- 参考1.1.5章节,确认下烧录或者打包时选择的打印Trace口是否和Luatools主界面选择的打印口一致
1.2.3、日志输出过程中,突然停止输出
- 如果是4G模块usb口输出日志,点击“关闭端口”后再点击“打开端口”;如果是4G 模块串口或者2G模块输出日志,点击“重启端口”
- 参考1.2.1和1.2.2排查
1.2.4、4G模块USB输出日志时,会丢失开机过程的部分日志
4G模块开机时,部分电脑识别usb口过慢,导致开机部分的日志可能丢失;遇到此类问题,可以参考1.1.5章节,使用uart1或者uart2输出日志
1.2.5、为什么系统状态、信号强度、版本类型、框架类型、软件版本的内容有时不显示或者显示不正确
这些内容都是从抓取的日志中分析关键字解析出来的,如果不是从开机开始抓取日志,会丢失一些日志,从而导致解析失败。例如软件版本是搜索poweron reason解析出来的,如果没有抓到这一行日志,软件版本就会解析失败,或者如果自己写的应用脚本中也会输出poweron reason关键字日志,也可能导致解析异常。所以,这些信息的解析仅仅是作为参考方便开发者分析问题,要进一步准确分析问题,一定要直接分析日志
1.2.6、Luatools可以抓取、输出哪几种日志
- 可以抓取、实时显示、自动保存Luat版本的脚本日志,脚本日志文件自动保存在工具根目录的log/*.trc中
- 可以抓取、自动保存4G模块AT版本或者Luat版本的底层日志,底层日志文件自动保存在工具根目录的log\4gdiag*. sdl中,但是不可以实时显示;如果需要调试4G模块AT版本问题,可以用串口工具直接监控AT口的命令交互日志【参考:http://doc.openluat.com/article/600/0 】或者单片机打印出来AT交互日志来分析问题;或者吧sdl文件发给合宙技术支持人员分析
- 不可以抓取2G模块AT版本日志。如果需要调试2G模块AT版本问题,可以用串口工具直接监控AT口的命令交互日志【参考:http://doc.openluat.com/article/600/0 】或者单片机打印出来AT交互日志来分析问题;或者按照合宙技术支持人员的要求,参考:http://oldask.openluat.com/article/63 来抓取日志
1.3、其他
1.3.1、Luatools无法启动、出现error 126
缺少vc_redist运行库,http://www.openluat.com/Product/file/asr1802/vc%E8%BF%90%E8%A1%8C%E5%BA%93%E5%90%88%E9%9B%86MSVBCRT_AIO_2018.07.30_X86+X64.exe 下载安装后,重新运行Luatools
1.3.2、Luatools工作异常、闪退
- 点击菜单“帮助->检查新版本”,更新最新版本
- 检查电脑的任务管理中是否有多个luatools.exe,如果有,关闭所有后,再重启Luatools
- 最新版本如果仍然有问题,提供Luatools根目录下的*failed.log给合宙技术支持人员分析
1.3.3、不小心删除了源码,有办法找回吗
- Luatools根目录下ClearScr中会保存最后一次本地烧录或者生成量产文件时的所有源码文件
- 如果第1步不是你想要的,找一个有源码的设备,联系合宙技术支持人员处理
1.3.4、如何抓取模块死机时的日志
- 2G模块参考:http://oldask.openluat.com/article/63
- 4G模块参考:http://oldask.openluat.com/article/910
1.3.5、是否有64位、Linux、Mac版本工具;是否支持xp系统
没有64位、Linux、Mac版本工具,Linux和Mac请使用虚拟机运行Luatools工具;支持部分XP系统,建议在WIN7以上的系统上使用
1.3.6、为什么提示多个工具在运行
检查电脑的任务管理中是否有多个luatools.exe,如果有,关闭所有后,再重启Luatools
1.3.7、为什么设备一直在正常运行,但是coolwatcher抓日志过程中,会突然不输出日志
按照如下顺序尝试解决
- 下载线可能不稳定,更换使用ft232芯片串口线;抓日志过程中最好不要频繁的碰到串口线,可能会受到干扰
- 左下角的command编辑框中输入creconnect命令后回车【注意:host rx要和串口线连接,才能正常接收命令】
- 重新插拔串口线,重启coolwatcher
如果左下角command编辑框中输入r 0命令后回车【注意:host rx要和串口线连接,才能正常接收命令】,有0xXXXXXXXX格式的数据返回,表示host口通信正常,没输出日志,可能是host寄存器受到干扰导致,此时参照下图将可能受到干扰的寄存器主动设置正常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l78rDgGD-1619422566526)(http://oldask.openluat.com/image/show/attachments-2019-11-qMXxAfM15dcd00cc6582b.png “undefined”)]!
二、量产烧录工具使用问题
2G模块量产烧录工具:http://www.openluat.com/Product/file/rda8955/RDA 平台Lod客户升级工具2.5.7z
4G模块量产烧录工具:http://www.openluat.com/Product/file/asr1802/ASR 平台core客户升级工具V1.3_Air720系列.7z
合宙提供了官方的烧录夹具和设计文件,如有需要,打开:luat.taobao.com,在店铺内搜索夹具,与淘宝客服沟通;合宙也提供免费代烧录服务,购买模块到达一定数量时,此服务免费,详情与模块销售沟通
2.1、使用一拖多烧录时,出现后一个模块开始烧录,前一个模块烧录失败的问题
检查下夹具供电,使用稳定的电源给夹具供电;不要一个电源同时给多个夹具供电
2.24G模块烧录到最后,没有提示成功,提示“USB is Removed”
- 更换一根好点儿usb线,或者更换一个电脑usb口,或者更换电脑试试
- 工具目录下config/param.ini中,确认一下modleType配置是否正确
2.3、4G模块量产烧录工具打开失败
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ve8hLpKw-1619422566527)(https://oldask.openluat.com/image/show/attachments-2020-03-CQaioO2Q5e69f0ce8ac32.png “undefined”)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8bYL9z9-1619422566528)(https://oldask.openluat.com/image/show/attachments-2020-03-7OnkBxOR5e69f0eb5f1df.png “undefined”)]
出现此问题,一般都是blf文件配置出错导致的,打开config/param.ini,检查下图中的core对应的blf文件配置是否正确
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UHFIhD8-1619422566528)(https://oldask.openluat.com/image/show/attachments-2020-03-kMfp2nr75e69f1160fa18.png “undefined”)]
三、开关机(电源)问题
3.1、2G模块无法开机
- 测量vddio引脚电压,如果是2.8V左右,表示已经正常开机,“无法开机”纯属误判;如果是低电平0V左右,表示没有开机
- vbat引脚电压3.6V到4.2V,powerkey拉低至少2秒,才有可能开机;测量vbat引脚和powerkey状态,确认是否满足要求
- 模块峰值需要2A电流,供电跌落不能太多
- 注意:reset引脚拉低是关机功能,不是重启功能
- 如果使用了硬件看门狗,可能因为硬件看门狗外围电路异常导致模块一直在重启,可参考20.10章节确认
- 如果上电后,发现电流不跑,host口没有日志输出,可能是开机过程中发生了死机问题;在powerkey一直拉低自动开机模式下,如果vrtc外部供电,就会造成vbat放电过慢,在放电没有完全时进行上电,会导致死机
- AT版本,上电后,如果发现电流不跑,日志跑到一半也停止了,网络指示灯正常闪烁,可能是开机过程中在某个task里死循环,曾经有一个客户的板子,开机时模块UART1_RX管脚被外部拉低导致模块一直有串口中断,导致死循环
- AT版本,如果AT口输出NORMAL POWER DOWN的URC提示,表示正常关机,有两种情况会导致这种关机
1) 开机状态下,检测到powerkey被拉低1.5秒以上时间
2) 收到了AT+CPOWD=1命令
3.2、2G模块无法关机
- AT固件,开机状态下,powerkey引脚从高电平拉低1.5秒以上,或者发送AT+CPOWD命令,都会执行关机流程;如果采用了“powerkey一直拉低”的上电自动开机设计,则无法通过powerkey或者AT+CPOWD命令关机【固件后,检测到powerkey拉低,会再次自动开机】,只能vbat直接断电关机
- Luat固件,开机状态下,require了lib中powerKey功能模块,配置了长按powerkey关机,长按powerkey按键,或者在脚本中直接调用rtos.poweroff()接口,都会执行关机流程;如果采用了“powerkey一直拉低”的上电自动开机设计,则无法通过powerkey或者rtos.poweroff()接口关机【固件后,检测到powerkey拉低,会再次自动开机】,只能vbat直接断电关机
- 注意:模块烧录软件后,如果没有彻底断一次电,自动开机后,powerkey按键、AT+CPOWD命令、rtos.poweroff()接口都无法成功关机,实际的现象表现为:关机后,会一直不断重启。这个是芯片设计的一个缺陷,无法修改
3.3、4G模块无法开机
-
测量V_GLOBAL_1V8引脚电压,如果是1.8V左右,表示已经正常开机,“无法开机”纯属误判;如果是低电平0V左右,表示没有开机
-
如果引出了usb引脚,usb连接电脑,参考1.1.3章节第4步,持续观察20秒,看是否会稳定出现设备管理器中的3个端口,如果稳定出现,表示已经正常开机,“无法开机”纯属误判;如果没有出现,表示没有正常开机;如果出现后一闪而过,表示可能一直在异常重启,参考4.2章节处理
-
vbat引脚电压3.4V到4.3V,powerkey拉低至少2秒,才有可能开机;测量vbat引脚和powerkey状态,确认是否满足要求
-
模块峰值需要2A电流,供电跌落不能太多
-
将模块的第142脚:EXTON1N直接接地可以实现上电自动开机功能。需要注意,在上电自动开机模式下,将无法关机,只要VBAT管脚的电压大于开机电压,即使软件调用关机接口,模块仍然会再次开机。另外,在此模式下,要想成功自动开机,VBAT管脚电压仍然要大于软件设定的开机电压值(3.1V),如果不满足,模块会关闭,就会出现反复开关机的情况。
不建议把模块的第21脚:PWRKEY 直接接地来实现上电开机功能。假如把PWRKEY 直接接地了,此时再把RESET_IN_N 拉低超过15秒的话,模块内部的PMU会认为模块状态异常,强制断电,即使在RESET_IN_N释放以后模块也会一直处于关机状态,直到松开PWRKEY一段时间。
3.4、4G模块无法关机
- AT固件,开机状态下,powerkey引脚从高电平拉低1.5秒以上,或者发送AT+CPOWD命令,都会执行关机流程;如果采用了“EXTON1N一直拉低”的上电自动开机设计,则无法通过powerkey或者AT+CPOWD命令关机【关机后,检测到EXTON1N拉低,会再次自动开机】,只能vbat直接断电关机
- Luat固件,开机状态下,在脚本中直接调用rtos.poweroff()接口,都会执行关机流程;如果采用了“EXTON1N一直拉低”的上电自动开机设计,则无法通过rtos.poweroff()接口关机【关机后,检测到EXTON1N拉低,会再次自动开机】,只能vbat直接断电关机
- 将模块的第142脚:EXTON1N直接接地可以实现上电自动开机功能。需要注意,在上电开机模式下,将无法关机,只要VBAT管脚的电压大于开机电压即使软件调用关机接口,模块仍然会再开机起来。另外,在此模式下,要想成功开机起来VBAT管脚电压仍然要大于软件设定的开机电压值(3.1V),如果不满足,模块会关闭,就会出现反复开关机的情况。
不建议把模块的第21脚:PWRKEY 直接接地来实现上电开机功能。假如把PWRKEY 直接接地了,此时再把RESET_IN_N 拉低超过15秒的话,模块内部的PMU会认为模块状态异常,强制断电,即使在RESET_IN_N释放以后模块也会一直处于关机状态,直到松开PWRKEY一段时间。
3.5、其他
3.5.1、有没有推荐的电池
建议选择18650或锂聚合物电池。供电必须满足3.7~4.2v,电压跌落不超过0.6v,最低不低于3.4v
3.5.2、为什么使用市电仍然无法正常工作
请检查电源动态响应能力。必要时vbat、gnd并电容
3.5.3、能否获取电量百分比
不能,只能获得电池电压。使用misc.getVbatt(),返回毫安。开发者自行根据电池的承认书去换算百分比(因为不同电池放电曲线各有差异)
3.5.4、为什么供电没问题却仍然无法开机、自动关机、或者异常重启
请用示波器检查供电有无跌落,万用表响应能力较差
3.5.5、客户示例:4G模块开机很慢,powerkey需要按16秒才能开机
RESET管脚与MCU直接相连,这样的话板子在上电时,MCU的IO反转可能会影响到模块的开机;RESET管脚需要用三极管驱动,或者加二极管隔离。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W8zKcwFJ-1619422566529)(https://oldask.openluat.com/image/show/attachments-2019-12-Dey6JVAC5de4c676d9c94.png “undefined”)]
四、重启问题
关于重启问题的详细描述参考如下文章:
http://oldask.openluat.com/article/27
http://oldask.openluat.com/article/28
http://oldask.openluat.com/article/29
http://oldask.openluat.com/article/909
重要提醒:使用Luat固件开发时,一定要使用errDump功能,此功能对“量产投放市场的设备,远程调试初步定位问题”至关重要
4.1、2G模块重启
- 如果是Luat二次开发模式,使用官方发布的AT固件或者Luat固件+随便一个demo,测试确认下,是不是自己写的软件有问题
- vbat引脚电压3.6V到4.2V,使用示波器测量vbat电压是否有跌落;模块峰值需要2A电流,可使用直流稳压电源直接对vbat供电对比测试;如果有问题,参考:http://doc.openluat.com/article/600/0 分析处理
- 如果使用了硬件看门狗,可能因为硬件看门狗外围电路异常导致模块一直在重启,可参考20.10章节确认
- AT版本,如果无法抓到日志,直接联系合宙技术支持人员处理;如果可以抓到日志,按照如下步骤处理:
1) 如果出现“(0xffffffff)模块硬件上电中,正在启动”,表示硬件重启,直接按照第1步确认问题,同时确认下是否为外围单片机给模块断电复位引起的重启
2) 其他的重启,直接联系合宙技术支持人员按照如下方式处理
A. 合宙技术支持人员提供一个debug assert版本的固件【注意:此固件仅供测试使用,不能用于量产】
B. 客户在MCU端开机发送AT* EXASSERT=1命令【注意:此命令会导致模块发生重启问题时,直接死机,仅测试使用,不能用于量产;测试设备使用完毕之后,再发送AT*EXASSERT=0恢复默认配置】
C. 如果有硬件看门狗机制,要从硬件上断开硬件看门狗;以防复现死机问题后,被硬件看门狗重启复位
D. 参考http://oldask.openluat.com/article/63挂测复现问题死机问题后,保留死机现场,联系合宙技术支持人员远程分析
- Luat版本,如果无法抓到日志,直接联系合宙技术支持人员处理;如果可以抓到日志,搜索poweron reason:
1) reason为0,表示硬件重启,直接按照第1步确认问题,同时确认下是否为硬件看门狗或者外围单片机给模块断电复位引起的重启
2) reason为7,表示点击了Luatools的“重启模块”按钮控制的重启
3) reason为8,表示core中的软件看门狗重启,检查一下脚本中是否写了死循环的逻辑
4) reason为3,表示软件重启,在日志中搜索restart或者[E]或者traceback,分析原因自行解决;如果日志中搜索不到这些关键字,检查一下应用脚本中是否调用了rtos.restart()所致
5) 如果以上步骤都不能解决问题,直接联系合宙技术支持人员按照如下方式处理
A.合宙技术支持人员提供一个debug assert版本的固件【注意:此固件仅供测试使用,不能用于量产】
B. 客户在main.lua中sys.init前加一行代码ril.request(“AT* EXASSERT=1”)【注意:此行代码会导致模块发生重启问题时,直接死机,仅测试使用,不能用于量产;测试设备使用完毕之后,再修改为ril.request(“AT*EXASSERT=0”)恢复默认配置】
C. 如果有硬件看门狗机制,关闭此功能;以防复现死机问题后,被硬件看门狗重启复位
D. 参考http://oldask.openluat.com/article/63挂测复现问题死机问题后,保留死机现场,联系合宙技术支持人员远程分析
4.2、4G模块重启
- 如果是Luat二次开发模式,使用官方发布的AT固件或者Luat固件+随便一个demo,测试确认下,是不是自己写的软件有问题
- vbat引脚电压3.4V到4.3V,使用示波器测量vbat电压是否有跌落;模块峰值需要2A电流,断开模块与外部的连接,使用直流稳压电源直接对vbat供电对比测试
- AT版本,如果无法抓到日志,直接联系合宙技术支持人员处理;如果可以抓到日志,参考1.2.6章节,提供sdl日志文件给合宙技术支持人员分析;如果需要设置为死机模式,复现问题进一步分析,参考 http://oldask.openluat.com/article/910 处理
- Luat版本,如果无法抓到日志,直接联系合宙技术支持人员处理;如果可以抓到日志,搜索poweron reason:
1) reason为0,表示硬件重启,直接按照第1步确认问题,同时确认下是否为硬件看门狗或者外围单片机给模块断电复位引起的重启
2) reason为3,表示软件重启,在日志中搜索restart或者[E]或者traceback或者EE LOG,分析原因自行解决
如果以上步骤都不能解决问题,参考1.2.6章节,提供trc日志文件和sdl日志文件给合宙技术支持人员分析;如果需要设置为死机模式,复现问题进一步分析,参考 http://oldask.openluat.com/article/910 处理
五、校准问题
模块如果没有校准,射频性能就无法达到最优,极端情况下,会造成网络通信非常不稳定;未校准的模块必须走售后流程维修或者换货
5.1、2G模块如何判断是否校准
- AT版本,发送AT+ATWMFT=99命令查询,如果返回SUCC表示已校准,其余返回表示未校准
- Luat版本,日志中搜索ATWMFT,看AT+ATWMFT=99命令的返回值,如果返回SUCC表示已校准,其余返回表示未校准
5.2 4G 模块如何判断是否校准
4G模块会对2G、3G、4G进行单独校准,所以要单独查询这三部分是否校准;同时也要根据模块支持的网络制式区别对待,例如720H支持2G、3G、4G,则这三部分都要校准才正常;720G支持3G、4G,则只要这两部分都校准就正常
- AT版本,发送ATMRD_CDF=Q,GsmCalData.nvm、ATMRD_CDF=Q,aplp_rf_calibration.nvm、AT*MRD_CDF=Q,LteCalData.nvm命令分别查询2G、3G、4G是否校准,如果返回1表示已校准,其余返回表示未校准
- Luat版本,日志中搜索MRD_CDF,看ATMRD_CDF=Q,GsmCalData.nvm、ATMRD_CDF=Q,aplp_rf_calibration.nvm、AT*MRD_CDF=Q,LteCalData.nvm命令的返回值,如果返回1表示已校准,其余返回表示未校准
六、IMEI、SN问题
6.1、Luat版本为什么开机读出的IMEI、SN为空
Lua版本的脚本运行起来之后,会发送AT命令查询imei、sn,从脚本开始运行到查询到结果,一般需要3秒钟【只是经验值,不要用做程序设计依据】,如果在查询到结果之前使用misc.getImei()、misc.getSn()接口读取,就为返回空;
用户开发项目时,可以根据项目的应用场景,分别做不同处理,比较典型的两种场景如下:
- 如果开机后过一段时间(这个时间超过开机查询imei、sn的时间,例如连接后台服务器)才会用到imei和sn,则用到时直接调用读取接口即可,因为这个时间点肯定已经查询到结果
- 如果在查询到imei、sn之后,立即执行某个动作,则需要在自己写的脚本中订阅查询结果的消息,参考如下代码
sys.subscribe(“IMEI_READY_IND”, function() end)
sys.subscribe(“SN_READY_IND”, function() end)s
6.2、为什么IMEI为默认值
2G模块的默认值:359759002514931
4G模块的默认值:3520990017614823
- 如果是合宙研发人员在开发调试过程中,发给客户体验测试的模块,可能会漏写IMEI
- 如果是通过官方渠道购买的2G模块,请注意观察下模块标签。因合宙工厂扫描头偏移原因,2019年2月份、3月份(3月20日之前)生产的部分2G模块,IMEI和标签上的不一致,IMEI为默认值359759002514931,遇到此类模块,需要走售后流程换货或者维修。模块标签上SN的第3到10位表示生产日期,例如SN:05201902270907815,20190227表示2019年2月27日生产
- 曾经有一个客户,在生产时让合宙工厂代烧录客户固件,客户固件中有一个设计“烧录固件后,第一次运行时,会读取模块imei,存储到文件系统中,以后直接使用文件系统中存储的imei”,因为合宙工厂的生产流程是“先烧录固件,再写imei”,所以导致这批客户设备出厂后,发现文件系统中存储的imei都是默认值。所以让合宙代烧录的客户一定要注意imei使用的软件设计逻辑:直接实时查询使用即可,不要再另外存储一份使用
- 其余情况,先根据第五章节确认下模块判断下有没有校准,同时提供日志给合宙技术支持人员分析
6.3、为什么4G模块写IMEI会失败
实际场景中,用户可能会写自定义的imei到模块中,AT版本使用AT+WIMEI命令、Luat版本使用misc.setImei接口来写入;imei一共15位,其中最后1位是校验位,根据前14位计算得来
2G模块的固件对最后1位的校验位没做检查,即使校验位错误,也允许写入
4G模块的固件对最后1位的校验位会做正确性检查,校验位出错,返回写入失败;所以如果4G模块出现写IMEI失败,可以通过https://www.oming.me/tools/imei检查下校验位【如果此链接失效,可以把校验位设置为0到9依次尝试】,如果检验位没问题,提供日志给合宙技术支持人员分析
6.4、SN是什么,如何读写
sn的标准含义是指序列号,合宙模块的标签上都有sn号,记录了生产日期等信息;模块的flash中也有一块区域为sn,我们现在讨论的是模块flash中的这一块区域。 sn区域最多可以存储64字节的数据,即使重新烧录固件,此区域的数据也不丢失,和imei的存储机制类似。合宙工厂生产模块时,对sn区域没有写入任何有效数据【2G模块虽然写入了数据,但是此数据没什么实际意义】,所以客户拿到模块之后,可以根据sn区域的特性,存储自定义的不超过64字节的任何数据,例如阿里云的设备密钥
sn读写接口如下:
- AT版本:AT+WISN?读取sn;AT+WISN="…"写sn
- Luat版本:misc.getSn()读取sn;misc.setSn(…)写sn
七、SIM卡问题
7.1、支持中国大陆哪些运营商
- 2G模块:仅支持中国移动和中国联通(2G、3G、4G卡),由于中国联通关闭了2G网络,建议使用用中国移动卡
- 4G模块:不同型号的模块支持的运营商不同,因不断推出新的模块型号,故此处不再一一罗列;请登录 www.openluat.com,打开产品中心,根据使用的模块型号自行确认
7.2、是否支持中国港澳台、外国运营商
- 2G模块:只要有2G网络的地区运营商,理论上都支持,建议在当地实际测试下;目前在中国港澳台、印度、中东、美国、非洲、德国都实地测试过可用
- 4G模块:根据模块型号支持的频段,参考:http://oldask.openluat.com/article/946 各个国家和地区的网络频段,自行判断是否可以使用
例如,要判断Air720H是否在其他国家可以使用,首先打开http://www.openluat.com/Product/file/asr1802/Air720x(3229)%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9D%97%E7%A1%AC%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%89%8B%E5%86%8CV1.27.pdf找到Air720H支持的频段,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uU2vihsI-1619422566529)(https://oldask.openluat.com/image/show/attachments-2020-01-8Opab9VQ5e0ee32c936da.png “undefined”)]
可以得知:Air720H支持B1、B3、B5、B8、B38、B39、B40、B41
那么Air720H可以在哪些国家使用呢?分如下几种情况讨论
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZcAKb6E-1619422566530)(https://oldask.openluat.com/image/show/attachments-2020-01-Ag5kfJYa5e0ee38a73945.png “undefined”)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NwhwZU5w-1619422566530)(https://oldask.openluat.com/image/show/attachments-2020-01-mNG0jtwC5e0ee3a9dd309.png “undefined”)]
注意:一旦确定可用,需要参考本文的APN设置章节,设置为正确的APN,才能正常上网
7.3、支持SIM卡热插拔吗
支持
- 2G模块
1) 默认打开了软件检测SIM卡热插拔功能,但是软件检测有延时,详情参考AT手册中的AT+AMSDTC命令
2) 支持硬件检测SIM卡热插拔功能,硬件检测无延时,但是默认关闭了此功能,如果需要打开,参考AT手册中的AT+CSDT命令【AT版本发送AT+CSDT=1命令,Lua版本执行ril.request(“AT+CSDT=1”)】,同时硬件电路上要接SIMDET脚
- 4G模块
1) 不支持软件检测SIM卡热插拔功能
2) 支持硬件检测SIM卡热插拔功能,硬件检测无延时,但是默认关闭了此功能,如果需要打开,参考AT手册中的AT+CSDT命令【AT版本发送AT+CSDT=1命令,Lua版本执行ril.request(“AT+CSDT=1”)】,同时硬件电路上要接USIM_CD脚
7.4、找不到SIM卡
2G模块:主动上报+CPIN: NOT INSERTED或者AT+CPIN?查询返回+CPIN: NOT INSERTED
4G模块:主动上报+CPIN: SIM REMOVED或者AT+CPIN?查询返回+CME ERROR: 10
都表示找不到SIM卡,按照如下步骤排查:
- 进入飞行模式后,会导致找不到sim卡,确认下是否为进入飞行模式所致。AT固件发送AT+FCUN=0命令、Luat版本执行net.switchFly(true)接口都会导致进入飞行模式,从而不识卡。请检查是否自己的代码逻辑控制了主动进入飞行模式;请检查自己的代码应用逻辑
- 确认卡是否插反、插错。例如合宙4G模块pcie底板,因防呆设计不友好,很容易出现sim卡插反的问题,见下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ry0OABRB-1619422566531)(https://oldask.openluat.com/image/show/attachments-2020-02-uCSSInC15e437c7292d22.png “undefined”)]
- 确认模块是否支持所使用的运营商的卡:2G模块仅支持移动和联通卡,4G模块型号不同支持的运行商也不同
- 对比交叉测试,卡插到手机上,是否正常:
1) 如果不正常,检查下卡片是否变形、氧化,用卡背贴胶带、胶水灌注、擦拭卡片等方式再尝试,如果都不行,考虑换卡吧
2) 如果正常,把此卡放到其他板子上,如果其他板子正常,可能属于板子单体问题;如果其他板子也不正常,应该是板子硬件设计问题。参考第5步分析
- 其余情况参考:http://oldask.openluat.com/article/960 进一步分析,如果不确定波形是否正确,请拍下测量的波形视频,发出来分析
- 发出来SIM卡部分的原理图给合宙FAE分析
7.5、Luat版本为什么开机读出的ICCID、IMSI为空
Lua版本的脚本运行起来,检测到sim卡之后,会发送AT命令查询iccid、imsi,从脚本开始运行到查询到结果,一般需要5秒钟【只是经验值,不要用做程序设计依据】,如果在查询到结果之前使用sim.getIccid()、sim.getImsi()接口读取,就为返回空;
用户开发项目时,可以根据项目的应用场景,分别做不同处理,比较典型的两种场景如下:
- 如果开机后过一段时间(这个时间超过开机查询iccid、imsi的时间,例如连接后台服务器)才会用到iccid和imsi,则用到时直接调用读取接口即可,因为这个时间点肯定已经查询到结果
- 如果在查询到iccid、imsi之后,立即执行某个动作,则需要在自己写的脚本中订阅查询结果的消息,参考如下代码
sys.subscribe(“IMSI_READY”, function() end) --iccid也是IMSI_READY的消息
sys.subscribe(“IMSI_READY”, function() end)
7.6、可以读到SIM卡的手机号码(MSISDN)吗
目前有两种方式可以获取本机号码:
- sim卡出厂时,可以写入自己的手机号码到sim卡中,但这不是强制要求的。在中国,运营商制卡时基本上都不会写入手机号码。如果可以确认自己用的sim卡中已经存储了手机号码,可以通过如下方式读取手机号码:
1) AT版本,发送AT+CNUM命令查询
2) Luat版本,开机后调用sim.setQueryNumber(true)打开查询本机号码功能,会自动查询本机号码;可通过sim.getNumber()获取查询结果
- 模块开机后,sim卡向短信平台发送一条短信(短信内容中可以包含imei或者imsi),短信平台收到短信后,识别手机号码后,可通过如下方式通知模块手机号码:
1) 短信平台下发一条短信给模块,短信内容中包含手机号码,模块收到后解析出号码
2) 模块连接一个后台服务器,后台服务器与短信平台相连,根据imei或者imsi读取到对应的手机号码,然后把这个号码,下发给imei或者imsi对应的模块
7.7、虚拟卡(VSIM)
虚拟卡是一种“将sim卡数据写入模块flash,实现和实体卡同样网络功能”的纯软件技术,相比实体卡存在“省去卡槽的硬件设计、不会出现掉卡、不会因为卡被盗而产生的巨额流量”的优点
目前合宙已不生产新的虚拟卡模块,之前已经出货的虚拟卡模块会持续维护。部分2G和4G模块支持贴片卡(ESIM卡),有需要的话,可咨询购买
虚拟卡使用时常见问题如下:
- 仅2G模块支持虚拟卡,虚拟卡有专门的模块型号,只能在合宙工厂写入虚拟卡数据
- 不支持虚拟卡的2G模块,客户不能自行写入虚拟卡数据支持虚拟卡功能
- 支持虚拟卡的模块,如果烧录了Luat版本的旧版本lod或者tts的lod,可能会擦除虚拟卡数据,导致虚拟卡功能失效。对于必须使用Luat版本tts lod的情况,建议使用Air202F或者Air268F支持虚拟卡的模块,可以烧录Luat版本的8955F lod,不会擦除虚拟卡数据
- 实体卡和虚拟卡同时存在时,优先使用实体卡,不支持实时切换功能
- 虚拟卡为纯流量卡,不支持语音和短信业务
- 虚拟卡也是运营商提供的一种技术,资费和实体卡一致
7.8、贴片卡(ESIM)
目前,支持贴片卡的模块型号列表如下:
- 2G模块:Air202支持
- 4G模块:Air720SL支持
7.9、合宙物联网卡(虚拟卡、贴片卡、实体卡)商务问题
物联网卡管理平台地址:sim.openluat.com
商务问题列表如下,有需要请联系淘宝客服处理:
- 存在试用期,计费规则如下:
1) 测试期:物联网卡在申请开通时,可自由选择是否开通测试期,测试期最长为三个月,即时生效,测试期以合同订单签订的失效日期为止,测试期结束后自动进入沉默期。在测试期内,有2M/月测试流量,不超过该流量不计费,超过2M则当月按照0.29元/MB(10M及以上套餐)、1元/MB(2M及5M套餐)进行计费,且测试期不享受流量池。(测试期流量一般用于设备前装质量检测)
2) 沉默期:测试期后,进入沉默期,最长六个月,沉默期用户产生流量后直接激活,并进入流量池。沉默期结束后仍未激活,强制激活
3) 计费期:物联网卡从激活之日期,根据购买流量时长(以月为计时单位)在系统内以套餐生效日期、套餐失效日期呈现,即物联网卡的有效使用期限,用户如需长期使用物联网卡应在套餐失效期前进行续费,以延长套餐的有效期,避免因套餐失效而停机
- 欠费后不可使用,到期前提供iccid或者imei进行续费;过期超过2个月不能续费,自动销号
- 支持流量池、支持转移卡的归属账号
- 平台更新有24小时的延迟,可能会造成“已用流量为0、流量不符、已正常使用却提示沉默期等物联网卡状态不符”的问题,出现此类问题,请24小时之后,再登录平台查看
7.10、想使用语音短信业务怎么办
合宙出售的物联网卡为纯流量卡,不支持语音和短信业务。必须去运营商办理实名认证的卡才能使用
7.11、实体卡如何防盗
无法防盗,建议使用贴片卡
7.11、实体卡如何防盗
无法防盗,建议使用贴片卡
7.12、为什么SIM VCC没有供电
sim_vcc不是持续供电,是间歇性供电,只有卡在位才持续供电
7.13、为什么Luatools提示“可能是虚拟卡数据错误,请重启几次,如果一直出现此提示,请联系管理员”
Luatools有一个检测虚拟卡数据是否完整的功能,但是此功能无法做好,如果出现此提示,根据如下情况分析:
- 如果模块不支持虚拟卡,直接忽略此提示,属于误报
- 如果模块支持虚拟卡,并且当前没有外置实体卡,如果上网正常,属于误报;如果上网不正常,提供日志给合宙技术支持人员分析
7.14、如何判断sim卡所属运营商
参考:http://doc.openluat.com/article/556/0
八、天线射频问题
常见的模块天线有如下几种:PCB天线、FPC天线、弹簧天线、棒状天线、外置吸盘天线
常见的GPS天线有:陶瓷天线
本章节描述的是常见的注意事项,具体到一款产品遇到的天线问题,还是要分析产品的内部结构,需要拍张清晰的产品内部以及外壳照片发给合宙技术支持人员分析
8.1、天线设计和调试
任何一款规范的产品,天线设计至关重要,一定要到正规的天线厂,针对整机,对天线做匹配性调试。如果天线没有经过调试,在使用过程中会出现信号不稳定、驻网失败、连接服务器断线等网络问题
任何一款规范的产品,天线设计至关重要,一定要到正规的天线厂,针对整机,对天线做匹配性调试。如果天线没有经过调试,在使用过程中会出现信号不稳定、驻网失败、连接服务器断线等网络问题
客户如果没有条件做调试,建议选择抗干扰强的天线,下面分情况讨论:
- 模块天线:PCB天线、FPC天线、弹簧天线,必须要到正规天线厂做匹配性调试
- 模块天线:棒状天线、外置吸盘天线,如果没有条件调试,一定要选择抗干扰强,稳定性好的天线,这样射频受到的干扰会比较小
- GPS陶瓷天线,如果大板和陶瓷天线面积都比较小,一定要去正规天线厂调试。如果面积都比较大,实在没条件调试,可以不去调试
建议天线选配按照如下顺序执行:
- 有条件到天线厂调试天线的话,一定要去天线厂调试
- 没条件在天线厂调试天线的话,可以选择合宙官方提供的天线或者其他渠道购买的天线。注意:直接购买现成的天线,产品的射频性能无法发挥到最优,购买天线时,价格越贵,性能越好,按照自己的预算去选择,不建议选择差的天线。差天线在网络环境较差的情况下,是很容易出现信号不稳定、驻网失败、连接服务器断线等网络问题。如果要选择合宙官方的天线,打开:m.openluat.com后,进入“周边工具”页面选购
8.2、天线使用环境
天线调试好之后,使用环境对天线性能也有影响,需要注意的问题如下:
- 模块天线:不能放在全封闭或者半封闭的金属盒子里,对天线性能影响很大
- GPS天线:天线上方不能有金属物质,不能有较厚的遮挡物(例如几厘米的塑料盒子肯定不行,1毫米的塑料盒子可以)
8.3、2G模块测试传导灵敏度时,到-107.5左右GPRS就会掉线
GSM灵敏度-108左右,正常应该不会掉线,可能是有干扰导致灵敏度下降,或者线损没有补上
8.4、2G模块天线为什么和GND短路了
设计如此,这是正常表现;天线和GND之间有电感,所以测试为0欧姆
8.5、2G模块和4G模块天线通用吗
4G天线可以用到2G上,但是2G天线不建议用到4G上
8.6、4G模块如果支付辅天线,如何使用辅天线
合宙大部分的4G模块不支持辅天线,个别模块支持辅天线,对于支持辅天线的模块来说,仅使用主天线可以满足日常基本需求,如果要求射频高性能发挥到极致,可以同时使用主天线和辅天线
8.7、天线厂调试天线时,如何提供来电自动接听的软件
- AT版本:开机后发送ATS0=1命令到模块,接收到来电,振铃1声后会自动接听
- Luat版本:在自己的脚本中添加如下代码
1) 2G模块
require “cc”
sys.subscribe(“CALL_INCOMING”, function(num) cc.accept(num) end)
2) 4G模块
ril.regUrc(“RING”, function() ril.request(“ATA”) end)
九、信号问题
9.1、没有信号(信号弱)
- 参考7.4章节检查下是否不识卡
- 参考第八章确认天线是否匹配
- 检查天线是否连接、天线连接座子的接口是否正确、天线是否损坏【换天线确认】
- 没有注册上网络(参考第十章节),也可能会导致没有信号
- 静电击穿等原因可能导致模块射频损坏【可以同一张卡,用其他模块对比测试,初步确认此问题】
9.2、信号强度和网络数据业务的稳定性关系
信号强度和dBm的对应关系为:信号强度*2-113 = dBm值
信号强度的查询方法:
- AT版本:通过AT+CSQ查询,取值范围参考AT手册【手册中搜索AT+CSQ】
- Luat版本:通过net.getRssi()返回信号强度值
信号强度仅仅表示当前驻留小区的网络覆盖程度,一般来说,信号强度和网络通信稳定率是正比关系。信号强度差,网络数据通信相对就不稳定;但不能绝对的认为信号强度好,网络数据通信就一定稳定,和网络是否拥堵等其他因素也有关系;经验值如下:
CSQ值小于10,可以认为网络较差
CSQ值在10和25之间,可以认为网络中等
CSQ值大于25,可以认为网络较好
十、网络注册和附着问题
10.1、无法注册网络、注册网络慢、无法附着网络、附着网络慢
- 参考7.4章节检查下是否不识卡
- 检查下sim卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】
- 参考第八章确认天线是否匹配
- 检查天线是否连接、天线连接座子的接口是否正确、天线是否损坏【换天线确认】
- 换卡、换板子对比测试,确保使用正常的硬件和sim卡测试
- 参考7.1和7.2章节,确保模块支持当地的网络制式
- 偏远地区的网络覆盖可能不全,或者产品的天线射频指标不合格,想办法用手机对比测试;用手机对比测试时,注意手机要设置为和模块同样的网络制式,同时借助Cellular-Z工具确认,详情参考:https://oldask.openluat.com/article/1002
- 环境因素(车库、地下室、电梯等)
- 确认下是否所有设备在同一地点表现是否一致,有可能是伪基站造成的
10.2、为什么在一些车库里面手机接打电话正常,但是模块注册网络失败呢
首先确保手机和模块使用的网络制式相同,例如模块是移动2G网络,手机也要在移动2G网络下,这样才有对比意义
10.3、为什么有些SIM卡在2G模块上无法注册网络
0029版本开始的core固件,支持了中国移动的一种新标准的物联网卡,如果遇到此问题,确认一下版本是否为0029以及之后的版本,如果不是,烧录最新core固件测试确认下
10.4、同一地点,同一张卡,手机可以注册上4G网络,为什么4G模块不可以
之前有客户遇到过类似问题,均为“测试地点,4G信号太弱”引起的,手机上的天线增益比4G模块大板上的天线增益要高,所以手机正常,4G模块不正常。4G模块更换高增益天线后,也变得正常
10.5、4G模块使用2G卡,注册网络很慢
不同型号的4G模块,支持的网络频段也不相同。
以支持频段最多的4G模块Air720H为例,同时支持4G、3G、2G网络,开机搜索网络时,默认软件是按照4G、3G、2G网络的顺序依次搜索,等搜索到2G网络时,可能已经过去几分钟了(例如我在上海办公室,使用Air720H模块,3分钟左右才能搜索到2G网络),对于使用2G卡的用户或者要使用2G网络的应用场景来说,这种速度简直是不能忍受。那么如何加快搜索2G网络的速度呢,有如下两种方式:
|
优势 |
劣势 |
全网搜索,减少搜索4G、3G网络的时间,通过每次开机发送如下AT命令实现:
AT+MEDCR=0,8,1
AT+MEDCR=0,17,240
AT+MEDCR=0,19,1 |
兼容各种网络环境,注册2G网络的速度可以稍微变快一点儿(例如,我这边Air720H模块,发送这三条指令前,测试了4次,分别为:174秒、118秒、147秒、136秒;发送这三条指令后,测试了4次,分别为240秒、110秒、112秒、112秒) |
2G的驻网速度还是没有质的提升 |
仅搜索2G网络,通过开机发送如下AT命令实现:
AT*BAND=0,74 |
2G网络注册快,和2G模块的驻网速度基本一致(例如,我这边Air720H模块,基本上都是在20秒以内) |
设置AT命令后,模块就只能使用2G网络了;以后如果要使用默认网络配置,必须发送AT+RSTSET(发送后,会自动重启)命令来恢复出厂设置 |
10.6、4G模块如何设置网络频段
- 仅搜索2G网络
1) AT版本:开机发送AT* BAND=0,74命令设置
2) Luat版本:main.lua中sys.init(0,0)前添加一行代码ril.request(“AT*BAND=0,74”)
- 仅搜索4G网络
1) AT版本:开机发送AT* BAND=5,74,129,480,149命令设置
2) Luat版本:main.lua中sys.init(0,0)前添加一行代码ril.request(“AT*BAND=5,74,129,480,149”)
注意:这些设置生效后,会保存到flash中,不会丢失;如果仅仅是测试需要,在测试结束之后,AT版本通过发送AT+RSTSET命令,Luat版本通过执行一行代码ril.request(“AT+RSTSET”)来恢复出厂设置
更多使用方式参考:http://oldask.openluat.com/article/130 和AT手册
10.7、如何判断4G模块注册的是什么网络
- AT版本,有如下两种方式可以查询
1) 当注册的网络类型发生变化时,会通过urc上报^MODE:,
;其中
表示当前注册的网络类型:
为3时表示2G网络
为5时表示3G WCDMA网络
为15时表示3G TD网络
为17时表示4G网络
为其余值时表示未注册网络
2) 发送AT*BANDIND?命令主动查询,返回的查询结果格式为:*BANDIND: [,,]
;其中
表示当前注册的网络类型:
为0、1、3时表示2G网络
为2、4、5、6、8时表示3G网络
为7时表示4G网络
为其余值时表示未注册网络
- Luat版本,有如下两种方式可以查询
1) 日志中搜索MODE,搜索结果的格式为:MODE:,
;其中
表示当前注册的网络类型:
为3时表示2G网络
为5时表示3G WCDMA网络
为15时表示3G TD网络
为17时表示4G网络
为其余值时表示未注册网络
2) 调用net.getNetMode()接口,返回值表示当前注册的网络类型:
返回值为0表示未注册网络
返回值为1、2时表示2G网络
返回值为3时表示3G TD网络
返回值为4时表示4G网络
返回值为5时表示3G WCDMA网络
详情可参考AT手册和 http://oldask.openluat.com/article/130 帮助理解
10.8、各国网络频段汇总
参考:
https://oldask.openluat.com/article/946
http://bw.openluat.com/#/inter_view 这个地址也可以备注上。
10.9、网络小区参数
在对接后台时,有些后台会要求终端上传一些小区参数,例如:
cell id:小区ID
ecl、ce level:无线信号覆盖等级
pci:物理小区标识
sinr:信号与干扰加噪声比
rsrp:参考信号接收功率
tac:基站跟踪区域码
strength:信号强度,通过AT+CSQ或者AT+CESQ获取
一般来说,只有4G小区才具有这些参数信息,我们以4G小区为例,来说明如何获取这些参数,AT手册中有一个+EEMLTESVC的上报,上报的数据中包含了这些参数;有如下两种方式可以触发+EEMLTESVC上报:
- 通过AT+EEMOPT=1设置为主动查询模式,在需要查询时,发送AT+EEMGINFO?查询
- 通过AT+EEMOPT=2,value设置为主动上报模式,根据value设置的上报周期定时上报
+EEMLTESVC中的参数和我们需要的参数对应关系参考下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JdUDYRSp-1619422566532)(https://oldask.openluat.com/image/show/attachments-2020-03-dJlpDc0D5e7ef832f1ee1.png “undefined”)]
ecl、ce level:无线信号覆盖等级,没有现成的AT命令可以直接查询,可参考下图自行计算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BoxeAmCj-1619422566532)(https://oldask.openluat.com/image/show/attachments-2020-03-b34z2byh5e7ef8581b4fd.jpg “undefined”)]
十一、APN设置和PDP激活问题
11.1、2G模块如何设置APN
1. AT版本,固件包含各国公网APN列表,但是列表无法保证完整性和正确性,除中国大陆外,其他国家和地区还是建议用户使用AT+CSTT或者AT+SAPBR命令主动设置正确的APN
1) 如果在中国大陆使用中国移动的公网卡,根据应用场景不同,可选是否设置APN
A. 如果socket单连接,在AT+CGATT?附着上数据网络之后,可以不设置APN,直接使用AT+CIPSTART命令去连接服务器
2) 如果在中国港澳台或者国外使用,请咨询SIM卡供应商获取APN信息,使用AT+CSTT或者AT+SAPBR命令主动去设置正确的APN
3) 如果是专网卡,无论在什么国家和地区使用,请咨询SIM卡供应商获取APN信息,使用AT+CSTT或者AT+SAPBR命令主动去设置正确的APN
2. Luat版本,固件包含各国公网APN列表,但是列表无法保证完整性和正确性,除中国大陆外,其他国家和地区还是建议用户使用link.setApn(apn, userName, password)主动设置正确的APN
1) 如果在中国大陆使用中国移动的公网卡,可以不主动设置APN
2) 如果在中国港澳台或者国外使用,请咨询SIM卡供应商获取APN信息,使用link.setApn(apn, userName, password)主动去设置正确的APN
3) 如果是专网卡,无论在什么国家和地区使用,请咨询SIM卡供应商获取APN信息,使用link.setApn(apn, userName, password)主动去设置正确的APN
11.2、4G 模块如何设置APN
- AT版本
1) 如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置
2) 如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后参考:http://oldask.openluat.com/article/913 进行设置,设置成功后,后续用到CSTT或者SAPBR设置APN时,必须再次传入正确的APN参数,才能正常使用
- Luat版本
1) 如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置
2) 如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后在main.lua尽可能靠前的位置调用link.setAuthApn(prot,apn,user,pwd)进行设置【注意:第一次设置成功之后,软件会自动重启,因为重启后才能生效】
11.3、PDP激活失败
参考10.1章节
11.4、为什么4G模块专网卡连接服务器失败
- 参考11.2章节,检查APN参数是否设置正确
- 如果有其他厂家的模块,对比测试下是否连接正常
- 如果无法百分百保证服务器配置没问题,最好在服务器端用wireshark抓包,或者在服务器上安装一个第三方工具,开启一个服务器端口来对比测试
十二、socket问题
12.1、连接服务器失败
- 服务器必须是公网地址
- 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
- 如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能)
- 2G模块不要使用中国联通卡
- 检查下模块信号、网络注册、网络附着、PDP激活状态
- 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】
- 提供日志给合宙技术支持人员
1) 2G模块:使用合宙技术支持人员提供的debug core文件,参考:http://oldask.openluat.com/article/63 抓日志
2) 4G模块:参考1.2.6章节中的1和2,提供Luatools下的trc文件和sdl文件
12.2、数据收发延迟大、速度慢、经常失败、掉线断开
- 检查下是否存在代码逻辑错误,导致异常
- 检查下是否不断重启,导致异常
- 检查下服务器网络是否稳定,不要用内网穿透方式搭建服务器
- 检查下使用环境是否网络覆盖不好,例如车库、地下、电梯、山区等
- 2G模块不要使用中国联通卡
- 检查下模块信号、网络注册、网络附着、PDP激活状态
- 排查是否为设备天线问题:发出来设备的天线调试指标参数给合宙技术支持人员;曾经有一个客户天线指标明显有问题,导致10几个小时出现30次左右掉线;后来重新调试天线之后,40个小时出现几次掉线
- 如果经常出现连接被动断开:
1) 如果直接使用的是tcp udp socket连接,检查下心跳包的频率,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
2) 如果使用的是mqtt连接,检查下mqtt keep alive的时间,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
3) 如果使用的是mqtt连接,检查下是否在1.5倍的mqtt keep alive的时间,没有成功发送数据到服务器,就会被被服务器主动断开,这种情况一般都是发送数据超时引起的
- 排查是否为网络问题:如果同一地点的所有设备都有问题,可能和网络环境有关系;使用手机设置为同样的网络模式,对比测试确认下;或者把设备移动到其他距离此地点比较远的地方对比测试。【注意:目前2G网络环境在逐步恶化,在网络较好的情况下,24小时出现10次以内的掉线都可以认为正常,仅仅作为经验值参考】
- 如果要降低掉线率,可通过如下方式设置【注意:在网络环境不变的情况下,降低掉线率意味着会增加响应延时】
1) 2G模块
A. AT版本:
a) 通过AT+TCPUSERPARAM命令设置较大的重传次数和重传间隔
b) 如果使用的是MQTT,除了执行第a)步操作之外,还可以通过AT+MCONNECT命令增大MQTT KEEP ALIVE的时间来降低掉线率
B. Luat版本:
a) 调用socket.setTcpResendPara接口设置较大的重传次数和重传间隔
b) 如果使用的是MQTT,除了执行第a)步操作之外,还可以通过调用mqtt.client接口增大MQTT KEEP ALIVE的时间来降低掉线率
2) 4G模块
A. AT版本:
a) 目前还不支持AT设置重传次数和重传间隔
b) 如果使用的是MQTT,除了执行第a)步操作之外,还可以通过AT+MCONNECT命令增大MQTT KEEP ALIVE的时间来降低掉线率
B.Luat版本:
a) 目前还没有接口支持设置重传次数和重传间隔
b) 如果使用的是MQTT,除了执行第a)步操作之外,还可以通过调用mqtt.client接口增大MQTT KEEP ALIVE的时间来降低掉线率
- 排查是否设备单体问题:如果同一地点,某些设备正常,某些设备异常,按照如下几种情况分析
1) 分析正常设备和异常设备的使用环境是否相同:
A. 如果不同,例如异常设备固定在钢制墙壁上,正常设备放置在桌子上,钢制墙壁可能对天线射频有干扰,将异常设备和正常设备放置在同样的使用环境中,再对比测试
B. 如果相同,参考第2)步
2) 分析正常和异常的设备,驻留的小区是否相同:
A. 如果相同,重点排查异常设备的天线射频部分,分析不出结果的话,异常设备寄给合宙分析
B. 如同不同,多测试几次,确认下,是不是在异常小区内很容易出问题,如果异常小区很容易出问题,可能就是小区拥堵造成的
- 提供日志给合宙技术支持人员
1) 2G模块:使用合宙技术支持人员提供的debug core文件,参考:http://oldask.openluat.com/article/63 抓日志
2) 4G模块:参考1.2.6章节中的1和2,提供Luatools下的trc文件和sdl文件
12.3、如何发送大量数据
- AT版本:发送数据的AT命令,例如AT+CIPSEND、AT+MQTTPUB、AT+HTTPDATA都有支持的最大长度,参考AT手册,根据这些AT命令单次发送支持的最大长度,MCU端拆包发送
- Luat版本:lib中socket、mqtt、http功能模块对数据发送进行了封装,支持一次传入大量数据【只要内存够用】,lib中自动分包进行发送
12.4、为什么频繁收发数据时,会导致整个模块系统响应变慢
模块的主频是有限的,如果一直频繁收发数据,CPU频繁的处理数据收发,肯定会导致对其他任务的处理有延时。
如果是Luat版本二次开发,这种表现会更加明显,因为所有Luat应用是一个单task应用,频繁的收发数据,会导致这个单task在频繁的处理数据收发消息,从而影响其他功能的及时响应。可参考:http://oldask.openluat.com/article/930 辅助理解
12.5、是否支持长连接
UDP协议的socket不支持长连接,TCP协议的socket支持长连接;长连接需要在代码中实现断开自动重连的控制逻辑,以及实现定时发送心跳的业务逻辑
12.6、快发和慢发有什么区别
UDP协议本身没有可靠性保证,所以不存在快发慢发之说,可以认为UDP协议的socket一直是快发模式
TCP协议发送数据时,数据发送出去之后,必须等到服务器返回TCP ACK包,才认为数据发送成功,在网络较差的情况下,这种ACK确认就会导致发送过程很慢。从而导致用户程序后续的AT处理逻辑一直处于等待状态。例如执行AT+CIPSEND动作发送一包数据后,接下来要执行AT+QTTS播放TTS,但是CIPSEND一直等了1分钟才返回SEND OK,这时AT+QTTS就会一直等待1分钟,可能不是程序中想看到的。此时就可以设置为快发模式,AT+CIPSEND可以立即返回一个结果,此结果表示“数据是否被缓冲区所保存”,从而不影响后续其他AT指令的及时执行
AT版本可以通过AT+CIPQSEND指令、Luat版本可以通过socket.setSendMode接口设置发送模式为快发或者慢发
快发模式下,在core中有一个1460*7=10220字节的缓冲区,要发送的数据首先存储到此缓冲区,然后在core中自动循环发送。如果此缓冲区已满,则AT+CIPSEND会直接返回ERROR,socket:send接口也会直接返回失败
同时满足如下几种条件,适合使用快发模式:
- 发送的数据量小,并且发送频率低,数据发送速度远远不会超过core中的10220字节大小;没有精确地判断标准,可以简单的按照3分钟不超过10220字节来判断;曾经有一个不适合快发模式的例子如下:用户使用Luat版本的http上传一个几十K的文件,设置了快发模式,导致一直发送失败,因为循环的向core中的缓冲区插入数据,插入数据的速度远远超过发送数据到服务器的速度,所以很快就导致缓冲区慢,再插入数据时,就直接返回失败
- 对每次发送的数据,不需要确认发送结果
- 数据发送功能不能影响其他功能的及时响应
注意:4G Luat版本没有快发慢发的设置,因为4G Luat版本直接使用了api的方式来实现socket,不影响其他功能的及时响应
12.7、支持发送什么格式的数据
任何数据格式都支持
- AT版本:建议使用AT+CIPSEND命令时,指定数据长度,此方式支持任何格式的数据发送,使用方法参考AT手册
- Luat版本:socket的send接口,支持任何格式的数据发送,参数为string类型,其他table等数据类型,都要转换为string类型之后,才能发送
12.8、如何查询错误码
参考:http://oldask.openluat.com/article/61
12.9、最多同时支持多少个连接
参考:http://oldask.openluat.com/article/61
- 2G模块:非SSL连接最多8个;在内存空间充足的情况下,SSL连接个数没有限制
- 4G模块:AT版本最多8个连接;Luat版本最多10个连接
注意:Luat版本的lib中的一些功能模块会用到socket连接,例如update、agps、lbsLoc、errDump;同时支持的连接个数包含lib中的这些连接;例如在某个时间点,update和lbsLoc在工作,会占用2个socket连接,这个时间点用户的应用脚本中最多能够同时使用的连接个数就少2个了
12.10、是否支持websocket、是否可以做server使用
不支持websocket
不可以做server使用
12.11、为什么要发送心跳包(如何检测连接活性)
因为基站资源有限,如果不发心跳包保活,基站会主动断掉链路,回收资源,模块和服务器无感,并不知道链路已经断开。建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
12.12、为什么有时连接断开会收到提示;有时不可以收到提示,必须等到发送数据时才能检测到断开
能收到提示的情况,通常是服务器主动断开连接
不能收到提示的情况,可能是链路被基站断开,或者其他意外情况导致【例如服务器网线被拔掉】,模块和服务器无感知;此时只能通过发送数据超时来感知
12.13、如何统计流量
运营商按照ip包来统计流量,ip包包含:ip包头+tcp包头+用户数据,以IPv4为例:
ip包头包含固定的20字节+可选的4字节,至少20字节
tcp包头包含固定的20字节+可选的4字节,至少20字节
用户数据就是用户能够感知到的数据内容了,如果直接使用socket,就是用户感知的数据;如果使用http、mqtt、ssl,这部分数据就不是用户能够感知的原始数据了,http会加上http包头,mqtt会加入mqtt的包裹部分,ssl会加密数据
tcp数据收发时,有ack确认机制,例如设备发数据给服务器后,还会收到服务器返回的tcp ack包,这个tcp ack包(至少40字节)也是计算在流量之内的。接收到服务器下发的数据时,设备也会回复一个tcp ack包,同样这个ack包仍然计算在流量之内
另外,socket连接以及断开连接,都有多次数据收发,这部分也会消耗流量
例如有一个tcp socket连接,连接成功后,每分钟设备发送2字节的心跳数据到服务器,服务器收到数据后,再回复2字节的心跳应答数据。这个过程中,每分钟消耗的流量至少有42(设备发送)+40(服务器回复ack)+42(服务器发送)+40(设备回复ack)=164字节,实际处理中,服务器回复ack和服务器发送可能合并成一个IP包42字节,这样的话,至少也要42+42+40 = 124字节。这是最简单的算法,实际应用中,还要考虑到重传、包头中的可选字节,应该会比这里计算的流量多一些。如果要准确计算,建议在服务器端用wireshark抓包分析
另外一个常见的例子是,为什么通过http下载一个文件,实际消耗的流量比文件本身要多呢?跟上个例子类似,文件本身大小仅仅是用户数据,除了用户数据外,还有如下几部分的流量消耗:
- 连接服务器消耗流量
- http请求时有http头,服务器下发数据时也有http头
- 每包数据都有tcp头和ip头
- 重传也会消耗流量
- 与服务器断开连接也需要消耗流量
12.14、是否支持IPv6
2G模块不支持IPv6
4G模块支持IPv6协议,rndis和ppp应用也支持了IPv6,但是Luat版本二次开发和AT版本tcp、http、mqtt指令没有使用IPv6
12.15、模块IP地址
模块激活pdp后,模块端显示的ip地址是运营商分配的内网ip
模块与服务器连接成功后,在服务器端显示的ip地址是运营商分配的公网ip地址
对于同一个模块来说,这两个ip地址都是会变化的,例如同一个模块:
- 第一次激活pdp后,模块端显示的ip地址为:10.155.141.25,与服务器连接成功后,服务器端显示此模块的ip地址和端口为:117.132.197.166:48191,与服务器断开再重连服务器,此时服务器端显示此模块的ip地址和端口为:117.132.197.166:48492
- pdp主动去激活,然后再重新激活,模块端显示的ip地址为:10.41.220.39,与服务器连接成功后,服务器端显示此模块的ip地址和端口为:221.178.127.225:40876,与服务器断开再重连服务器,此时服务器端显示此模块的ip地址和端口为:221.178.127.225:40787
所以这两种ip地址,对模块来说没有多大意义,不要用他们来标识模块,如果要标识模块,请使用模块imei
12.16、数据接收缓存问题
- AT版本:使用CIPSTART建立的socket连接,接收数据没有缓存机制,收到数据后,立即通过AT口输出,每包最多1460字节;例如服务器下发一个70KB的文件,模块会连续收到多个包,通过AT口连续多次输出
- Luat版本:有缓存机制,内存中有一个缓存表,缓存表有256个元素,每个元素存储收到的一包数据(最多1460字节),所以最多可以缓存256*1460字节,所有元素都被占用时,socket收到新数据时,会清空缓存表,重新开始缓存;需要读取数据时,通过socket:recv接口主动读取即可
注意:缓存表位于内存中,断电或者重启后,缓存表中的数据会被清空;虽然缓存表可以缓存很多数据,但是建议收到数据时,还是要及时读取出来;缓存表不断缓存数据,会占用大量内存,在项目内存紧张的情况下,很容易出现内存不足问题导致重启
12.17、客户示例:2G模块3秒上传一次GPS位置数据,轨迹丢失问题
现在的2G网络环境无法保证"任何时间任何地点,都能及时成功的传输数据",延时和发送失败的问题,肯定是存在的,如果要比较完美的行驶轨迹,需要在应用层设计好数据缓存和数据补传工作,注意事项如下:
- 发送当前一包数据时,在返回发送结果之前,新的数据包需要缓存起来
- 发送失败的数据包缓存起来
- 缓存数据的条数可以设置一个最大值,超过这个最大值,根据业务需要,丢弃一些缓存数据,例如丢弃最早的数据
- 如果协议允许,可以在一条报文中发送多条已缓存的数据
- 连接断开或者数据传输失败时,做好重连动作
12.18、数据透传时,会丢失前面的一部分数据
确认下是否收发数据前是否唤醒了模块
十三、http问题
13.1、是否支持HTTPS
支持,TLSV1.2
- 2G模块:必须使用带有ssl功能固件才能支持
支持如下四种加密套件:
TLS_RSA_WITH_AES_128_CBC_SHA (0x2F)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3C)
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3D)
证书支持情况如下:
1) AT版本:不支持证书配置,不校验证书
2) Luat版本:支持证书配置,支持单向认证和双向认证
- 4G模块
支持证书配置,支持单向认证和双向认证
支持如下六种加密套件:
0X0035 TLS_RSA_WITH_AES_256_CBC_SHA
0X002F TLS_RSA_WITH_AES_128_CBC_SHA
0X0005 TLS_RSA_WITH_RC4_128_SHA
0X0004 TLS_RSA_WITH_RC4_128_MD5
0X000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
0X003D TLS_RSA_WITH_AES_256_CBC_SHA256
13.2、为什么频繁请求会失败
支持的http连接总数有限,参考12.9章节
建议一个http连接返回请求结果之后,再去请求下一个连接;不要使用循环定时器方式不断的发起新的http请求
13.3、支持发送什么格式的数据
任何数据格式都支持
- AT版本:使用AT+HTTPDATA命令时,指定数据长度,支持任何格式的数据发送,使用方法参考AT手册
- Luat版本:参考http的api手册,按照参数要求传入数据即可
13.4、如何查询错误码
- AT版本:参考AT手册
- Luat版本:参考 http://oldask.openluat.com/article/61
如果是https连接失败,参考13.1章节,确认下服务器是否支持“模块支持的加密套件”
13.5、如何POST文件
- AT版本:参考AT手册,主要是使用AT+HTTPDATA命令录入文件数据【最长支持100KB】后,发送AT+HTTPACTION=1利用post上传
- Luat版本:参考http的demo,在模块文件系统支持的空间范围内,post的文件没有大小限制
13.6、为什么POST JSON格式的数据会出现失败
检查一下是否忘记设置了"Content-Type: application/json"请求头
- AT版本:参考AT手册,2G模块使用AT+HTTPPARA=“USER_DEFINED”,“Content-Type: application/json”;4G模块使用AT+HTTPPARA=“USERDATA”,“Content-Type: application/json”
- Luat版本:参考http的demo,在head参数中传入{[“Content-Type”]=“application/json”}
13.7、AT版本如何设计HTTP应用逻辑
参考:http://oldask.openluat.com/article/939
13.8、数据接收缓存问题
-
AT版本:有缓存机制,内存中有一个的缓冲区(2G模块300KB,4G模块319499字节),收到数据后,插入此缓冲区,然后通过AT口输出urc,提示收到的数据长度;缓冲区满之后,再收到新数据,会丢弃新收到的数据,并通过AT口输出urc提示出错;需要读取数据时,发送AT+HTTPREAD命令读取,可分段读取,也可全部读取
注意:缓冲区位于内存中,断电或者重启后,缓存表中的数据会被清空;虽然缓冲区可以缓存很多数据,但是建议收到数据时,通过AT+HTTPREAD及时读取出来,以防缓冲区满出错
-
Luat版本:有如下两种缓存机制, http.request接口可以设置使用何种缓存机制,http的demo中有详细示例可供参考
1) 内存缓存:内存中有一个缓冲区,在项目剩余可用内存的范围内,此缓冲区没有大小限制,例如项目可用内存剩余200KB,则此缓冲区的理想最大值是200KB;收到的数据都会缓存到此缓冲区,如果收到的数据超过缓冲区大小,会导致内存不足重启;数据接收完整后,通过回调函数传出缓冲区数据,供用户应用脚本使用
注意:缓冲区位于内存中,断电或者重启后,缓冲区中的数据会被清空;如果接收的数据过多,不建议使用内存缓存的机制,可能会导致内存不足重启
2) 文件缓存:接收到的数据可以保存在文件中,在文件系统剩余空间的范围内,此文件没有大小限制,例如项目剩余文件系统空间200KB,则此文件的理想最大值是200KB;收到的数据都会保存到此文件中,如果收到的数据文件最大值,会导致保存失败,新数据被丢弃;数据接收完整后,通过回调函数传出文件完整路径,供用户应用脚本使用
注意:文件位于文件系统中,断电或者重启后,文件不会被自动清空删除;如果文件已经不再使用,一定要通过os.remove接口将文件删除。否则会一直占用文件系统空间,导致可用文件系统空间变小
13.9、为什么https访问失败
- 确认下使用的core固件是否正确
1) 2G模块AT版本:AirM2M_VXXXX_AT_S_SSL.lod和AirM2M_VXXXX_AT_S_8955F.lod才支持ssl功能
2) 2G模块Luat版本:带SSL或者8955F的lod才支持ssl功能
3) 4G模块:所有版本都支持
- 参考13.1章节,检查服务器是否支持模块支持的加密套件
- 发日志文件给合宙技术支持人员分析
十四、mqtt问题
14.1、是否支持ssl
支持,TLSV1.2
- 2G模块:必须使用带有ssl功能固件才能支持
支持如下四种加密套件:
TLS_RSA_WITH_AES_128_CBC_SHA (0x2F)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3C)
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3D)
证书支持情况如下:
1) AT版本:不支持证书配置,不校验证书
2) Luat版本:支持证书配置,支持单向认证和双向认证
- 4G模块
支持证书配置,支持单向认证和双向认证
支持如下六种加密套件:
0X0035 TLS_RSA_WITH_AES_256_CBC_SHA
0X002F TLS_RSA_WITH_AES_128_CBC_SHA
0X0005 TLS_RSA_WITH_RC4_128_SHA
0X0004 TLS_RSA_WITH_RC4_128_MD5
0X000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
0X003D TLS_RSA_WITH_AES_256_CBC_SHA256
14.2、AT版本如何设计MQTT应用逻辑
参考:http://doc.openluat.com/article/625/0
14.3、有没有免费的MQTT broker可用
合宙有一个lbsmqtt.airm2m.com:1884的broker,没有网页端控制页面,可以用模块和mqtt.fx客户端配合测试
14.4、如何实现掉线自动重连
- AT版本:参考:http://doc.openluat.com/article/625/0 中的异常处理流程
- Luat版本:参考mqtt demo,实现自动重连即可
14.5、频繁掉线是什么原因
- 检查下是否存在代码逻辑错误,导致异常
- 检查下是否不断重启,导致异常
- 检查下服务器网络是否稳定,不要用内网穿透方式搭建服务器
- 检查下使用环境是否网络覆盖不好,例如车库、地下、电梯、山区等
- 2G模块不要使用中国联通卡
- 检查下模块信号、网络注册、网络附着、PDP激活状态
- 排查是否为设备天线问题:发出来设备的天线调试指标参数给合宙技术支持人员;曾经有一个客户天线指标明显有问题,导致10几个小时出现30次左右掉线;后来重新调试天线之后,40个小时出现几次掉线
- 如果经常出现连接被动断开:
1) 检查下mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
2) 检查下是否在1.5倍的mqtt keep alive的时间,没有成功发送数据到服务器,就会被被服务器主动断开,这种情况一般都是发送数据超时引起的
- 排查是否为网络问题:如果同一地点的所有设备都有问题,可能和网络环境有关系;使用手机设置为同样的网络模式,对比测试确认下;或者把设备移动到其他距离此地点比较远的地方对比测试。【注意:目前2G网络环境在逐步恶化,在网络较好的情况下,24小时出现10次以内的掉线都可以认为正常,仅仅作为经验值参考】
- 如果要降低掉线率,可通过如下方式设置【注意:在网络环境不变的情况下,降低掉线率意味着会增加响应延时】
1) 2G模块
A. 加大TCP重传次数和重传间隔:AT版本通过AT+TCPUSERPARAM命令设置;Luat版本通过socket.setTcpResendPara接口设置
B. mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
C. 减少Qos1和Qos2的publish使用,允许的话建议都使用Qos0
2) 4G模块
A. 加大TCP重传次数和重传间隔:目前还不支持
B. mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
C. 减少Qos1和Qos2的publish使用,允许的话建议都使用Qos0
- 排查是否设备单体问题:如果同一地点,某些设备正常,某些设备异常,按照如下几种情况分析
1) 分析正常设备和异常设备的使用环境是否相同:
A. 如果不同,例如异常设备固定在钢制墙壁上,正常设备放置在桌子上,钢制墙壁可能对天线射频有干扰,将异常设备和正常设备放置在同样的使用环境中,再对比测试
B. 如果相同,参考第2)步
2) 分析正常和异常的设备,驻留的小区是否相同:
A. 如果相同,重点排查异常设备的天线射频部分,分析不出结果的话,异常设备寄给合宙分析
B. 如同不同,多测试几次,确认下,是不是在异常小区内很容易出问题,如果异常小区很容易出问题,可能就是小区拥堵造成的
- 提供日志给合宙技术支持人员
1) 2G模块:使用合宙技术支持人员提供的debug core文件,参考:http://oldask.openluat.com/article/63 抓日志
2) 4G模块:参考1.2.6章节中的1和2,提供Luatools下的trc文件和sdl文件
14.6、有没有认证机制
有,每个设备有clientid、username、password
14.7、client id是否允许重复
不允许重复,重复的话,服务器会踢掉上一个相同id的设备
14.8、是否支持通配符
订阅的主题支持通配符,所以建议订阅的主题复杂且不易被猜;建议使用自建服务器,或者项目之间隔离,公网broker不可靠
参考:http://doc.openluat.com/article/600/0
14.9、Qos0、1、2如何选择
应用允许的情况下,建议使用Qos0,Qos1和Qos2会加重网络负担,4G网络还好,特别是2G网络,在网络拥堵和较差的情况下,数据传输的次数越多,掉线的概率就会越高
14.10、AT版本publish json格式的数据,如何处理"
需要转义处理,参考:http://oldask.openluat.com/article/122
14.11、如何查询错误码
- AT版本:参考AT手册
- Luat版本:参考 http://oldask.openluat.com/article/61
如果是mqtt ssl连接失败,参考14.1章节,确认下服务器是否支持“模块支持的加密套件”
14.12、数据接收缓存问题
- AT版本:可通过AT+MQTTMSGSET命令设置是否缓存,详情参考AT手册
1) 不缓存:通过AT+MQTTMSGSET=0设置;收到订阅的publish报文后,立即通过AT口输出主题、payload长度、payload内容,每个报文中支持的payload内容最长1360字节
2) 内存缓存:通过AT+MQTTMSGSET=1设置;内存中有一个缓存表,最多支持缓存4条publish报文;收到订阅的publish报文后,插入缓冲表中的空闲位置,然后通过AT口输出存储位置;缓存表满之后,新收到的publish报文会覆盖最旧的publish报文
注意:缓存表位于内存中,断电或者重启后,缓存表中的数据会被清空;建议收到数据时,通过AT+MQTTMSGGET及时读取出来,以防缓冲区满覆盖丢失数据
- Luat版本:
内存中有一个缓存表,在项目剩余可用内存的范围内,此缓存表没有大小限制,例如项目可用内存剩余200KB,则此缓存表的理想最大值是200KB;收到的publish报文都会缓存到此缓存表,如果收到的数据超过缓存表大小,会导致内存不足重启;需要读取数据时,通过mqtt:receive接口主动读取即可
注意:缓存表位于内存中,断电或者重启后,缓存表中的数据会被清空;虽然缓存表可以缓存很多数据,但是建议收到数据时,还是要及时读取出来;缓存表不断缓存数据,会占用大量内存,在项目内存紧张的情况下,很容易出现内存不足问题导致重启
14.13、为什么mqtt ssl访问失败
- 确认下使用的core固件是否正确
1) 2G模块AT版本:AirM2M_VXXXX_AT_S_SSL.lod和AirM2M_VXXXX_AT_S_8955F.lod才支持ssl功能
2) 2G模块Luat版本:带SSL或者8955F的lod才支持ssl功能
3) 4G模块:所有版本都支持
- 参考14.1章节,检查服务器是否支持模块支持的加密套件
- 发日志文件给合宙技术支持人员分析
十五、远程升级问题
参考:http://oldask.openluat.com/article/916
十六、阿里云问题
16.1、如何连接阿里云
- 2G模块AT版本:必须使用AT_S_SSL或者AT_S_8955F固件才能支持
1) 一机一密参考:http://www.openluat.com/Product/file/rda8955/%E8%BF%9E%E6%8E%A5%E9%98%BF%E9%87%8C%E4%BA%91AT%E6%B5%81%E7%A8%8B%E8%AF%B4%E6%98%8E%EF%BC%88%E4%B8%80%E6%9C%BA%E4%B8%80%E5%AF%86%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88%EF%BC%8CAT_S_TTS%E5%92%8CAT_S%E7%89%88%E6%9C%AC%E4%B8%8D%E6%94%AF%E6%8C%81%EF%BC%8CAT_S_SSL%E5%92%8CAT_S_NOTTS%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81%EF%BC%89.pdf
2) 一型一密参考:http://www.openluat.com/Product/file/rda8955/%E8%BF%9E%E6%8E%A5%E9%98%BF%E9%87%8C%E4%BA%91AT%E6%B5%81%E7%A8%8B%E8%AF%B4%E6%98%8E%EF%BC%88%E4%B8%80%E5%9E%8B%E4%B8%80%E5%AF%86%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88%EF%BC%8CAT_S_TTS%E5%92%8CAT_S%E7%89%88%E6%9C%AC%E4%B8%8D%E6%94%AF%E6%8C%81%EF%BC%8CAT_S_SSL%E5%92%8CAT_S_NOTTS%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81%EF%BC%89.pdf
- 2G模块Luat版本:必须使用带有SSL或者8955F的core固件,参考aLiYun的demo
- 4G模块AT版本
1) 一机一密参考:http://www.openluat.com/Product/file/asr1802/%E8%BF%9E%E6%8E%A5%E9%98%BF%E9%87%8C%E4%BA%91AT%E6%B5%81%E7%A8%8B%E8%AF%B4%E6%98%8E%EF%BC%88%E4%B8%80%E6%9C%BA%E4%B8%80%E5%AF%86%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88%EF%BC%89.pdf
2) 一型一密参考:http://www.openluat.com/Product/file/asr1802/%E8%BF%9E%E6%8E%A5%E9%98%BF%E9%87%8C%E4%BA%91AT%E6%B5%81%E7%A8%8B%E8%AF%B4%E6%98%8E%EF%BC%88%E4%B8%80%E5%9E%8B%E4%B8%80%E5%AF%86%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88%EF%BC%89.pdf
- 4G模块Luat版本:参考aLiYun的demo
16.2、除了阿里云,支持华为云、百度云、腾讯云、OneNet等其他云平台吗
支持,但是需要用户自己开发,没有提供官方例程和lib文件
开发者伙伴发布了一些文章在ask网站,仅供参考,不保证正确和稳定性
华为云:http://oldask.openluat.com/article/904、http://oldask.openluat.com/article/902、http://oldask.openluat.com/article/903
OneNET:http://oldask.openluat.com/article/56、http://oldask.openluat.com/article/893、http://oldask.openluat.com/article/179
百度云、腾讯云:http://oldask.openluat.com/article/177
16.3、一型一密方案,设备在线运行了很多天后,模块中的设备密钥和阿里云平台上的密钥不一致导致无法上线
有一个客户陆续反映此问题,目前还没有定位到根本原因,可按照如下方式协助确认此问题:
- 首先从阿里云平台导出所有设备的密钥保存下来,然后设备复现此问题后,对比一下模块中的设备密钥和本地保存的密钥是否一致:如果不一致,就是模块端的问题;如果一致,就是阿里云平台端的问题。【注意:必须在设备正常在线状态下,从阿里云平台导出密钥保存下来,设备复现问题后,对比才有意义;如果设备已经复现问题,再从阿里云平台导出密钥对比,没有意义】
- 在脚本中增加一个辅助保存设备密钥的功能:连接阿里云成功后,将设备密钥保存到nvm中,复现问题后,对比nvm中的密钥和sn中存储的密钥是否一致
在定位出根本原因之前,可通过如下方式规避处理:在阿里云上删除此设备,然后再重新录入
16.4、为什么阿里云连接失败
- 确认下使用的core固件是否正确
1) 2G模块AT版本:AirM2M_VXXXX_AT_S_SSL.lod和AirM2M_VXXXX_AT_S_8955F.lod才支持ssl功能
2) 2G模块Luat版本:带SSL或者8955F的lod才支持ssl功能
3) 4G模块:所有版本都支持
- 确认下product key中的大小写是否正确,连接阿里云服务器时,会用到这个product key,大小写敏感,大小写出错会导致域名解析失败
- 默认使用模块imei作为client id连接阿里云,从日志中确认下实际imei和模块标签上的imie是否一致,如果不一致,可能模块没写imei,参考6.2章节分析处理
- 发日志文件给合宙技术支持人员分析
16.5、如何降低阿里云的离线率
目前2G网络环境在逐步恶化,在网络较好的情况下,24小时出现10次以内的掉线【仅仅作为经验值参考】都可以认为正常,如果掉线率太高,需要日志分析,如果不方便抓日志,可以按照如下方式处理后,对比看下是否有改善:
- 2G模块
1) 加大TCP重传次数和重传间隔:AT版本通过AT+TCPUSERPARAM命令设置;Luat版本通过socket.setTcpResendPara接口设置
2) mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
3) 减少Qos1和Qos2的publish使用,允许的话建议都使用Qos0
- 4G模块
1) 加大TCP重传次数和重传间隔:目前还不支持
2) mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
3) 减少Qos1和Qos2的publish使用,允许的话建议都使用Qos0
16.6、阿里云网站上的异常信息和模块动作的对应关系
阿里云网站异常信息 |
模块动作 |
Device disconnect |
发送了disconnect报文,可能是逻辑问题,导致异常发送了disconnect报文,需要脚本日志文件分析【2G模块2.3.5版本之前的部分版本脚本lib,存在一个bug,可能会导致此问题,建议更新到2.3.5以及之后的版本】 |
Connectoin reset by peer |
模块发送超时失败,没有断开mqtt连接,直接断开了socket【可参考16.5章节优化】 |
keepalive timeout |
模块发送mqtt心跳超时,被服务器断开【可参考16.5章节优化】 |
kicked by the same device |
有两种可能性:
1、存在相同client id的设备,默认使用模块imei作为client id,可能是imei重复,可参考6.2章节确认下是否模块imei为默认值
2、设备在线状态下,发生了重启,重启后成功连接阿里云【如果使用了errDump功能模块,可参考22.3章节检查下是否有异常信息上报】 |
16.7、如何批量写入三元组
一机一密的三元组信息为:ProductKey、DeviceName、DeviceSecret
一型一密的三元组信息为:ProductKey、ProductSecret、DeviceName
一型一密的三元组信息为:ProductKey、ProductSecret、DeviceName
ProductKey和ProductSecret可以直接固化在代码中
DeviceName建议直接使用模块的IMEI,也可以使用MCU端的一个唯一ID,只要这个ID在同一个ProductKey下是唯一的即可
DeviceSecret的批量写入,详细说明如下:
- 一机一密,有如下两种方式:
1) 在工厂烧录固件时,上位机通过模块uart口将DeviceSecret写入到模块中【强烈建议存储在模块sn中,参考6.4章节;Luat版本也可存储在nvm中,参考30.3章节;AT版本,如果mcu端可以存储,也可以存储在mcu端】
2) 终端设备第一次开机运行时,连接自建的服务器,将ProductKey和DeviceName上传给自建服务器,自建服务器访问阿里云获取对应的DeviceSecret,然后将DeviceSecret下发给终端设备存储【强烈建议存储在模块sn中,参考6.4章节;Luat版本也可存储在nvm中,参考30.3章节;AT版本,如果mcu端可以存储,也可以存储在mcu端】
- 一型一密:在连接阿里云过程中,终端设备会自动动态注册,注册成功后,阿里云服务器会返回对应的DeviceSecret给终端设备,终端设备存储起来即可【强烈建议存储在模块sn中,参考6.4章节;Luat版本也可存储在nvm中,参考30.3章节;AT版本,如果mcu端可以存储,也可以存储在mcu端】;之后再去连接阿里云,不需要再次动态注册,因为阿里云仅允许动态注册一次,重复注册会返回错误
更多说明参考:http://doc.openluat.com/article/600/0
16.8、AT版本,MCU端如何实现HmacMD5算法
下载http://www.openluat.com/Product/file/rda8955/core_src.7z,参考:cust_src\elua\lib\crypto\src\aliyun_iot_common_hmac.c文件中的aliyun_iot_common_hmac_md5接口
十七、基站定位问题
17.1、如何使用基站定位
目前合宙的2G和4G模块都支持基站定位,此服务免费
- 2G模块AT版本:参考AT手册,使用AT+AMGSMLOC命令查询
- 4G模块AT版本:参考AT手册,使用AT+CIPGSMLOC命令查询
- Luat版本:参考lbsLoc的demo
17.2、基站定位原理
模块正常联网后,搜索附近的小区信息,上报给后台;后台查询小区经纬度,并结合信号强度等因素进行计算(三角定位原理),最后返回计算出来的经纬度给模块
17.3、基站定位精度如何
搜索到的小区越多,定位的精度越高;一般来说,城市中心定位精度比郊区和农村定位精度高,城市中心的定位精度在几十米到几百米不等,郊区和农村的定位精度更低,可能会有几千米甚至更多的误差
- AT版本:单小区定位,仅仅将驻留小区上报的后台参与定位
- Luat版本:多小区定位,将实时搜索到的所有小区同时上报给后台参与定位
基站定位的误差都比较大,如果需要准确定位,请使用支持GPS的模块,例如Air800、Air530
17.4、为什么基站定位失败
搜索到的小区越多,定位的精度越高;一般来说,城市中心定位精度比郊区和农村定位精度高,城市中心的定位精度在几十米到几百米不等,郊区和农村的定位精度更低,可能会有几千米甚至更多的误差
- AT版本:参考AT手册的错误码,如果返回后台查询位置失败的错误,则发送AT+CREG=2、AT+CEREG=2两个AT命令后,根据注册的网络制式,发送AT+CREG?或者AT+CEREG?查询当前驻留的小区id,然后在电脑浏览器中打开 http://bs.openluat.com/ ,手动查找当前驻留小区的位置;如果手动可以查到位置,则服务器存在BUG,直接向技术支持人员反映问题;如果手动无法查到位置,则基站数据库还没有收录当前设备的小区位置信息,向技术支持人员反馈,我们会尽快收录
- Luat版本:
1) main.lua中的PRODUCT_KEY和此设备在iot.openluat.com中所属项目的ProductKey必须一致,请去检查
2) 后台基站数据库查询不到所有小区的位置信息;在trace中向上搜索encellinfo,然后在电脑浏览器中打开http://bs.openluat.com/,手动查找encellinfo后的所有小区位置;如果手动可以查到位置,则服务器存在BUG,直接向技术支持人员反映问题;如果手动无法查到位置,则基站数据库还没有收录当前设备的小区位置信息,向技术支持人员反馈,我们会尽快收录
17.5、如何在iot.openluat.com中查询设备的基站定位请求记录
因基站定位请求数据太多,为了保证iot后台运行的稳定性,不再保存请求记录,如果实在有查询需求,联系合宙技术支持人员处理
17.6、合宙官方的基站定位能在国外使用吗
不能,没有国外的基站数据库
十八、GPS定位问题
18.1、哪些模块支持GPS定位
目前仅:Air800、Air801、Air530支持
其余模块例如Air720G如果要支持GPS,可以采用Air720G+Air530方案,使用Luat二次开发实现
18.2、GPS天线如何设计
目前仅:Air800、Air801、Air530支持
其余模块例如Air720G如果要支持GPS,可以采用Air720G+Air530方案,使用Luat二次开发实现
18.2、GPS天线如何设计
参考:https://www.jianshu.com/p/f52e9a52cc11
18.3、Air800模块如何测试信噪比
参考:http://oldask.openluat.com/article/963
18.4、Air800模块如何输出原始NMEA数据
- AT版本:发送AT+CGNSTST=1命令,可以打开NMEA数据输出功能
- Luat版本:参考gps v1的demo,添加如下代码
gps.setNmeaMode(2, function(nmeaItem) log.info("nmea", nmeaItem) end)
18.5、Air800模块GPS无信号、信号弱、定位失败
- 使用Air800官方开发板+客户固件对比测试:如果Air800官方开发板也存在同样问题,重点检查以下步骤中的环境问题和软件问题;如果Air800没问题,重点检查一下步骤中的硬件问题
- 不能在室内测试,必须到室外测试;如果只能在室内测试,可以淘宝搜索“gps信号转发器”,但是不可用于rtk定位测试。为什么不能在室内测试,参考:http://oldask.openluat.com/article/66
- 检查gps天线
1) 必须使用gps天线,普通的gsm、蓝牙、wifi、433等天线不支持gps定位
2) gps陶瓷天线,如果大板和陶瓷天线面积都比较小,一定要去正规天线厂调试。如果面积都比较大,实在没条件调试,可以不去调试
3) 天线朝上,面向天空,天线上方不能有金属物质,不能有较厚的遮挡物(例如几厘米的塑料盒子肯定不行,几毫米的塑料盒子可以)
4) 如果用的是有源天线,测量下供电电压是否正常;如果使用GPLDO(LDOVIB)给天线供电:Air800 AT版本默认已经打开GPLDO(LDOVIB)供电;Luat版本需要在gps开启之前,执行一行代码pmd.ldoset(7,pmd.LDO_VIB)来打开供电
- gps设备不要放在笔记本键盘等有电磁干扰的设备上
- 参考:http://oldask.openluat.com/article/963 ,确认下信噪比以及天线是否受到干扰
- Air530模块串口的模特率是9600,Air800模块gps串口的波特率是115200,使用时注意区分
- 参考18.3章节输出原始NMEA数据,如果无数据输出,用示波器测量一下GPS_RXD上是否有数据
- 按照合宙技术支持人员的要求,可能需要重新烧录gps芯片软件来定位问题,烧录方法参考:http://oldask.openluat.com/article/964 ,如果烧录失败,可以找一个gps定位正常的Air800模块对比烧录,来确认是不是异常模块的gps uart通信不正常
- 天线设计不合规,参考:https://www.jianshu.com/p/f52e9a52cc11
- 硬件设计中的阻抗不匹配
18.6、如何支持秒定位(GPS定位慢)
- Air800模块
1) AT版本:默认支持秒定位,不需要MCU做控制
2) Luat版本:require"agps"即可
- Air530模块:和主控模块使用Luat二次开发时,require"agps"即可
注意:即使支持了秒定位,GPS断电后第一次开机,定位速度仍然会比较慢
18.7、什么是GPS的冷启动、温启动、热启动
参考:http://oldask.openluat.com/article/32
18.8、GPS定位经纬度不准确
- 使用Air800官方开发板+客户固件对比测试:如果Air800官方开发板也存在同样问题,重点检查以下步骤中的环境问题和软件问题;如果Air800没问题,重点检查一下步骤中的硬件问题
- 坐标没有纠偏,参考:http://www.openluat.com/GPS-Offset.html 进行纠偏处理
- 周围有比较高的障碍物,会导致定位误差
- 在开阔地带,正常情况下定位精度只能做到5米
- 不能在室内测试,必须到室外测试;如果只能在室内测试,可以淘宝搜索“gps信号转发器”,但是不可用于rtk定位测试
- 信噪比低或者天线受到干扰,参考 http://oldask.openluat.com/article/963 和 https://www.jianshu.com/p/f52e9a52cc11 做硬件优化
18.9、GPS模块内部有LNA吗
有LNA低噪声放大器
18.10、GPS定位海拔不准确
卫星距离地球有33000km,所以高程差几十米很正常。几十米相对于33000km,真的不算什么。如果要求精确,一般个人建议:
- 找基准点
- rtk
- 气压传感器/海拔表
那么,放在飞机上会更准吗?就方向角、经纬度、速度而言,会;但是,气压不会准,因为舱内有增压装置。但是海拔而言,飞机一般用雷达、声纳,以及皮托管(气压)、或者陀螺仪(惯导)
18.11、如何计算NMEA校验码
参考:http://oldask.openluat.com/article/70
18.12、可视卫星、可用卫星有什么区别
可视卫星是当前区域,接收条件良好情况下,应该可以收到卫星信号的卫星
可用卫星是当前已经收到信号并正在使用参与定位的卫星
18.13、GGA和RMC应该用哪个
视具体情况而定,建议用gga,信息相对更全面
18.14、如何解读NMEA报文每个字段的含义
参考:http://www.openluat.com/Product/file/800/NMEA%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E.docx
18.15、是否支持rtd、rtk
不支持,推荐选型:unicorecomm um482;ublox f9p
18.16、是否支持ntrip协议
不支持,可以使用Luat开发方式自行对接ntrip协议
ntrip协议参考:https://blog.csdn.net/hanford/article/details/53025771
18.17、已知两个经纬度,如何计算间距?
可以使用如下函数(但是注意,没有考虑到地球曲率,计算结果存在误差。建议使用高德地图等提供的api在服务端计算
-[[
函数名:diffofloc
功能 :计算两对经纬度之间的直线距离(近似值)
参数:
latti1:纬度1(度格式,例如31.12345度)
longti1:经度1(度格式)
latti2:纬度2(度格式)
longti2:经度2(度格式)
typ:距离类型
返回值:typ如果为true,返回的是直线距离(单位米)的平方和;否则返回的是直线距离(单位米)
]]
function diffofloc(latti1, longti1, latti2, longti2,typ) --typ=true:返回a+b ; 否则是平方和
local I1,I2,R1,R2,diff,d
I1,R1=smatch(latti1,"(%d+)%.(%d+)")
I2,R2=smatch(latti2,"(%d+)%.(%d+)")
if not I1 or not I2 or not R1 or not R2 then
return 0
end
R1 = I1 .. ssub(R1,1,5)
R2 = I2 .. ssub(R2,1,5)
d = tonumber(R1)-tonumber(R2)
d = (d*111-(d*111%100))/100
if typ == true then
diff = (d>0 and d or (-d))
else
diff = d * d
end
I1,R1=smatch(longti1,"(%d+)%.(%d+)")
I2,R2=smatch(longti2,"(%d+)%.(%d+)")
if not I1 or not I2 or not R1 or not R2 then
return 0
end
R1 = I1 .. ssub(R1,1,5)
R2 = I2 .. ssub(R2,1,5)
d = tonumber(R1)-tonumber(R2)
if typ == true then
diff = diff + (d>0 and d or (-d))
else
diff = diff + d*d
end
--diff = diff + d*d
print("all diff:", diff)
return diff
end
18.18、如何解决静态漂移
通常是因为卫星、接收器、天线等多重因素导致,建议服务端从算法层面去过滤这种漂移;设备端也可以通过振动传感器判断静止状态、wifi判断wifi变化率较低、基站变化率较低等多种手段,较少不必要的GPS位置上报来过滤漂移
18.19、做车载定位器,进入隧道没办法定位怎么办
使用基站定位
18.20、能否用于制作人员定位器、定位手表
可以
18.21、使用Luat版本FLOAT底层,能否实现坐标转换(WGS84~GCJ02)加偏/纠偏
建议在服务器端实现。因为加偏算法是很复杂的浮点运算,模块输出结果可能和实际情况有差;如果需要更高的加偏结果,可以使用百度/高德等地图提供的api
18.22、哪些地图使用的是GCJ02坐标系
高德、腾讯;(百度是GCJ02又转换为BD09,所以不能直接使用GCJ02)
18.23、哪些地图可以直接查看WGS84定位
bing maps(非bing地图),google maps(非gogole 地图)
18.24、车载使用时需要天线引出到车顶上吗
- 挡风玻璃如果没有贴膜或者贴了不含金属材料的膜,可以放在挡风玻璃下,但是gps信号会有一定衰减,在万不得已的情况下,可以放在挡风玻璃下,最好再实际测试确认一下
- 挡风玻璃如果贴了含有金属材料的膜,则不能放在挡风玻璃下,必须将天线到车顶
十九、GPIO问题
因AT版本不支持gpio操作,故本章节讨论的是Luat版本下的gpio问题
19.1、为什么GPIO配置后,功能不正常
- 如果是2G模块,2G模块的某些gpio,需要打开对应的电压域,这些gpio才能工作正常,详情参考demo/gpio/gpioSingle/testGpioSingle.lua中的注释,电压域与控制的gpio对应关系如下:
pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
- 代码中表示gpio id的参数有误:
GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31
GPIO 32到GPIO 63表示为pio.P1_0到pio.P1_31
GPIO 64到GPIO XX表示为pio.P2_0到pio.P2_(XX-64),例如GPIO65 表示为pio.P2_1
- 混淆了pin脚id和gpio id:模块的pin脚id是按照某个方向顺序排列的,gpio id和pin id不同,参考模块硬件手册,一定找到pin脚对应的gpio id,代码中要使用gpio id,不能使用pin脚id
- 是否正在使用其他复用功能;如果是,把其他功能关掉,再配置为gpio使用;例如Air202模块的第27个脚,可以有三种用途:uart2 rxd、spi2 di、gpio 4,要配置为gpio使用前,必须确保uart2和spi2的功能没有被使用;可参考demo\gpio\i2cGpioSwitch和demo\gpio\uartGpioSwitch两个示例
- 用同样软件在合宙官方开发板上对比测试:如果开发板没问题,则查找自己板子的硬件问题;如果开发板有问题的话,参考第6步操作
- 发出脚本代码和使用的core固件名,联系合宙技术支持人员处理
19.2、GPIO的输出能力是多少
- 2G模块
1) 电压输出最高3.3V,部分管脚最高2.8V;没有电压域控制的管脚电压只能输出0V、3.3/2.8V,有电压域控制的管脚输出电压可通过电压域控制【详情参考demo/gpio/gpioSingle/testGpioSingle.lua中的注释】
2) 电流最大输出2mA
- 4G模块
1) 电压最高输出1.8V
2) 电流最高输出2mA
19.3、中断检测能力是多少
最快检测20ms
中断越频繁,中断检测的及时性越低;可参考:http://oldask.openluat.com/article/930辅助理解
19.4、哪些管脚可以用做GPIO
参考模块硬件手册“管脚描述”章节的表格,表格中表明可以用做gpio的都可以使用
19.5、异常重启,能否恢复之前的工作状态
建议把gpio状态写入nvm,万一异常重启,根据nvm保存的状态配置gpio
19.6、从硬件上电到脚本可控制GPIO状态,这段时间内的管脚电平状态如何变化
Air720系列4G模块:http://doc.openluat.com/article/600/0
二十、合宙官方硬件看门狗问题(仅适用于Luat版本)
因AT版本需要外接MCU主控,MCU可自行实现硬件看门狗的功能,故本章节不讨论AT版本的硬件看门狗问题,仅讨论Luat版本下的合宙官方硬件看门狗问题
20.1、软硬件设计
看门狗购买链接:打开:m.openluat.com,进入“周边工具”页面,选择“看门狗Air153B”
看门狗硬件设计以及工作原理参考:http://www.openluat.com/Product/file/rda8955/Luat%E4%B8%93%E7%94%A8%E7%9C%8B%E9%97%A8%E7%8B%97%E8%8A%AF%E7%89%87%E8%AE%BE%E8%AE%A1%E6%89%8B%E5%86%8CV1.6.pdf
Luat软件代码:
require"wdt"
wdt.setup(pio.P0_30, pio.P0_31)
--根据实际的硬件连接,自行修改这两个管脚的gpio id
20.1、软硬件设计
看门狗购买链接:打开:m.openluat.com,进入“周边工具”页面,选择“看门狗Air153B”
20.2、硬件看门狗是否有必要
有,可以保证无人值机设备系统的稳定性,避免人肉运维的尴尬
20.3、为什么4G模块不需要外部硬件看门狗
参考:http://oldask.openluat.com/article/74
20.4、为什么会提示喂狗失败(WatchDog <–> AirM2M didn’t respond : wdt reset 153b)
- 硬件喂狗脚未连接
- 软件配置的gpio喂狗脚和硬件不一致
20.5、PWR_ON_OUT脚有什么作用
当模块的pwrkey没有接地,它可以使模块开机;如果模块pwrkey接地,则该脚悬空
20.6、如何测试看门狗是否正常工作
有如下两种方法:
- 硬件上断开喂狗管脚WDI的连接
- 硬件连接正常,软件上不require"wdt"
20.7、能否修改看门狗喂狗时序
不能,固件已经固化在芯片中
20.8、能否使用自己的硬件看门狗芯片
可以,软件和硬件需要自行设计
20.9、有没有软件看门狗
2G模块的core中有一种死循环软件看门狗机制,如果脚本中一直在死循环执行某段代码,2G模块半分钟会软件看门狗重启【重启原因值为poweron reason 8】
4G模块的0027以及之后版本的core+2.2.8以及之后版本的脚本lib,实现了一种死循环软件看门狗机制,如果脚本中一直在死循环执行某段代码,4G模块1分钟会软件看门狗重启【没有特定的重启原因值,重启原因值为普通的软件重启3,重启前的日志会输出SoftDog Restart】
除此之外,还有一种常见的业务逻辑软件看门狗,此软件看门狗的基本实现原理为:根据业务逻辑,连续一段时间和服务器通信不正常,则控制软重启;示例代码如下:
oftwareDogCo = sys.taskInit(function()
while true do
if sys.wait(300000) == nil then --连续5分钟没有喂狗,根据项目需求自行修改时长
sys.restart("logic exception software dog timeout")
end
end
end)
--如下代码是喂狗代码,根据产品业务逻辑,在适当的位置去调用
coroutine.resume(softwareDogCo,"feed")
如何去确认这个“适当的位置”呢?下面列举两种常见示例:
- 如果模块和服务器之间有应用心跳的应答机制,则可以在模块每次收到服务器的心跳应答时去喂狗
- 如果没有心跳应答机制,可以在连接服务器成功后,起个定时器,每隔一段时间去喂一次狗;连接断开时,关闭这个喂狗定时器
20.10、硬件看门狗外围电路不规范可能导致2G模块一直重启
下图为一个不规范的硬件看门狗外围电路
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioPgZXbk-1619422566533)(https://oldask.openluat.com/image/show/attachments-2019-12-JkFUgt7d5df33e2cbefac.png “undefined”)]
下图为参考硬件连接图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhXbhPHL-1619422566534)(https://oldask.openluat.com/image/show/attachments-2019-12-FR6D7uzD5df33e539faaa.png “undefined”)]
不规范的电路图中,看门狗供电VDDIO没有串联二极管,会导致反复重启模块。因为二极管是为了防止单片机的供电漏掉,如果没有二极管,在VDDIO掉电时会将看门狗的电源拉掉,导致看们关机导致拉低RESET,引起模块重启
二十、合宙官方硬件看门狗问题(仅适用于Luat版本)
因AT版本需要外接MCU主控,MCU可自行实现硬件看门狗的功能,故本章节不讨论AT版本的硬件看门狗问题,仅讨论Luat版本下的合宙官方硬件看门狗问题
20.1、软硬件设计
看门狗购买链接:打开:m.openluat.com,进入“周边工具”页面,选择“看门狗Air153B”
看门狗硬件设计以及工作原理参考:http://www.openluat.com/Product/file/rda8955/Luat%E4%B8%93%E7%94%A8%E7%9C%8B%E9%97%A8%E7%8B%97%E8%8A%AF%E7%89%87%E8%AE%BE%E8%AE%A1%E6%89%8B%E5%86%8CV1.6.pdf
Luat软件代码:
require"wdt"
wdt.setup(pio.P0_30, pio.P0_31)
--根据实际的硬件连接,自行修改这两个管脚的gpio id
20.2、硬件看门狗是否有必要
有,可以保证无人值机设备系统的稳定性,避免人肉运维的尴尬
20.3、为什么4G模块不需要外部硬件看门狗
参考:http://oldask.openluat.com/article/74
20.4、为什么会提示喂狗失败(WatchDog <–> AirM2M didn’t respond : wdt reset 153b)
- 硬件喂狗脚未连接
- 软件配置的gpio喂狗脚和硬件不一致
20.5、PWR_ON_OUT脚有什么作用
当模块的pwrkey没有接地,它可以使模块开机;如果模块pwrkey接地,则该脚悬空
20.6、如何测试看门狗是否正常工作
有如下两种方法:
- 硬件上断开喂狗管脚WDI的连接
- 硬件连接正常,软件上不require"wdt"
20.7、能否修改看门狗喂狗时序
不能,固件已经固化在芯片中
20.8、能否使用自己的硬件看门狗芯片
可以,软件和硬件需要自行设计
20.9、有没有软件看门狗
2G模块的core中有一种死循环软件看门狗机制,如果脚本中一直在死循环执行某段代码,2G模块半分钟会软件看门狗重启【重启原因值为poweron reason 8】;4G模块暂时没有这种功能
除此之外,还有一种常见的业务逻辑软件看门狗,此软件看门狗的基本实现原理为:根据业务逻辑,连续一段时间和服务器通信不正常,则控制软重启;示例代码如下:
oftwareDogCo = sys.taskInit(function()
while true do
if sys.wait(300000) == nil then --连续5分钟没有喂狗,根据项目需求自行修改时长
sys.restart("logic exception software dog timeout")
end
end
end)
--如下代码是喂狗代码,根据产品业务逻辑,在适当的位置去调用
coroutine.resume(softwareDogCo,"feed")
如何去确认这个“适当的位置”呢?下面列举两种常见示例:
- 如果模块和服务器之间有应用心跳的应答机制,则可以在模块每次收到服务器的心跳应答时去喂狗
- 如果没有心跳应答机制,可以在连接服务器成功后,起个定时器,每隔一段时间去喂一次狗;连接断开时,关闭这个喂狗定时器
二十一、短信问题
21.1、支持长短信吗
- AT版本:支持长短信的接收,但是不支持长短信的拼接,需要用户根据PDU短信格式自行拼接;例如接收到一条100个汉字的长短信,是存储在两个位置的,根据短信PDU格式,读出这两个位置的短信后,自行拼接成原始的100个汉字的长短信
- Luat版本:支持长短信的接收和拼接,参考sms的demo
21.2、为什么Air720H模块无法使用中国电信卡收发短信
中国电信的短信业务要回落到2G或者3G网络下才能使用,但是Air720H不支持中国电信的2G和3G网络频段,所以不支持中国电信的短信业务;
支持中国移动和中国联通的短信业务
二十二、日志使用问题(仅适用于Luat版本)
22.1、如何解读Luatools抓到的脚本日志
参考:http://oldask.openluat.com/article/15
22.2、errDump功能有什么用
errDump功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要, 强烈建议客户一定要使用此功能,加载此功能模块后,具备如下功能:
- 上报core异常重启信息到errDump调试服务器【仅4G模块有此功能】
- 上报脚本运行异常信息【主要是运行期间的语法错误】到errDump调试服务器
- 上报主动调用errDump.appendErr或者sys.restart接口保存的错误日志到errDump调试服务器
- 如果调用errDump.setNetworkLog接口打开了网络异常日志功能后,会上报最近几种网络异常日志到errDump调试服务器
22.3、设备使用errDump对接合宙官方服务器,如何查看设备上报的错误信息
登录 iot.openluat.com,随便选择一个产品,点进去,点击左侧的“查询debug”菜单,输入设备imei,选择开始日期、结束日期,点击搜索即可
友情提醒:开始和结束日期的跨度越大,搜索速度越慢
二十三、串口通信问题
23.1、AT版本发送AT无应答
- 检查使用的模块AT口是否正确,2G模块为uart1,4G模块为uart2;如果使用的是合宙官方开发板,注意跳线或者拨动开关切换到期望的串口
- 发送的AT命令要以回车(0x0D)字符结尾,虽然理论上说以回车换行(0x0D 0x0A)两个字符结尾也没有问题,但是标准协议是以0x0D结尾。使用sscom等pc串口工具调试时,可以选择以回车换行结尾;但是MCU端编写程序时,强烈建议以0x0D结尾
- 检查使用的数据线是否正确:如果是合宙官方开发板,开发板上已经集成了usb转串口芯片,只要使用普通的usb数据线即可,不要再使用usb转串口数据线;如果是自己的板子,视具体情况而定
- 检查接线是否正确,正确的接法是:tx—rx,rx—tx,gnd—gnd
- 检查电平是否匹配:2G模块电平为2.8V,4G模块电平为1.8V
- 参考第三章和第四章,检查下模块是否开机或者是否一直重启
23.2、串口数据乱码
检查下模块板和主控板的参考地是否有电势差,曾经有一个客户的板子如下图设计,通过主控板给模块供电,然后只通过上图排插针通插座的方式连接主板串口,导致地连接的阻抗增加,在弱信号下大功率发射时,会导致模块板和主控板的参考地有电势差,导致串口通信异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uONlTzX8-1619422566534)(https://oldask.openluat.com/image/show/attachments-2019-12-GqrKcQmE5de4aebb2f099.png “undefined”)]
23.3、Luat版本串口问题
参考:http://oldask.openluat.com/article/924
二十四、音频问题(仅适用于Luat版本)
24.1、无法播放mp3文件
- 受限于硬件,4G模块无法支持音频播放功能
- 没有烧录mp3文件,烧录方法和脚本完全一样
- 本地烧录的mp3文件的访问路径不对,完整路径参考1.1.7章节
- 2G模块的TTS2类型的core固件不支持mp3播放
- 参考24.3确认所用喇叭是否支持
- mp3文件太大,播放时内存不足,导致失败;请借助格式工厂等第三方工具,裁剪压缩mp3文件,可减小码率,输出单声道
24.2、无法播放tts
- 受限于硬件,4G模块无法支持音频播放功能
- core固件不支持tts功能,请选择支持tts功能的core固件,带有TTS标志或者带有8955F标志的固件才支持tts功能
- 参考24.3确认所用喇叭是否支持
24.3、支持什么规格的喇叭
4G模块不支持喇叭;2G模块支持的喇叭规格为:8Ω,1W、8Ω,2W、8Ω,3W…,只要8Ω,大于等于1W都支持
24.4、TTS音质可以更好吗
0037以及之后版本的8955F和8955F_FLOAT固件,改善了tts播放音质,模块需要选用Air202F、Air268F等64Mb flash的型号;因flash空间问题,非8955F的固件,无法改善
二十五、core固件使用问题
25.1、固件区别
- 2G模块AT版本固件
AirM2M_VXXXX_AT_S_SSL.lod:支持SSL,不支持TTS,32Mb flash模块固件
AirM2M_VXXXX_AT_S_TTS.lod:支持TTS,不支持SSL,32Mb flash模块固件
AirM2M_VXXXX_AT_S_8955F.lod:既支持TTS,又支持SSL,64Mb flash模块固件
- 2G模块Luat版本固件,详情参考发布包中的readme.txt
Luat_VXXXX_8955.lod:不支持SSL、TTS、SPI接口的LCD功能
Luat_VXXXX_8955_SSL.lod:支持SSL功能
Luat_VXXXX_8955_SSL_TTS.lod:支持SSL、TTS功能,不支持MP3、MIDI、录音功能
Luat_VXXXX_8955_SSL_UI.lod:支持SSL、SPI接口的LCD功能
Luat_VXXXX_8955_TTS_UI.lod:支持TTS、SPI接口的LCD功能
Luat_VXXXX_8955_TTS1.lod:支持TTS功能
Luat_VXXXX_8955_TTS2.lod:支持TTS功能、不支持MP3、MIDI、录音、json
Luat_VXXXX_8955_UI.lod:支持SPI接口的LCD功能
Luat_VXXXX_8955_SSL_FLOAT.lod:支持SSL功能、浮点数
Luat_VXXXX_8955_SSL_UI_FLOAT.lod:支持SSL功能、PI接口的LCD功能、浮点数
Luat_VXXXX_8955F.lod:64M flash版本(Air202F),支持SSL、TTS、SPI接口的LCD功能
- 4G模块Luat版本固件
Luat_VXXXX_ASR1802.lod:不支持浮点数
Luat_VXXXX_ASR1802_FLOAT.lod:支持浮点数
25.2、哪里可以下载旧版本固件
AT固件不方便下载旧版本固件,如果需要,直接联系合宙技术支持人员
2G模块Luat旧版本core固件的下载链接为:http://www.openluat.com/Product/file/rda8955/oldCore/core_VXXXX.zip; VXXXX 替换为特定的版本号,例如V0025
2G模块Luat旧版本core固件的下载链接为:http://www.openluat.com/Product/file/rda8955/oldScript/script_LuaTask_VX.Y.Z.zip ;VX.Y.Z替换为特定的版本号,例如V2.3.5
4G模块Luat旧版本core固件的下载链接为:http://www.openluat.com/Product/file/asr1802/oldCore/core_VXXXX.zip ;VXXXX替换为特定的版本号,例如V0025
4G模块Luat旧版本core固件的下载链接为:http://www.openluat.com/Product/file/asr1802/oldScript/script_LuaTask_VX.Y.Z.zip ;VX.Y.Z替换为特定的版本号,例如V2.2.7
25.3、如何在2G模块Luat开源core中添加自己的功能模块
参考:http://doc.openluat.com/article/600/0
二十六、合宙云平台问题
26.1、提供哪些云平台服务
- 商用平台(与模块终端通信)
远程升级:tcp协议 域名:iot.openluat.com 端口:80
日志服务:udp协议 域名:ota.airm2m.com 端口:9072
基站定位:udp协议 域名:bs.openluat.com 端口:12411和12412
AGPS星历下载:tcp协议 域名:download.openluat.com 端口:80
- 业务操作平台(直接在PC浏览器上访问)
sim.openluat.com:流量卡管理查询
iot.openluat.com:物联网云平台,用于支持模块终端的远程升级、日志服务、基站定位功能
erp.openluat.com:商务信息查询
- 开发调试平台(不保证平台系统的稳定性,仅方便开发者开发调试使用)
tcplab.openluat.com:TCP测试平台
26.2、物联网云平台(iot.openluat.com)问题
26.2.1、如何添加设备到设备列表中
不需要手动添加设备到产品的设备列表中,使用Luat版本二次开始时,update、lbsLoc都要用到产品的productKey,当设备第一次成功使用update或者lbsLoc功能时【注意:此处的成功使用,update成功指的是从云平台上成功下载了升级包、lbsLoc成功指的是获取到了基站对应的经纬度】,会自动将设备模块的imei添加到productKey对应产品的设备列表中
26.2.2、如何查询设备在哪个产品下
把模块IMEI发给合宙技术支持人员查询
如果查询不到,说明设备还没有成功上报过,参考26.2.1处理后才能查询到归属产品,此情况不影响设备正常使用update和lbsLoc功能,设备成功使用过一次update或者lbsLoc功能后,就可以在云平台查到归属产品了
26.2.3、为什么公司采购的4G模块不在我自己创建的产品项目下
客户向合宙采购4G模块时,如果采购人员没有告知合宙这批模块放在iot.openluat.com上的哪个产品下,则合宙会以采购人的手机号为账号,默认密码888888,创建一个“Air720X标准模块”的产品,此次采购的所有模块都会放在这个产品下
通常采购人员和开发人员并不是同一个人,开发人员拿到模块,如果使用Lua版本开发,用到了合宙服务器提供的基站定位、远程升级功能,就会在iot.openluat.com上开发人员自己的账号下,创建一个新产品【假设产品名为“模块Lua开发”】,此时就会出现main.lua中的PRODUCT_KEY和模块归属的产品ProductKey不一致的问题,导致基站定位和远程升级功能无法正常使用
遇到这种问题,需要把“Air720X标准模块”产品下的所有设备转移到“模块Lua开发”产品下,操作步骤如下:
- 登录采购人手机号码账号,默认密码888888【如果不知道采购人员是谁,告知合宙技术支持人员一个模块的IMEI来查询】,进入“Air720X标准模块”产品
- 点击设备列表->转移全部设备->其他账号,填入实际的账号和项目名之后,点击确定,开始转移,如果设备过多,转移耗费时间会稍长一点儿,请耐心等待;转移完成后,会提示“操作成功”
以后采购模块时,如果所有的模块都需要放在开发人员账户下的“模块Lua开发”产品下,则告知采购人员,让合宙发货时默认全放在这个产品下,可以省去“开发人员转移全部设备”的操作
如果不方便指定产品,所有模块都用做Luat二次开发,则可以进入“Air720X标准模块”产品,打开设备列表,点击“重置所有设备”,这样所有模块都没有归属项目了,以后模块使用Luat版本第一次成功使用基站定位或者远程升级功能后,就自动加入“脚本中PRODUCT_KEY对应的项目”下
如果查询不到,说明设备还没有成功上报过,参考26.2.1处理后才能查询到归属产品,此情况不影响设备正常使用update和lbsLoc功能,设备成功使用过一次update或者lbsLoc功能后,就可以在云平台查到归属产品了
26.2.3、为什么转移设备会失败
要转移的设备必须属于源产品,如果批量转移的设备中有些设备不属于源产品,网站不会报错,会忽略这些不属于源产品的设备,仅仅转移属于源产品的设备
26.2.4、如何在不同账号间转移产品
此功能不对外开放,告知合宙技术支持人员:源账号、产品ProductKey、目的账号,由合宙技术支持人员处理
26.3、TCP测试平台(tcplab.openluat.com)问题
26.3.1、如何使用TCP测试平台
使用chrome浏览器打开http://tcplab.openluat.com,如下示例所示
Openluat TCP Lab
服务器建立在[180.97.81.180:51329] 2019/12/20 上午10:30:40
设备通过tcp连接180.97.81.180的51329端口即可
26.3.2、浏览器打开tcplab.openluat.com失败怎么办
建议使用chrome浏览器
26.3.3、为什么模块连接TCP测试平台,会出现断开的问题
模块发送0x7F的字符,会导致平台断开
设备和平台之间连续3分钟没有数据通信,会导致平台断开
除此之外,因为该平台为测试平台,无法保证稳定性,可能平台存在bug导致断开
二十八、JSON问题
28.1、底层使用哪个库实现的
cjson
28.2、为什么会解析出错
检查数据的完整性和正确性;可在第三方json解析网站对比测试
在非协程中,解析出错时,如果没有判断解析结果,直接使用解析后的table,会导致软件异常重启,如果使用了errDump功能模块,软件重启后,会通过errDump将异常信息上报到调试服务器;如果不想异常重启,可参考如下代码设计
local tDecodedData,result,errInfo = json.decode(data)
if result and type(tDecodedData)==“table” then
--使用tDecodedData
else
--可以使用errDump功能模块将错误信息上报到调试服务器
--errDump.appendErr(errInfo)
end
在协程中,解析出错时,如果没有判断解析结果,直接使用解析后的table,会导致协程异常退出,不会引起软件重启,如果使用了errDump功能模块,会通过errDump将异常信息上报到调试服务器
28.3、为什么HTTP POST JSON格式的数据会出现失败
检查一下是否忘记设置了"Content-Type: application/json"请求头
- AT版本:参考AT手册,2G模块使用AT+HTTPPARA=“USER_DEFINED”,“Content-Type: application/json”;4G模块使用AT+HTTPPARA=“USERDATA”,“Content-Type: application/json”
- Luat版本:参考http的demo,在head参数中传入{[“Content-Type”]=“application/json”}
28.4、AT版本mqtt publish json格式的数据,如何处理"
需要转义处理,参考:http://oldask.openluat.com/article/122
二十九、UI问题(仅使用于Luat版本)
29.1、如何支持UI显示
- 2G模块支持,4G模块还不支持
- Luat版本要选择带有UI或者8955F后缀的lod
- 参考script_LuaTask/demo/ui来使用
- lcd支持eink、lcd、oled等;不支持触摸屏
29.2、为什么lcd不显示
- 2G模块支持,4G模块还不支持
- Luat版本要选择带有UI或者8955F后缀的lod
- 建议选用script_LuaTask/demo/ui中已经调通的lcd;并且注意硬件lcd spi和标准spi接口对应的软件代码配置不同
- 检查对lcd的供电是否满足lcd的供电要求
29.3、最大支持的lcd分辨率是多少
&esnp; 因内存限制,2G模块支持的最大分辨率为240*320;如果想要更大分辨率lcd,建议使用hmi usart等串口屏,此情况需要自行开发软件实现,不能使用core提供的ui库
4G模块还不支持UI功能
29.4、如何使用自定义字体
参考:http://doc.openluat.com/article/600/0
29.5、为什么图片无法显示
- 检查下图片完整路径是否正确,如果图片是通过Luatools烧录进去得,参考1.1.7检查确认
- 黑白屏不支持显示彩色图片
29.6、如何显示二维码
参考qrcode的demo,scriptLuaTask/demo/qrcode
参考:http://doc.openluat.com/article/600/0
29.7、如何显示Code128条形码
参考:http://doc.openluat.com/article/600/0、http://doc.openluat.com/article/600/0
三十、FLASH和RAM使用问题(仅适用于Luat版本)
30.1、Luat版本用户可使用哪些FLASH空间
- 脚本区:
1) 用来存放通过Luatools烧录的脚本、图片、音频等文件;或者通过Luatools合成脚本、图片、音频等文件,再通过量产烧录工具烧录的合成文件
2) 脚本区内的数据只读,不可写
3) 4G 720D、720H、720G、720SX系列的模块的脚本区空间为1MB
4) 4G 720UX系列的模块的脚本区空间为700KB
5) 2G模块,不同的core固件的脚本区空间不尽相同,可用记事本打开lod文件,搜索SCRIPT_DATA_SIZE表示脚本区空间
6) 如果实际的脚本、图片、音频等文件的总大小超过了脚本区空间,在Luatools烧录或者合成时会提示出错
- 文件系统区:
1) 用来存放程序运行过程中,动态创建的文件,例如从网络上下载一个图片、下载远程升级包、本地创建的参数文件等
2) 文件系统区的文件数据可读可写
3) 不同的core固件分配的文件系统空间不尽相同,可通过rtos.get_fs_free_size()返回文件系统的剩余空间,单位为字节。注意:
A. 此处返回的剩余空间为理论值,除了存储文件中的实际数据之外,还要存储文件索引信息,所以文件系统存在一个利用率的问题,一般来说85%是比较保险的一个经验值
B. 2G模块如果用到了远程升级功能,需要为远程升级功能保留足够的文件系统空间,详情参考:http://oldask.openluat.com/article/916 4.3章节
4) lib中基于文件系统实现了一个nvm功能模块,可用于存储小数据量的简单键值对数据,详情参考:http://doc.openluat.com/article/600/0 ;如果存储大数据量数据,参考fs的demo直接操作文件
30.2、Luat版本用户可用的RAM空间
2G模块RAM总空间为1MB
4G 720D、720H、720G、720SX系列的模块RAM总空间为1.5MB
4G 720UX系列的模块RAM总空间为1180KB
collectgarbage(“count”)返回已用RAM空间,单位为KB;注意:
- collectgarbage(“count”)是无法返回Lua虚拟机中的垃圾内存空间的,所以剩余空间并不是简单的“总空间-collectgarbage(“count”)空间”,如果要计算准确的剩余空间,在计算之前调用3次collectgarbage(collect)强制回收垃圾内存
- 存在内存碎片的问题,并不是剩余多少内存空间就能用多少空间,比较典型的经验值是:2G模块collectgarbage(“count”)返回的已用内存在700多KB时,就已经到达临界值了
30.3、NVM使用问题
NVM是基于文件系统实现的一个功能模块,可用于存储小数据量的简单键值对数据,详情参考:http://doc.openluat.com/article/600/0 ;如果存储大数据量数据,参考fs的demo直接操作文件
30.4、为什么读文件失败
文件读取不存在权限问题,按照如下顺序排查问题
- 如果读取的是本地烧录的文件,检查下文件有没有烧录以及完整路径是否正确【参考1.1.7章节】
- 如果读取的是程序运行过程中动态创建的文件,检查下文件是否创建成功【文件系统空间不足可能会导致文件创建失败】以及完整路径是否正确
30.5、动态创建自定义文件的注意事项
- 自定义的文件不要放在/lua、/ldata、/luazip、/RecDir目录下,这些目录为特殊目录,core运行过程中可能会递归删除这些目录;使用rtos.make_dir接口新建一个目录,自定义的文件可以放在自创建的这个目录下
- 2G模块的文件系统还有如下注意事项:
1) 自定义的文件不要放在根目录/下,根目录下有最多32个文件的限制
2) 自定义的文件完整路径长度不能超过32字节,例如/user_dir/783748932749327493274237493274932749237.txt超过了32字节,创建时会失败
30.6、是否支持外扩SPI FLASH
支持,但是无法挂载文件系统,只能使用spi接口进行读写数据存储管理
三十一、RNDIS问题
31.1、模块软件中支持关闭RNDIS网卡功能吗
不支持
如果因为电脑误使用RNDIS造成了SIM卡流量损失,可以在电脑的网络连接中禁用RNDIS网卡
31.2、WINDOWS如何使用RNDIS模式上网
参考:http://doc.openluat.com/article/600/0
三十二、PCB文件使用问题
32.1、合宙官方的PCB文件用 PADS的什么版本可以打开
9.5
三十三、语音通话问题
33.1、4G模块是否支持语音通话业务
4G模块支持电话的呼入、呼出、接听;但是因为没有语音编解码芯片,所以听不到通话声音
33.2、为什么Air720G模块无法使用中国移动卡的语音通话业务
Air720G仅支持联通3G和移动4G网络
目前,中国移动的语音通话业务在如下几种网络状态下可用:
- 回落到2G网络;但是Air720G不支持移动2G网络频段
- 回落到3G;但是移动3G网络已经退出,同时Air720G也不支持移动3G网络频段
- 4G网络的VOLTE;但是Air720G不支持这个功能
所以,Air720G模块无法使用中国移动卡的语音通话业务
但是支持中国移动的短信业务,因为短信业务不需要回落到2G和3G网络,直接在4G网络下使用2G网络的核心网就可以完成短信收发
33.3、天线厂调试天线时,如何提供来电自动接听的软件
- AT版本:开机后发送ATS0=1命令到模块,接收到来电,振铃1声后会自动接听
- Luat版本:在自己的脚本中添加如下代码
1) 2G模块
require "cc"
sys.subscribe("CALL_INCOMING", function(num) cc.accept(num) end)
2) 4G模块
ril.regUrc("RING",function()ril.request("ATA") end)
33.4、如何处理通话或者录音中的电流噪音(TDD噪音)
参考:http://doc.openluat.com/article/600/0
三十四、模块参数
34.1、4G模块
Flash:128Mb(16MB)
DDRRAM:256Mb(32MB)
主频:600MHz
三十五、Luat版本脚本开发小问题
35.1、Luat版本脚本运行框架
参考:http://doc.openluat.com/article/600/0
35.2、sys.taskInit创建的task有没有优先级之分
sys.taskInit创建的task实际上是Lua中的协程,无优先级之分,协程的挂起和运行完全由用户自己编写的脚本来主动控制,当前协程运行过程中,只能被当前协程中的sys.wait和sys.waitUntil挂起,不会被外部协程挂起
35.3、如何实现延时运行
可以使用定时器接口sys.timerStart或者sys.timerLoopStart实现延时,不阻塞任何业务逻辑
也可以在task协程中使用sys.wait或者sys.waitUntil实现延时,仅仅阻塞本task协程
也可以使用rtos.sleep接口实现延时,但是不建议这样使用,因为这个接口会使整个软件系统挂起
详情参考:http://doc.openluat.com/article/600/0
三十六、认证问题
36.1、模块做过哪些认证
在123.openluat.com中搜索证书,可查到具体模块的对应证书
36.2、客户产品SRRC认证注意事项
- 2G模块
1) 使用合宙官方发布的AT或者Luat版本的内核固件即可,不需要定制内核固件
2) 不要有重启模块或者给模块断电的逻辑,如果有外部硬件看门狗,要断掉硬件看门狗
3) 实现来电自动接听的业务逻辑,参考33.3章节
4) 模块射频头和测试仪器连接,测试仪器自行测试,不需要软件配置其他任何功能
5) 关键射频元器件清单如下
A.基带芯片 RDA8955L BBIC;GSM/GPRS single chip;1.8VFLASH(32Mb+32Mb);TFBGA142B;0.5mm pitch;7.57.01.21mm;ROHS 锐迪科微电子有限公司
B. 射频功放 RDA6625E SWITCH+PA;EGSM/DCS;551.1mm;ROHS;改善ESD;锐迪科微电子有限公司
C. 天线信息需要联系天线厂获取
36.3、模块有入网证书(CTA)吗
没有
模块都没有入网证书,只有终端产品才允许做入网认证,我们的模块本身是可以认证通过的,已经有几家客户的终端产品成功做过入网认证
4G模块终端产品,如果要做入网测试,参考:http://doc.openluat.com/article/600/0
三十七、SPI问题
37.1、如何用Luat脚本模拟实现SPI
参考:http://doc.openluat.com/article/600/0
三十八、I2C问题(仅适用于Luat版本)
38.1、如何用脚本驱动mpu6050
参考:http://doc.openluat.com/article/600/0
三十九、PPP拨号问题
39.1、WINDOWS下4G模块如何拨号上网
WIN7参考:http://doc.openluat.com/article/600/0
WIN10参考:http://doc.openluat.com/article/600/0
39.2、Linux下4G模块如何拨号上网
参考:http://doc.openluat.com/article/600/0
四十、时钟问题
40.1、如何同步时钟
参考:http://doc.openluat.com/article/600/0
上海合宙通信模块 - 合宙Luat,让万物互联更简单