合宙Luat 2G/4G系列模块Lua版本串口功能汇总

Posted 合宙Luat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合宙Luat 2G/4G系列模块Lua版本串口功能汇总相关的知识,希望对你有一定的参考价值。



1


硬件概述



本文将描述Air系列模块(2G和4G模块)Lua版本上通用串口、调试串口、调试串口、USB口的特性和使用方法,先看一张对比图:


合宙Luat 2G/4G系列模块Lua版本串口功能汇总


若无特别说明,下文中描述的串口包括通用串口、调试串口、USB口三种,描述的串口通信的对端设备称作MCU。



2


应用层数据收发原理



注意:默认状态下,在合适的时间点(此时间点不可预知),系统会自动进入休眠状态;串口数据收发之前,必须通过pm.wake(...)接口使系统持续处于唤醒状态,才能保证收发功能正常;收发结束后,可以通过pm.sleep(...)接口允许系统自动休眠。

2.1   数据接收


在core中的应用层,有一个1460字节的缓冲区,串口驱动接收到的数据插入此缓冲区;脚本有轮询和中断两种方式,通过uart.read(...)接口读取缓冲区中的数据;


需要注意如下两点:

1)脚本读取的速度要大于数据插入的速度,否则会造成缓冲区溢出,数据出错;

2)MCU一次性发送给模块的数据,调用uart.read接口,并不一定能够一次性读取完整,必须使用“循环读取数据”+“数据拼接判断完整性”的方案来处理;例如MCU一次性发送1460字节的数据,模块使用轮询或者中断第一次读取数据时,缓冲器里面可能才接收到10字节的数据。


2.1.1  uart.read接口详解

uart.read(id, format)

--- 读取串口数据(此接口不会阻塞,立即返回)

-- @number id 串口ID

-- @string or number format 读取串口数据的格式,有如下几种

-- number类型的数字:表示读取指定长度字节的数据

--     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

--     如果缓冲区中的数据长度小于等于要读取的数据长度,则返回缓冲区中的所有数据,返回值为string类型

--     如果缓冲区中的数据长度大于要读取的数据长度,则返回要读取的长度的数据,返回值为string类型

-- string类型的*l:  表示读取到换行符

--     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

--     如果缓冲区中的数据没有 ,则返回缓冲区中的所有数据,返回值为string类型

--     如果缓冲区中的数据有 ,则返回到 结束的所有数据(包括 ),返回值为string类型

-- string类型的*n:  表示读取整型数据

--     如果缓冲区中没有数据,则返回0,返回值为number类型

--     如果缓冲区中的第一个字节的数据不是+、-、数字,则返回0,返回值为number类型

--     如果缓冲区中的前几个字节满足整型数据格式[+-]%d+,则按照最长匹配返回数据,返回值为number类型

-- string类型的*s:  表示读取到空格字符

--     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

--     如果缓冲区中的数据没有空格,则返回缓冲区中的所有数据,返回值为string类型

--     如果缓冲区中的数据有空格,则返回到空格结束的所有数据(不包括空格),返回值为string类型



2.1.2   
轮询方式读取数据

轮询方式比较简单,脚本定时调用uart.read接口读取数据、拼接数据、检查数据完整性、处理数据即可。

详细代码参考uart的demo。


2.1.3   中断方式读取数据

中断方式处理逻辑如下:

1)脚本调用uart.on(id, "receive", intFnc)注册中断处理函数intFnc;

2)脚本接收到core中产生的数据中断消息后,执行intFnc;

3)脚本在intFnc中循环调用uart.read接口读取数据、拼接数据、检查数据完整性、处理数据,直至没有数据可读;

什么情况下,core中才会产生数据中断消息呢?


当缓冲区为空时,收到数据才会插入缓冲区,然后产生数据中断消息;如果缓冲区不为空,收到数据时仅仅插入缓冲区,并不会产生数据中断消息。所以第3步要把缓冲区中的数据读完,这样才能保证以后收到的数据,可以产生中断消息,脚本可以及时处理。



详细代码参考uart的demo。


2.2  数据发送

脚本使用uart.write接口发送数据,一次性最多支持发送1460字节的数据;

可以通过异步消息来通知脚本数据已经发送成功,参考uart的demo。



3


相关常见问题



3.1  api文档在哪里

http://wiki.openluat.com/doc/luatApi/#uart

代码详见uart的demo。


3.2  休眠、唤醒和功耗控制

默认状态下,在合适的时间点(此时间点不可预知),系统会自动进入休眠状态;串口数据收发之前,必须通过pm.wake(...)接口使系统持续处于唤醒状态,才能保证收发功能正常;收发结束后,可以通过pm.sleep(...)接口允许系统自动休眠。

如果项目不要求低功耗,为了编程方便,可以调用pm.wake使系统一直处于唤醒状态。

如果项目要求低功耗,除了动态控制休眠唤醒外,还要使用uart.close关闭串口,这样才能完全消除串口功能的功耗。


3.3  2G模块的调试串口可以用来做普通数据传输使用吗

可以用来做普通数据传输,但是不建议使用,原因有如下两点:

1)调试串口数据传输不稳定,很容易丢失数据;必须在应用层之上增加重试和容错机制。

2)调试串口主要用于烧写固件和输出日志,有一套专用协议,如果要用做普通数据传输,必须按照这套协议开发对端程序。

有需要的话,参考hostUart的demo。


3.4  4G模块的USB口可以和PC之间进行数据传输吗

USB在PC端映射出的ASR Modem Device AT口可以和PC进行数据传输。

代码详见usbdata的demo。


3.5  RS485通信的收发方向控制

可使用uart.set_rs485_oe接口配置此功能。请参考:

http://wiki.openluat.com/doc/luatApi/#uartset_rs485_oe


3.6   串口无法数据通信

检查一下串口电平是否匹配,软件上是否进入了休眠。


以上就是合宙Luat 2G/4G模块Lua版本通用串口、调试串口、USB口的特性和使用方法,如有疑问或建议,请留言给我们吧~



合宙Luat 2G/4G系列模块Lua版本串口功能汇总



合宙Luat 2G/4G系列模块Lua版本串口功能汇总



更多福利,敬请期待


合宙Luat 2G/4G系列模块Lua版本串口功能汇总




Luat相关教程文章:


Luat小企业系列原创文章:

合宙Luat将陆续推出小企业系列原创作品,敬请关注!




 ▼
Luat热文推荐





以上是关于合宙Luat 2G/4G系列模块Lua版本串口功能汇总的主要内容,如果未能解决你的问题,请参考以下文章

合宙Luat | VSCode全新LuatIDE插件版本发布,行业高效开发再添利器

Air724UG开发板串口教程

lua 二次开发合宙4G模块

Lua语言(stm32+2G/4G模块)和C语言(stm32+esp8266)从字符串中提取相关数据的方法-整理

Lua语言(stm32+2G/4G模块)和C语言(stm32+esp8266)从字符串中提取相关数据的方法-整理

Lua语言(stm32+2G/4G模块)和C语言(stm32+esp8266)从字符串中提取相关数据的方法-整理