0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IO序列化操作:提升系统互操作性的关键技术

青山老竹农 来源:jf_82863998 作者:jf_82863998 2026-02-25 16:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在异构系统并存的今天,IO序列化操作成为实现系统间互操作性的核心技术。通过标准化的数据格式(如JSON、Protobuf、Hessian等),不同语言、平台的系统得以无缝交换信息。合理设计序列化策略,可大幅提升系统的集成能力与扩展性。

一、概述

ioqueue 模块提供了 IO 序列操作的功能,可以通过硬件定时器精确控制 GPIO 的操作时序。

注意事项:

对于 Air700EXX 系列、Air780EXX 系列、Air8000 系列模组,硬件定时器有如下要求:

硬件定时器 id:0-5,六个硬件定时器,

定时器精度:20 微秒,为硬件支持的最小时间单位。

3 和 5 固定被底层占用不可使用

pwm 功能依赖硬件定时器,ioqueue 不可与 pwm 功能同时使用

pwm0 对应 0

pwm4 对应 4

以此类推

注意:Air6101/Air8101 不支持此功能

1.1 使用场景

ioqueue 主要是输出一些特殊的电平序列,捕获自定义协议。

如果有以下需要就可以使用该库:

精确控制多个 GPIO 的开关时序

循环执行固定的 GPIO 操作序列

捕获 GPIO 边沿变化的精确时间戳

模拟非标准通信协议

1.1.1 输入捕获场景(以 DHT11 数据读取为例)

单总线协议要求严格的时序控制、主机需要先发送特定启动信号传感器响应时间精确到微秒级、数据通过脉冲宽度编码

使用流程:

wKgZPGmdh0yAFKFhAAE68rZIxqQ333.png

下面演示使用硬件定时器精确控制 DHT11 通信时序,通过捕获下降沿时间戳解码温湿度数据,实现微秒级精确通信:

dht11 通讯协议介绍:

数据分为小数部分和整数部分,一次完整的数据传输为 40bit,高位先出

数据格式:8bit 湿度整数数据 +8bit 湿度小数数据 +8bit 温度整数数据 +8bit 温度小数数据 +8bit 校验

8bit 校验 = 8bit 湿度整数数据 +8bit 湿度小数数据 +8bit 温度整数数据 +8bit 温度小数数据

校验可以判断数据是否正确发送

DHT11 工作时序:

主机发送起始信号以后,DHT11 发送响应信号,然后发送 40bit 的数据,高位在前

总时序图如下:

wKgZPGmdh5KAJXzDAAH9gg6zCYY212.png

起始信号:总线空闲状态由 DHT11 内置上拉电阻拉高,主机拉低总线至少 18ms释放总线 20-40us

DHT11 响应:存在的 DHT11 会及时响应主机,同时拉低总线 80us 后,释放总线 80us,然后拉低总线,表示开始传送数据

wKgZPGmdh_6AMhzsAAIgx_fZ7aw067.png

发送数据:当总线是低电平是表示开始发送数据,同时存在 50us 低电平时隙,之后拉高总线,高电平的持续时间表示发送 0 或者 1,当高电平持续时间为 26us-28us 表示发送 0,高电平持续时间为 70us 时,表示发送 1

数据发送完毕,由上拉电阻拉高,置回空闲高电平状态

wKgZO2mdiCOAc5QPAAZHD43t0do013.pngwKgZPGmdiEuAaXClABD-Rjn8z_0963.png

具体波形如下:

wKgZO2mdiHGAQtHSAAGuwaFZ4eg935.pngwKgZPGmdiIuAVu1KAAHMskpm_qY479.pngwKgZO2mdiJiAUZ6zAASOrpCsZ7o967.pngwKgZO2mdiKOAMMVnAAH28PQ01eA791.png

1.1.2 输出精确脉冲场景

需要不同的脉冲宽度、软件循环无法满足精度要求、需要连续输出大量脉冲

使用流程:

wKgZPGmdiQCAH8OlAAFniBE1aRw531.png

下面演示利用硬件定时器生成固定频率或可变宽度的精确脉冲序列,支持连续和单次延时模式,实现微秒级脉冲控制:

固定间隔脉冲

wKgZPGmemT2AMW75AAOLw23kFFo801.pngwKgZO2memY6AEkKkAAFaiAOdo5s964.png

可变宽度脉冲序列

wKgZPGmembaALzlKAAQ__GUmg34855.pngwKgZO2memdCAQslUAAFlmcSnPmQ991.png

二、核心示例

示例可参考 1.1.1 章节具体使用分析。

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

ioqueue 模块没有常量。

四、函数详解

ioqueue.init(hwtimer_id, cmd_cnt, repeat_cnt)

功能

初始化一个 io 操作队列。

参数

hwtimer_id

wKgZO2memjmAJK9XAAHNyxwotE8289.png

cmd_cnt

wKgZO2memlSABz_cAAF_rvEtOOU628.png

repeat_cnt

wKgZPGmemm-AdiDqAAC5ufrwFt0221.png

返回值

无返回值。

示例

wKgZPGmemqCAFt7DAABqjbrEqF4938.png

ioqueue.setdelay(hwtimer_id, time_us, time_tick, continue)

功能

对 io 操作队列增加延时命令。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

time_us

wKgZPGmemuSASAxUAACp4yrjSE4279.png

time_tick

wKgZO2memv-AVOTXAAFvyJr2bz4172.png

continue

wKgZO2memxqAWSu1AAH5X8fIgkE877.png

返回值

无返回值。

示例

wKgZPGmemz6AcwZVAAF_3_kKyRw268.png

ioqueue.delay(hwtimer_id)

功能

对 io 操作队列增加一次重复延时,在前面必须有 setdelay 并且是连续延时。

注意事项

必须在前面的 ioqueue.setdelay 设置 continue=true

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

无返回值。

示例

wKgZPGmem8iAI3XmAADjqFeLTKw641.png

ioqueue.setgpio(hwtimer_id, pin, is_input, pull_mode, init_level)

功能

对 io 操作队列增加设置 gpio 命令。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

is_input

wKgZO2menEyABCP8AADBOmfzreI096.png

pull_mode

wKgZO2menMmADbh_AADyHqc2sng900.png

init_level

wKgZPGmenNmAMSRSAAC2viheLww748.png

返回值

无返回值。

示例

wKgZPGmenPyAOs-GAACkiFwWTeg249.png

ioqueue.input(hwtimer_id, pin)

功能

对 io 操作队列增加读取 gpio 命令。

应用场景:在精确时序点读取 GPIO 电平状态

使用时必须先调用 ioqueue.setgpio 设置输入模式,然后通过 ioqueue.get()读取输入数据

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenXSAfAv4AADISK908Rg340.png

返回值

无返回值。读取的数据需要通过 ioqueue.get 获取。

示例

wKgZPGmenYuAQ5VSAAZFgXvXhAo414.png

ioqueue.output(hwtimer_id, pin, level)

功能

对 io 操作队列增加输出 GPIO 命令。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZO2menkyAO6pOAADJrhwh-5A841.png

level

wKgZPGmenmKAZHXlAACcIWe6s1Y291.png

返回值

无返回值。

示例

wKgZO2mennOAWISPAABEQngRiNo568.png


ioqueue.set_cap(hwtimer_id, pin, pull_mode, irq_mode, max_tick)

功能

对 io 操作队列增加设置捕获某个 IO 命令。

捕获的配置命令

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

pull_mode

wKgZO2menqOAMVA0AADGhc1XZ0k696.png

irq_mode

wKgZPGmenrOAYRbvAADwzkMfTSM420.png

max_tick

wKgZPGmensKAfxNLAAHlQgVWB04466.png

返回值

无返回值。

示例

wKgZO2mentSAT7y2AAIVhZKSgPQ973.png

ioqueue.capture(hwtimer_id)

功能

对 io 操作队列增加捕获一次 IO 状态命令。

捕获的执行命令,必须先经过 ioqueue.set_cap 配置后才能使用 ioqueue.capture 来捕获,一个 set_cap 配置可以被多个 capture 命令复用

参数

hwtimer_id

wKgZO2menz-ARfYoAADcnUdsbg4622.png

返回值

无返回值。捕获的数据需要通过 ioqueue.get 获取。

示例

wKgZPGmen0-ANKpJAAAmvyWFqOg648.png


ioqueue.cap_done(hwtimer_id, pin)

功能

对 io 操作队列结束捕获某个 IO 命令。

使用场景:

1.捕获任务完成时 :主动结束,告诉系统数据读取完成,停止 gpio 捕获

2.切换捕获目标时:比如从捕获 gpio1 切换到捕获 gpio2,需要先结束捕获 gpio1。

3.错误处理或者提前退出时调用。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

返回值

无返回值。

示例

wKgZPGmen4SAdlZ8AAA7A-yGSlM447.png

ioqueue.get(hwtimer_id, input_buff, capture_buff)

功能

获取 io 操作队列中输入和捕获的数据。

注意事项

input,set_cap,capture 这三个配置接口配置的功能,缓存到的输入数据和捕获数据,都是通过 get 接口来读取出来

input_buff ← 存储 ioqueue.input() 的即时电平采样结果

capture_buff ← 存储 ioqueue.capture() 的边沿事件 + 时间戳

input_cnt = 成功的 ioqueue.input() 操作数量

capture_cnt = 成功的 ioqueue.icapture() 操作数量(可能因超时而小于计划数)

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

input_buff

wKgZO2meoLyAYHDnAAEFs_4x3KE233.png

capture_buff

wKgZO2meoMyAZMi0AAEJElU_tBg594.png

返回值

local input_cnt, capture_cnt = ioqueue.get(hwtimer_id, input_buff, capture_buff)

input_cnt

wKgZO2meoOKAGaN5AABzNIC6xDM624.png

capture_cnt

wKgZPGmeoPKAP9wYAABzvILJ0Vo416.png

示例

wKgZPGmeoQSAHpVzAABLNegMC8w442.png

ioqueue.start(hwtimer_id)

功能

启动 io 操作队列。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

无返回值。

示例

wKgZPGmeoW2APevgAAAl7U8ahuo615.png


ioqueue.stop(hwtimer_id)

功能

停止 io 操作队列,可以通过 start 从头开始。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

local loop_cnt, cmd_cnt = ioqueue.stop(hwtimer_id)

loop_cnt

wKgZO2meoY-AI-WgAACCMsnAiHU370.png

cmd_cnt

wKgZPGmeoaCAWp1kAADJEUZgAtc651.png

示例

wKgZPGmeobWACAncAAB0I2JYXu4534.png

ioqueue.release(hwtimer_id)

功能

释放 io 操作队列的资源,下次使用必须重新 init。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

无返回值。

示例

wKgZPGmeoo6AGn-RAAAl3phtFgE927.png


ioqueue.clear(hwtimer_id)

功能

清空 io 操作队列。

此接口重置了命令队列但保留了硬件定时器资源,可以直接添加新的命令。前提是你确信之前队列的状态完全被清空,且新的命令序列与之前的结构兼容。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

无返回值。

示例

wKgZPGmeoraAMPv4AAAlj7Myy1Y955.png


ioqueue.done(hwtimer_id)

功能

检测 io 操作队列是否已经执行完成。

参数

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

local is_done = ioqueue.done(hwtimer_id)

is_done

wKgZPGmeot-AQ5FoAABs4C4zxps860.png

示例

wKgZPGmeou2AXmEBAACa1FRgBfQ671.png

ioqueue.exti(pin, pull_mode, irq_mode, onoff)

功能

启动/停止一个带系统 tick 返回的外部中断。

ioqueue.exti 是一个独立的外部中断接口,与 ioqueue 队列系统完全分离,提供简单的 GPIO 边沿事件捕获功能。

使用场景:简单的按键检测、传感器状态监控、旋转编码器计数

参数

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

pull_mode

wKgZO2mepY2AF1p9AADEvpwMe9I475.png

irq_mode

wKgZO2mepZyAchscAADvAwqzrHY186.png

onoff

wKgZO2mepayAeZbeAACrMWOHUB4938.png

返回值

无返回值。

示例

wKgZPGmepb-ALWiYAAGfZJHHmdI870.png

五、模组支持说明

仅支持 Air700EXX 系列、Air780EXX 系列、Air8000 系列模组,Air6101/Air8101 不支持此功能。


今天的内容就分享到这里了~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO
    IO
    +关注

    关注

    0

    文章

    510

    浏览量

    42861
  • 硬件
    +关注

    关注

    12

    文章

    3626

    浏览量

    69160
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124445
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    吉事励引领电动汽车充电操作性与兼容测试新风向

    在电动汽车行业蓬勃发展的进程中,充电桩的操作性与兼容已成为决定行业能否持续稳健前行的核心要素。这不仅关系到用户充电体验的优劣,更影响着整个产业生态的健康发展。
    的头像 发表于 03-30 15:27 604次阅读
    吉事励引领电动汽车充电<b class='flag-5'>互</b><b class='flag-5'>操作性</b>与兼容<b class='flag-5'>性</b>测试新风向

    是德科技携手爱立信赋能Pre-6G操作性验证

    是德科技(NYSE: KEYS )近日宣布,与爱立信携手合作,使用是德科技的WaveJudge无线分析仪解决方案,对爱立信Pre-6G基站(gNB)与Pre-6G原型设备间的操作性进行故障排查
    的头像 发表于 03-03 16:10 542次阅读

    通过恩智浦RW612三频无线MCU提升多协议操作性

    无线连接是现代智能家居和工业系统的基石,推动着无数更智能、更自主设备的普及。恩智浦非常重视无线操作性,确保生态合作体系中的每台设备能够无缝协同工作的关键能力。
    的头像 发表于 03-03 11:47 1312次阅读

    JSON:简洁代码高效搞定序列化与反序列化

    面对频繁的数据交互需求,用最简方式实现JSON序列化与反序列化已成为开发者必备技能,借助主流库,轻松实现零负担数据转换。JSON(JavaScriptObjectNotation)是一种轻量级
    的头像 发表于 02-25 19:04 211次阅读
    JSON:简洁代码高效搞定<b class='flag-5'>序列化</b>与反<b class='flag-5'>序列化</b>

    【ioqueue】 IO序列化操作全解析

    从内存对象到可存储或可传输的字节流,IO序列化操作完成了数据形态的转化。这一过程不仅涉及编码与解码逻辑,还需处理版本兼容、安全与性能开销等问题。全面掌握这一
    的头像 发表于 02-24 19:22 199次阅读
    【ioqueue】 <b class='flag-5'>IO</b><b class='flag-5'>序列化</b><b class='flag-5'>操作</b>全解析

    极简代码,搞定JSON序列化与反序列化

    快速实现JSON数据的生成(序列化)与解析(反序列化)。 目前json库已全面支持LuatOS开发系列产品,开发者可根据项目实际需求,灵活选用并进行快速集成与开发。 一、 JSON基础要点 在
    的头像 发表于 02-23 21:46 429次阅读
    极简代码,搞定JSON<b class='flag-5'>序列化</b>与反<b class='flag-5'>序列化</b>

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选 在当今数字的时代,数字视频处理技术日新月异。对于电子工程师而言,选择一款性能卓越、功能丰富的数字视频序列化器至关重要
    的头像 发表于 12-30 14:00 409次阅读

    SN65HVS885:工业自动的理想数字输入序列化

    SN65HVS885:工业自动的理想数字输入序列化器 在工业和建筑自动领域,对于高通道密度数字输入模块的需求日益增长。德州仪器(TI)的SN65HVS885作为一款八通道数字输入序列化
    的头像 发表于 12-25 11:00 570次阅读

    Wi-Fi几乎渗透到所有需要无线连接的场景中,是构建本地无线网络的首选技术

    。 4. 技术持续演进 从802.11a/b/g到Wi-Fi 6(802.11ax)及未来的Wi-Fi 7,性能、效率与安全不断提升。 三、关键技术词解析 IEEE 802.11:
    发表于 12-08 17:23

    5G网络通信有哪些技术痛点?

    地形复杂的区域,信号穿透能力差,导致信号质量不稳定。 高频段通信与设备兼容:5G使用的高频段使得设备间的兼容性问题更加突出,不同厂商之间的技术标准差异可能导致设备操作性差。
    发表于 12-02 06:05

    是德科技与HEAD acoustics成功完成新一代eCall系统操作性测试

    是德科技(NYSE: KEYS )近日宣布,其基于UXM的新一代eCall(NG eCall)解决方案,已成功与全球汽车声学测试领导者HEAD acoustics GmbH完成操作性测试。
    的头像 发表于 11-18 11:29 752次阅读

    Microchip与AVIVA Links实现ASA-ML操作性验证

    汽车行业正加速从专有串行器/解串器(SerDes)解决方案向汽车串行器/解串器联盟(Automotive SerDes Alliance)及其首个开放标准——ASA Motion Link(ASA-ML)构建的可操作系统生态过渡。
    的头像 发表于 10-23 17:13 1401次阅读

    解读新发布的 Matter 1.4:推动智能家居设备操作性关键升级

    着Matter 1.4的发布,智能家居和物联网(IoT)行业迎来了新的里程碑。Matter作为全球统一的智能家居互联协议,在操作性、安全和能效优化等方面取得了重大突破。本文将从Matter
    的头像 发表于 05-16 17:38 1132次阅读

    快手上线鸿蒙应用高性能解决方案:数据反序列化性能提升90%

    普通对象(如 JSON 数据)与类实例进行互转,是实现面向对象编程与数据序列化解耦的核心工具。随着业务复杂度的提升,该库在反序列化过程中逐渐暴露出性能瓶颈,影响用户核心体验。因此
    发表于 05-15 10:01

    电机系统节能关键技术及展望

    节约能源既是我国经济和社会发展的一项长远战略和基本国策,也是当前的紧迫任务。论文在深入分析国内外电机系统节能现状和介绍先进的节能关键技术的基础上,指出了现阶段我国在电机系统节能方面存在的问题,并结合
    发表于 04-30 00:43