USB虚拟UART功能
一、演示功能概述
USB 虚拟 UART 是一种通过 USB 接口模拟传统串行通信端口(COM 口)的技术。它允许计算机通过 USB 接口与支持 UART 协议的设备进行通信,而无需额外的物理串口硬件。非常适合linux 作为主控,调用air8000上的wifi,4g,蓝牙,gps,等硬件资源。
本章节将使用 Air8000 整机开发板演示 USB 虚拟 UART 功能的使用方法
二、准备硬件环境
参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。
2.1 Air8000 整机开发板
三、准备软件环境
1. 烧录工具 Luatools;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V2005_Air8000;此页面有新版本固件的话选用最新版本固件。
3. LuatOS 需要的脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8000/tree/master/Core_board_demo/usb_uart
4. lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 开发板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。
四、软硬件资料
4.1 API 接口介绍
uart - luatos@air8000 - 合宙模组资料中心
4.2 硬件设计介绍
USB 虚拟串口功能需要保证模组 usb 能被电脑正常识别三个端口,可以在设备管理器中查看。其中(COM59)为虚拟串口,串口助手打开此虚拟串口进行通讯
USB 硬件电路设计参考:USB 接口电路 - luatos@air8000 - 合宙模组资料中心
五、代码示例介绍
5.1 代码介绍
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "usb_uart"
VERSION = "1.0.0"
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
_G.sysplus = require("sysplus")
--[[
注意: 若使用普通串口调试功能, 需要以下条件之一才能收到数据
1. 把DTR设置为高电平
2. 先发送一次数据
]]
log.info("main", "usb uart demo")
local uartid = uart.VUART_0 -- USB虚拟串口的固定id
--初始化
local result = uart.setup(
uartid,--串口id
115200,--波特率,其实无所谓, 纯虚拟串口
8,--数据位
1--停止位
)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)
local s = ""
repeat
-- s = uart.read(id, 1024)
s = uart.read(id, len)
if s and #s > 0 then -- #s 是取字符串的长度
-- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
-- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
log.info("uart", "receive", id, #s, s)
uart.write(uart.VUART_0, s)
-- log.info("uart", "receive", id, #s, s:toHex())
end
until s == ""
end)
local tx_buff = zbuff.create(24)
tx_buff:set(0, 0x31)
-- 并非所有设备都支持sent事件
uart.on(uartid, "sent", function(id)
log.info("uart", "sent", id)
end)
sys.taskInit(function()
while 1 do
-- uart.write(uart.VUART_0, "hello test usb-uart\r\n")
uart.tx(uart.VUART_0, tx_buff,0, tx_buff:len())
sys.wait(1000)
end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
5.2 功能测试
烧录完脚本后,模组会隔 1s 往虚拟串口中发送 32 个数字 1,但是需要满足以下两个条件其中之一才会发送:
条件一:把 DTR 设置为高电平 条件二:先发送一次数据给模组
下面将分别演示两个不同的条件下的现象:
5.2.1 DTR 设置为高电平情况
串口助手打开 DTR 选项的话,打开串口的时候模组会识别到串口 connected,就可以进行通讯了。
5.2.2 先发送一次数据给模组情况
串口助手不打开 DTR 选项的话,需要先给模组发送一次数据后才能正常通讯。
六、总结
至此,我们已经用 Air8000 整机开发板演示了 USB_UART 功能。