常见问题

# 开关机 ## 无法正常开机原因 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方式重新下载。 字库芯片正确焊接如下图所示,缺口圆点在右下角位置: ![image.png](https://cos.easydoc.net/57061433/files/l4fabft1.png) # 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调用关闭接口,会报如下错误 ![image.png](https://cos.easydoc.net/22753220/files/l08ywduv.png) ## 数据收发延迟大、速度慢、经常失败、掉线断开 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升级文件无资源文件选项是什么意思,资源文件包括哪些类型? ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20210831171249809_image.png) 升级资源无资源文件:表示打包升级包时,不会包含选中的资源文件 资源文件:非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、手动生成差分包失败 ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211027151151159_image.png) 1、生成升级文件的时候,需要选升级文件包含core选项 ![image.png](https://cdn.openluat-luatcommunity.openluat.com/images/20211027151008958_image.png) 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是什么问题? ![image.png](https://cos.easydoc.net/22753220/files/l0955gaj.png) 这个不是问题,烧录后,第一次开机,没有文件正常 # 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