常见问题
# 开关机
## 无法正常开机原因
1. 确定模块供电端是否在工作范围内,电压是否稳定 (模块主供电VBAT:3.3V~4.3V)
2. 是否有拉低开机信号去执行开机动作 (PWRKEY拉低1.2秒以上,或者Lua版本VBUS管脚供电,来触发充电开机)
3. 复位脚电平是否处于高电平状态( 拉低RESET_IN_N引脚100ms以上可使模块复位)
## 低电自动关机后,等电压恢复正常,为什么开不了机?
1.3基线增加了低电压检测关机功能,低电压关机后需按复位键,或者vbat完全断电,或者vbus供电(at版本不行),都可以重新上电开机。
## 不开机&不识别usb端口&烧录不了固件&开机出现SPR2端口uboot模式(变砖),处理步骤如下:
1.正常情况,模块vbat供电,powerkey 管脚拉到地1.5s 以上就可以开机,1.8v输出就是开机标志
2.先看是什么情况下导致的?
(1) 如果是烧录程序导致不识别端口,大概率是变砖,用uboot方式烧录,烧录方法参考第8点。
(2) 如果是第一次打样,按如下方式排查:
3.接个好的板子看能不能识别到端口,排除电脑环境和usb线和usb驱动问题,检查下usb座子到模块之间线路有没问题?
4.也可以直接飞线到模块usb脚到电脑usb口测试,把tvs管和电容都去掉测试。
5.模块供电,复位脚电压,1.8v电压是不是ok ,1.8v有没对地短路,
断电后万用表打到二极管档,红接地,黑接vbat,1.8v ,usb三个脚测量,数值在400-500是正常,如果偏差大可能有硬件损坏。
6.按开机键,1.8v出来没,如果有1.8v说明开机了
7.上面都没问题,用uboot烧录个at固件试下。
8.uboot强制烧录步骤:先选个at固件,勾uboot点下载,然后powerkey脚对地短接,uboot和1.8v短上,最后通电,看到 进度条在跑了就行了,烧录完后要断开1.8v和uboot管脚
9.如果能烧录成功,但是不能识别到usb虚拟端口,一般是vbus没供电或者tvs管导致,可以去掉usb上的tvs管和电容测试。
10.如果设备管理器一直有SPR2端口:
(1)看是否uboot和1.8v短路。
(2)uart2的rx和tx是否短路,串口是否对地短路。
(3)1.8v是否对地短路。
(4)KEYIN1管脚是否一直被拉高。
(5)如果是烧录中途失败导致,就用uboot方式重新烧录个at固件。
11.字库芯片焊反了,导致的每次下到一半就失败
需重新焊接字库芯片,然后通过boot方式重新下载。
字库芯片正确焊接如下图所示,缺口圆点在右下角位置:

# USB
## 识别不到usb的可能情况:
(1)没有安装usb驱动
(2)DM、DP短路、接反或者被打坏
(3)VBUS引脚没接或者VBUS电压值低于3.6V
(4)查看模块是否正常开机(测量1.8V引脚电压,开机是1.8v)
(5)如果电脑可以进入下载模式,但是识别不到USB端口,有可能是模块变砖,可以重新烧录救砖固件恢复
(6)可以换根线试试,确认一下是不是线的问题 ,线是否支持数据传输功能。
(7)usb口可以下载,但是电脑没能发现设备,一般是vbus没供电导致
## 插着USB功能都正常,拔掉USB,产品有时正常,有时会自动重启是什么原因?
可能是模块拔掉usb后,供电不足;
拔掉usb后,示波器监测模块vbat或v-global引脚电压看看;3.3V 下降沿触发监控vbat看下;
也有可能是拔掉usb,模块自动休眠,软件bug导致重启
# SIM卡
## sim卡不识别问题?
sim卡不识别按以下步骤进行:
1:看模块开机没?at指令能不能用?at+cpin?返回ready,代表读到卡,如果返回error,按以下几点排查:
2:sim卡是不是Ok?sim卡方向有没反,注意卡座缺口是方向
3:每个脚对地用万用表,打到二级管档位量下,红接地,黑接每个管脚,值是400-500之间正常。
4:看模块与卡座之间连线有没有问题,引脚对地阻值是不是正常,引脚间有没短路,
5:原理图和Pcb网络名与sim卡座实物对不对,卡座是否接触良好,如果sim卡一插入,vdd和clk就对地短路,一般是卡座问题。
6:示波器测试下sim_vdd波形,有个1.8-3.3v的高电平跳变,如果波形正常,一般是卡座和模块引脚之间问题,要识别到卡,才会有电压输出。
7:如果以上都排除了,重新烧下at固件看下,1.2基线不支持自动切换sim卡,默认sim0,1.3基线可以支持自动切换
8:如果是贴片卡,可以先拆下贴片卡,飞线到一个可以识别到卡的卡座到模块管脚,看下是否贴片卡问题
## 上电后在插卡,不能自动识别,一定要上电前插卡吗
是的,或者重启一下,或者增加热插拔功能。 [SIM卡热插拔功能](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/MRawBmwZ#nav_8)
# 网络注册和附着
## 无法注册网络、注册网络慢
1. 先确认下模块是否识别到了SIM卡
2. 可以先确认下SIM卡是否欠费(4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络),流量是否用完(可以咨询卡商)
3. 检查天线是否匹配,检查天线是否连接、天线连接座子的接口是否正确、天线是否损坏(换天线确认)
4. 换卡、换板子对比测试,确保使用正常的硬件和sim卡测试
5. 检查模块是否支持当前设备所在地的网络制式
6. 偏远地区的网络覆盖可能不全,或者产品的天线射频指标不合格,想办法用手机对比测试;用手机对比测试时,注意手机要设置为和模块同样的网络制式,同时借助Cellular-Z工具确认,详情参考:[如何判断主板的4G/2G信号接收性能的好坏](https://oldask.openluat.com/article/1002)
7. 环境因素(车库、地下室、电梯等)
8. 卡是不是专网卡,是否机卡绑定
## 模块如何设置APN
1) 如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置
2) 如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后在main.lua尽可能靠前的位置调用link.setAuthApn(prot,apn,user,pwd)进行设置 [专网卡设置流程](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/WmOWRacE)
# UART
1. 数据位仅支持8bit。
2. UART3复用了按键的keyout4(RXD )和5(TXD),不能和矩阵键盘一起使用
3. UART2和UART3在LuatOS-Air开发下,可用作数据通信,但模块如果支持蓝牙功能,UART2会被蓝牙数据通信占 用,不能再做为通用串口进行数据通信
4. 模块每次开机(包括异常重启),UART2都会自动打印一段LOG,此LOG不能通过软件关闭
# GPIO口
## 有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31
pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
## gpio的最大负载电流和灌电流是多少?能直接驱动led灯吗?
输出负载2ma,灌电流低于5ma,建议接三级管驱动led灯。
## GPIO7能不能用?
GPIO7 默认被底层 休眠复用时候,不受控的问题,源于默认内部将GPIO7 和系统休眠做了硬件关联。(如果模块不休眠,则能正常控制,但是LUAT 不插USB ,默认就会休眠)
解决方案:
AT+GPIO7ENABLE=1,18 此固定指定就是将 绑定到GPIO7 上的系统功能,转移到其他GPIO, 比如:GPIO18。
这样GPIO7 就能当普通GPIO口用了。
# LDO输出
调整VMMC的输出电压时,也会同时影响到VMMC电压域的GPIO:GPIO24,GPIO25,GPIO26,GPIO27,GPIO28
调整VCC_LCD的输出电压时,也会同时影响到VCC_LCD电压域的GPIO:GPIO0,GPIO1,GPIO2,GPIO3,GPIO4
# SOCKET
## 网络测试工具
[LuatOS网络测试工具](https://netlab.luatos.com/)
## 连接服务器失败
1. 服务器必须是公网地址
2. 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
3. 如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能)
4. 检查下模块信号、网络注册、网络附着、PDP激活状态
5. 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】
6. 日志分析网络连接失败:先检查SIM卡是否被识别(+CPIN: READY)。识卡后检查观察“MODE”的值,MODE 17,17为4G,其他如下:3,1(2G) , 3,2(2.5G) , 3,3(3G) , 5,7(5G)。最后观察PDP是否激活(AT+CGDCONT?)(+CGDCONT: 5,“IP”,“cmiot”,“10.39.132.191”,0,0)。正常如果都满足,网络是可以正常使用的。如果出现网络随机断开连接,注意看网络信号值(AT+CESQ)(AT+CSQ)。
## 最多同时支持多少个连接
最多10个连接,注意:LuatOS-Air版本的lib中的一些功能模块会用到socket连接,例如update、agps、lbsLoc、errDump;同时支持的连接个数包含lib中的这些连接;例如在某个时间点,update和lbsLoc在工作,会占用2个socket连接,这个时间点用户的应用脚本中最多能够同时使用的连接个数就少2个了
## socket异常的情况排查
1. 搜索socket,如果出现socket:connect: core sock conn error或者socket:connect: connect fail,则表示socket连接失败
2. 搜索socket,如果出现send fail则表示发送失败
3. 搜索socket,如果出现socket.rtos.MSG_SOCK_CLOSE_IND则表示socket被动关闭
## tcp连接,心跳包建议多长时间一次
因为基站资源有限,如果不发心跳包保活,基站会主动断掉链路,回收资源,模块和服务器无感,并不知道链路已经断开。建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
## SOCKET使用注意事项
- 同步
创建、连接、发送数据、接收数据、关闭,必须在同一个task中
发送数据等待发送结果时,task被挂起,此时如果接收到数据,只能暂存到接收缓冲区,应用无法及时处理
接收数据存在粘包问题
- 异步
创建、连接、异步发送、关闭,必须在同一个task中;异步缓存待发送数据在其他task中;接收数据可以在其他task中,也可以在非task中
发送数据等待发送结果时,task被挂起,此时如果接收到数据,应用可以及时处理
接收数据存在粘包问题
如下在别的TASK调用关闭接口,会报如下错误

## 数据收发延迟大、速度慢、经常失败、掉线断开
1. 检查下是否存在代码逻辑错误,导致异常
2. 检查下是否不断重启,导致异常
3. 检查下服务器网络是否稳定,不要用内网穿透方式搭建服务器
4. 检查下使用环境是否网络覆盖不好,例如车库、地下、电梯、山区等
5. 检查下模块信号、网络注册、网络附着、PDP激活状态
6. 排查是否为设备天线问题:发出来设备的天线调试指标参数给合宙技术支持人员
7. 如果经常出现连接被动断开:
1) 如果直接使用的是tcp udp socket连接,检查下心跳包的频率,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
2) 如果使用的是mqtt连接,检查下mqtt keep alive的时间,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟
3) 如果使用的是mqtt连接,检查下是否在1.5倍的mqtt keep alive的时间,没有成功发送数据到服务器,就会被被服务器主动断开,这种情况一般都是发送数据超时引起的
8. 排查是否为网络问题:如果同一地点的所有设备都有问题,可能和网络环境有关系;使用手机设置为同样的网络模式,对比测试确认下;或者把设备移动到其他距离此地点比较远的地方对比测试。
9. 排查是否设备单体问题:如果同一地点,某些设备正常,某些设备异常,按照如下几种情况分析
1) 分析正常设备和异常设备的使用环境是否相同:
A. 如果不同,例如异常设备固定在钢制墙壁上,正常设备放置在桌子上,钢制墙壁可能对天线射频有干扰,将异常设备和正常设备放置在同样的使用环境中,再对比测试
B. 如果相同,参考第2)步
2) 分析正常和异常的设备,驻留的小区是否相同:
A. 如果相同,重点排查异常设备的天线射频部分,分析不出结果的话,异常设备寄给合宙分析
B. 如同不同,多测试几次,确认下,是不是在异常小区内很容易出问题,如果异常小区很容易出问题,可能就是小区拥堵造成的
10. 提供日志给合宙技术支持人员
## 有没有哪个函数可以知道当前系统总共建立了几个SOCKET连接?
socket.printStatus()可以打印当前连接的socket信息
## 如何统计流量
运营商按照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下载一个文件,实际消耗的流量比文件本身要多呢?跟上个例子类似,文件本身大小仅仅是用户数据,除了用户数据外,还有如下几部分的流量消耗:
1. 连接服务器消耗流量
2. http请求时有http头,服务器下发数据时也有http头
3. 每包数据都有tcp头和ip头
4. 重传也会消耗流量
5. 与服务器断开连接也需要消耗流量
## 心跳包发送的数据是什么?
- 同步
mt:send("ping")手动发送,ping心跳包内容可以根据自己需要写
- 异步
mt:asyncSelect(60, "ping")连接后设置,60心跳包时间,单位秒,ping心跳包内容可以根据自己需要写
## 4g模块可以同时作为服务器和客户端使用吗?
不能作为服务器使用, 模块能获取的是运营商分配的内网IP
## 服务端意外关闭了,socket断开了,设备这边怎么能快速检测到
可以通过注册LIB_SOCKET_CLOSE_IND消息来判断
[LuatOS-Air script lib内部消息 socket](https://doc.openluat.com/wiki/21?wiki_page_id=2302#socket_104 "LuatOS-Air script lib内部消息 socket")
## netlab.luatos.com这个测试服务器,如果模块刚上线就被踢,或者上线后发送给模块的数据模块未收到,或者拿HTTP去请求它,出现刚上线就被踢
可以尝试重置你的网络(重启路由器)
## 用socket/demo,连接https://netlab.luatos.com/测试服务器测试,掉线严重
可以换一张卡测试,确认是不是卡的问题。
## 为什么我一包数据只有不到50B的数据,为什么一天消耗的流量要远远大于实际传输值
例如:如果使用的是TCP协议,需要三次握手四次挥手才算完成了一次数据交互,原始数据不多但是由于TCP协议决定的一包数据必须要加包头包尾帧校验等,所以实际消耗的流量不止50B,部分运营商有限制每一包数据必须1KB起发,不足1KB也会加各种校验凑足1kb。
# MQTT
## 连接服务器失败
1. 检查下模块信号、网络注册、网络附着、PDP激活状态
2. 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】
3. 使用mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
4. 部分国外的开源项目提供免费的MQTT代理服务器,因为网络的原因,国内存在严重的延迟或者丢包现象,导致程序运行出现问题,此现象在AT开发时影响严重
## 频繁掉线是什么原因
1. 检查下是否存在代码逻辑错误,导致异常
2. 检查下是否不断重启,导致异常
3. 检查下服务器网络是否稳定,不要用内网穿透方式搭建服务器
4. 检查下使用环境是否网络覆盖不好,例如车库、地下、电梯、山区等
5. 排查是否为设备天线问题
6. 如果经常出现连接被动断开:
1) 检查下mqtt keep alive的时间,一般建议使用2分钟【如果每2分钟内都有应用数据收发,则可以把mqtt keep alive的时间设置的长一点儿】,除非有强制要求,否则不能太长,也不能太短。不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭;不建议少于1分钟,太短时间可能会因为网络环境波动导致上行数据发送超时,可能超过1.5倍的心跳时间,从而被服务器主动断开连接
2) 检查下是否在1.5倍的mqtt keep alive的时间,没有成功发送数据到服务器,就会被被服务器主动断开,这种情况一般都是发送数据超时引起的
## 如果有很多个mqtt设备连接到服务器,收发数据是怎样区分设备的
通过clientid确保设备唯一性,可以设置IMEI为clientid
## 模块一直狂发 [W]-[socket.client:recv] error CLOSED
连接关闭了,一直在循环接受数据,没退出循环
## mqtt.client() version MQTT版本号"3.1.1","3.1","5.0"都支持吗
支持3.1和3.1.1
# HTTP
## 是否支持HTTPS
支持,TLSV1.2
## 为什么频繁请求会失败
支持的http连接总数有限,最多支持10个连接,包括lib库的连接
## 为什么POST JSON格式的数据会出现失败
参考http的demo,在head参数中传入{[“Content-Type”]=“application/json”}
## 数据接收缓存问题
有如下两种缓存机制, http.request接口可以设置使用何种缓存机制,http的demo中有详细示例可供参考
1) 内存缓存:内存中有一个缓冲区,在项目剩余可用内存的范围内,此缓冲区没有大小限制,例如项目可用内存剩余200KB,则此缓冲区的理想最大值是200KB;收到的数据都会缓存到此缓冲区,如果收到的数据超过缓冲区大小,会导致内存不足重启;数据接收完整后,通过回调函数传出缓冲区数据,供用户应用脚本使用
注意:缓冲区位于内存中,断电或者重启后,缓冲区中的数据会被清空;如果接收的数据过多,不建议使用内存缓存的机制,可能会导致内存不足重启
2) 文件缓存:接收到的数据可以保存在文件中,在文件系统剩余空间的范围内,此文件没有大小限制,例如项目剩余文件系统空间200KB,则此文件的理想最大值是200KB;收到的数据都会保存到此文件中,如果收到的数据文件最大值,会导致保存失败,新数据被丢弃;数据接收完整后,通过回调函数传出文件完整路径,供用户应用脚本使用
注意:文件位于文件系统中,断电或者重启后,文件不会被自动清空删除;如果文件已经不再使用,一定要通过os.remove接口将文件删除。否则会一直占用文件系统空间,导致可用文件系统空间变小
## body为nil或者为{}时注意事项:
当body为空或者为{}时,要指定head参数,例如Content-Lenth=0
## http函数是长连接吗?
不是长连接
# ftp
## 关于不支持主动模式:
模块ftp默认是被动模式,不支持主动模式,无法设置主动模式,公网下要想模块正常连接服务器,服务器肯定不能设置为主动模式,否则哪家模块都不能用。
## 发送带0x0d 0x0a这些数据会丢失
需要通过ftp.checktype("I",0)设置为二进制方式传输文件,否则传输过程中会丢弃换行符
# 云平台
## MQTT链接腾讯云 , 不断的重连
确认一下是不是时间戳不对导致的,腾讯云注册是需要时间戳的
## CTWing是否可以自动注册?
目前CTWing还未开放自动注册
## 华为云连接被拒
确认CA证书是否正确
## 华为云心跳时常建议
心跳时间限定为30至1200秒,推荐设置为120秒
# FOTA(远程升级)
## 1、差分包下载完成之后,对差分包会不会有校验?
差分包下载完成之后,下次重启过程中,会对差分包进行校验;
如果校验通过,则自编程应用新版本,之后自动删除差分包;
如果校验失败,则自动删除差分包
所以说,差分包下载过程中,如果异常断电或者异常重启,并不会出现程序丢失或者变砖的问题
## 2、远程升级完需要多长时间?
升级时间根据差分包的大小不同,升级时间会不同。跨越的版本越大,差分包越大,升级所需的时间越长。实测,升级一个600k左右的差分包,3分钟内能升级完成。
## 3、空中升级能跨基线升级吗?
不可以,1.2基线升级1.3基线会升级失败。
## 4、空中升级结束后模块变砖
1、密钥加密脚本与未加密脚本和luac加密之间不能相互空中升级,如果本地烧录的脚本为未加密脚本,云平台脚本为密钥加密的脚本,升级结束后模块会变砖。[脚本加密详细介绍](https://doc.openluat.com/wiki/21?wiki_page_id=2355 "脚本加密详细介绍")
## 5、luatools升级文件无资源文件选项是什么意思,资源文件包括哪些类型?

升级资源无资源文件:表示打包升级包时,不会包含选中的资源文件
资源文件:非lua脚本的文件都算资源文件
## 6、使用update函数更新的时候,出现这个错误是什么原因(-96)
当返回值为-96时,可能是由于多种原因造成的。但是返回-96时就是固件校验错误。
具体原因查看上面:[设备升级失败列表](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/Sud8hTJ4#nav_10 "云平台查看升级日志")
## 7、升级服务已经配置了全项目升级,为啥还是有些设备报不在升级列表
确认前面是否有低版本配置了IMEI号
## 8、请问差分工具有离线版本吗?
没有
## 9、远程升级对NVM,文件系统的影响
### 一、远程升级时,会清除原有的para.lua吗?
默认不会
如果需要清除,根据产品的业务逻辑,在合适的时间点,调用nvm.restore()恢复出厂设置即可
### 二、远程升级时,可以在config.lua中增加新的参数吗?
可以,需要执行一次初始化动作才会生效,一般是直接重启执行初始化
### 三、远程升级时,可以在config.lua中删除旧的参数吗?
可以,但是操作起来比较复杂,不建议这样做
如果旧的参数没用了,可以在config.lua中一直保留;脚本代码不要再读写这些参数就行了
NVM详细说明见:[nvm(参数存储)](https://doc.openluat.com/wiki/21?wiki_page_id=2328 "nvm(参数存储)")
### 四、远程升级时,自己创建的文件会被删除吗?
不会,会保留
## 10、循环升级
三次握手,连接成功后立刻断开,服务端可以收到请求信息(实际未连接成功,服务器也未下发差分文件,服务器误以为模块下载成功了,判定此次请求为升级成功,到达模块升级上限,服务器便会禁止模块升级)
流量卡白名单问题,用定向Ip的物联网卡,需要把域名或IP加入白名单才能使用。
## 11、开机后fota升级,底层会检测电量吗?
不会
## 12、手动生成差分包失败

1、生成升级文件的时候,需要选升级文件包含core选项

2、确保上传文件正确,升级版本和基础版本CORE支持的功能需要相同,选择.bin后缀的升级文件 [自建第三方服务器升级过程](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/Sud8hTJ4#nav_12 "自建第三方服务器升级过程")
## 13、可以远程降级吗?
合宙iot平台,不支持远程降级操作,如果新脚本有问题,可以把代码恢复到之前的版本,然后把版本号+1。例如:新脚本为1.0.2,之前版本为1.0.1,需要恢复到1.0.1版本,需要把1.0.2代码恢复成1.0.1版本对应代码,版本号改为1.0.3,然后在去升级。
core为差分升级,故不支持远程降级。
# NTP(时间同步)
## 如何获取当前时间
目前提供API是misc.getClock()。或者直接使用os.date("*t"),返回一个table:{year=2017,month=2,day=14,hour=14,min=19,sec=23},再从table里获取数据
## os能够set时间或者timezone吗 ?
可以通过misc.setClock(t, cbFnc)设置时间,时区没有接口可以设置,可以参考
misc.setClock()设置接口通过AT+CCLK命令设置。
## 怎么关闭4G时间同步?
联网成功,基站自动同步时间,关不掉
# 文件系统
## 获取文件剩余空间
通过rtos.get_fs_free_size()返回文件系统的剩余空间,单位为字节
## 为什么读文件失败
1. 如果读取的是本地烧录的文件,检查下文件有没有烧录以及完整路径是否正确
2. 如果读取的是程序运行过程中动态创建的文件,检查下文件是否创建成功【文件系统空间不足可能会导致文件创建失败】以及完整路径是否正确
## luatools烧录本地的文件在那个目录?
luatools烧录本地的文件在/lua这个目录下
例如:在luatools烧录1.txt文件后读取文件路径为:io.readFile("/lua/1.txt")
## 空中升级自己创建的文件会被删除吗?
不会,会保留
# NVM
## nvm适用于什么场景?
nvm每次更新参数,保存到参数文件中时,会把所有参数拼接在一起,然后执行一次全量写文件的动作;此拼接操作消耗内存较多,如果数据量很大,需要的内存就很大,在系统可用内存紧张的情况下,很容易出现内存不足,从而导致参数更新失败,严重情况下还会造成系统重启
因此,nvm仅适用于小数据量的简单键值对参数;不适用于大容量数据的存储管理,如果数据量超过10KB【仅仅为经验值,实际能够存储的数据量和系统运行过程中的动态可用内存有关:可用内存越小,允许存储的数据量就越少;可用内存越大,允许存储的数据量就越多,但是也不建议超过10KB】,建议参考fs的demo直接使用io接口操作文件来管理
## 本地烧录时会清除原有的para.lua吗?
原有的para.lua是在nvm.init(“config.lua”,true)时创建的,则不会清除
原有的para.lua是在nvm.init(“config.lua”)时创建的,则会清除
## fota远程升级时,会清除原有的para.lua吗?
默认不会,如果需要清除,根据产品的业务逻辑,在合适的时间点,调用nvm.restore()恢复出厂设置即可
## 出现lualibc_fopen fail -4200062,0,/nvm_para.lua是什么问题?

这个不是问题,烧录后,第一次开机,没有文件正常
# CALL(通话)
## 打不了电话
1. 确认能不能正常注册上网络,有没有欠费。
2. 确认是否开通VOLTE 功能, 只有开通 VOLTE 功能才能进行语音通话。
3. 确认固件是否支持VOLTE功能
## 天线厂调试天线时,如何提供来电自动接听的软件
ril.regUrc(“RING”,function()ril.request(“ATA”) end)
## 支持dtmf解码功能么,模组在电话通话中,能识别对方电话按键吗?
不能,暂不支持
# SMS(短消息)
## 如何开通VOLTE功能?
对于仅支持 =4G网络的而言,移动,联通卡不需开通VOLTE可以支持短信功能,电信卡只有sim卡开通VOLTE 功能才能使用短信功能。
如何开通VOLTE功能,有如下几种方式:
登录运营商手机端app开通
登录运营商官网开通
拨打运营商客服电话开通
## 物联网卡支持短信功能吗?
一般来说,物联网卡是不支持短信功能的,具体需要咨询物联网卡供应商
## 支持移动、电信,联通卡的短信功能吗?
支持,电信sim卡必须开通VOLTE功能,使用支持VOLTE功能的固件
## 是否支持彩信功能
不支持
## 用的luat底层,接收短信函数 sms.setNewSmsCb(procnewsms)自己写了。收到的短信还会默认存储到sim卡或存储器中吗?
不会,库里会删除
# PB(电话本)
## lua版本的电话本储存类型支持什么类型?
储存类型仅支持"SM"类型
# Location(基站/WIFI定位)
## wifi定位失败的可能原因有哪些?
烧录wifi demo,抓日志分析:
1. 如果没有搜索到wifi热点,用手机对比确认下是否可以搜索到附件wifi,如果手机可以搜到,确认下模块的板子上是否有接wifi天线
2. 如果可以搜索到wifi热点,但是wifi热点很少,用手机对比确认下搜索到附件wifi数量,如果数量差别太大,确认下模块的板子上是否有接wifi天线或者所接的天线是否支持2.4G频段
## 基站定位获取的经纬度是什么格式的?
1.基站定位获取的经纬度为WGS-84格式
2.各种坐标系说明以及转换方法参考:[坐标转换](http://old.openluat.com/GPS-Offset.html)
## 当同时使用基站定位和wifi定位怎么判断是基站定位成功了还是wifi定位成功了?
* 服务器返回的第一个字节为0x00表示基站定位成功返回0xFF表示WIFI定位成功,相关lib和demo已更新
## wifi定位和基站定位的区别
* wifi定位和基站定位都是通过调通lbsLoc.request接口来实现定位
* 主要区别是,wifi定位要先通过wifiScan.request接口先搜索WIFI热点信息(MAC地址和信号强度),然后把搜索到的WIFI热点信息传入lbsLoc.request接口的最后一个参数,后台会查询WIFI热点对应的经纬度。
## wifi定位精度
* 根据设备获取的WiFi的信息进行定位,WIFI定位精度一般不受使用环境影响,主要和单一WIFI辐射半径、WIFI覆盖密度有关。一般来说,WIFI精度在3米-200米左右。
## lbsLoc.request()使用这个的时候,返回值是4,表示接收服务器应答超时,这个怎么解决?
免费的服务器承受不了高并发压力,可以加大lbsLoc.request接口的tiemout参数来提高成功率
## 基站定位精度
* 搜索到的小区越多,定位的精度越高;一般来说,城市中心定位精度比郊区和农村定位精度高,城市中心的定位精度在几十米到几百米不等,郊区和农村的定位精度更低,可能会有几千米甚至更多的误差
## WIFI定位支持国外定位吗?
不支持,只支持国内定位
# Audio
## 播放提示priority error
原因是优先级高的音频还没有播放完。分析方法:在audio.lua开源库里看日志打印的地方。解决办法:可根据应用需要提高优先级
## TTS功能问题
不支持英文单词朗读,仅支持单字母朗读,例如bye,不会读成“白”,会读成“比、外、一”
数字朗读时,根据特殊标记,可作为数值连续,也可以作为号码连读。默认是自动识别;
例如"10086",默认状态下,根据语义,可能读成“幺零零八六”,也可能读成“一万零八十六”。
如果主动配置为号码来读,加[n1]标记,变成"[n1]10086",会读成“幺零零八六”
如果主动配置为数值来读,加[n2]标记,变成"[n2]10086",会读成“一万零八十六”
更多文本标记参考:[Aisound5.pdf](https://cdn.openluat-luatcommunity.openluat.com/attachment/20201113135045712_Aisound5.pdf)
## 为什么设置通道没用?
1. 通道设置是否正确
2. 看mic ,喇叭,否损坏,固件是否选对
## 目前RTMP暂不支持推流,只支持拉流
支持的音频格式:mp3
# 定时器
## 定时器精度问题
LuatOS-Air开发最小仅支持5毫秒的定时器,超时时间最小1ms(实际支持的最小时间是5ms,小于5ms的时间都被转化为5ms) 超时间最大0x7FFFFFFF(24.85天)。
另外毫秒级的定时器的误差较大,原因可参考[LuatOS-Air应用脚本运行框架](https://doc.openluat.com/wiki/21?wiki_page_id=1926)
## 一个项目中sys.timerLoopStart定时器,能开几个?有没有限制?
LuatOS-Air最多支持50个定时器
## sys.timerLoopStart定时器的值,可以用变量动态改动吗?
不可以,第一次调用的时候会把值传进去,之后会用第一次传的值,不会随着变量值的变化而改变
# JSON
## 自己添加的JSON字符串解析失败
搜索JSON解析网页,先把这段JSON字符串放进网页里看JSON格式是否正确。如果正确,在看看自己代码里的转义字符有没有加对加全。
## json.encode()生成的json顺序是随机的吗?
是的,是随机的
# 重启
[重启原因分析](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/u0y1HYqr)
# 蓝牙
[蓝牙相关常见问题](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/XpAd3u5X)
# UI开发
# LuatIDE
[终端异常](https://doc.openluat.com/wiki/21?wiki_page_id=2975 "终端异常")
[代码行上的错误提示](https://doc.openluat.com/wiki/21?wiki_page_id=2976 "代码行上的错误提示")
[无法与设备通讯](https://doc.openluat.com/wiki/21?wiki_page_id=2977 "无法与设备通讯")
[运行缓慢/卡顿](https://doc.openluat.com/wiki/21?wiki_page_id=2980 "运行缓慢/卡顿")
[IDE无法安装最新版本](https://doc.openluat.com/wiki/21?wiki_page_id=2982 "IDE无法安装最新版本")
# HMI