当前位置: 首页 > news >正文

AM263P UART红外通信:从SIR到CIR,嵌入式开发的硬件协议栈详解

1. 红外通信技术概览与AM263P UART模块定位

红外通信,这个听起来有点“复古”的技术,其实在今天的嵌入式世界里依然扮演着不可或缺的角色。从你家里电视遥控器的“咔哒”一声,到两台老式PDA背对背“对接”传输名片,再到工业现场某些特定传感器与控制器之间的非接触式数据交换,背后都是红外光在默默工作。它的核心魅力在于简单、可靠、低成本,并且天生具备方向性和短距离特性,这既是限制,也是优势——意味着更低的干扰和更好的私密性。

红外数据协会(IrDA)制定了一套完整的标准协议栈,定义了从物理层到应用层的规范。我们今天要深入探讨的,就是物理层和链路层的核心实现,特别是集成在德州仪器(TI)AM263P这类高性能微控制器中的UART红外模块。这个模块的巧妙之处在于,它复用并扩展了经典的UART(通用异步收发器)硬件,通过特定的编码、调制和解调逻辑,使其能够处理红外信号。对于嵌入式开发者而言,这意味着你无需外挂复杂的专用红外芯片,仅凭MCU的一个UART外设和一颗廉价的红外收发器(通常就是一个LED和一个光电二极管),就能构建起完整的红外通信链路。

AM263P的UART模块支持三种主流的IrDA速率模式:SIR(低速红外,最高115.2 kbps)、MIR(中速红外,0.576/1.152 Mbps)和FIR(高速红外,4 Mbps),以及一个专门用于消费电子遥控的CIR(消费红外)模式。理解这些模式的区别、帧格式、以及硬件如何自动完成编解码、透明传输、错误处理等脏活累活,是稳定、高效实现红外通信功能的关键。很多人调不通红外,问题往往不是出在代码逻辑,而是对底层硬件机制和协议细节理解不透。接下来,我们就一层层剥开它的技术外壳。

2. IrDA SIR模式:低速可靠的基石

SIR模式是IrDA的基石,也是兼容性最广、最常用的模式。它本质上是一种异步串行通信,但将电信号转换成了特定格式的红外光脉冲。

2.1 SIR帧格式与异步透明传输机制

一个标准的SIR数据帧,并不是把UART的TX信号直接驱动LED发光那么简单。硬件会自动为你的数据“打包”。参考技术手册中的帧格式图,一个完整的SIR帧包含以下部分:

  • xBOF (额外帧开始符): 可选的多个0xC0字符,用于同步和唤醒接收端。
  • BOF (帧开始符, 0xC0): 标志一帧数据的开始。
  • A (地址字段)&C (控制字段): 用于在多点通信中寻址和标识帧类型,在点对点通信中常被忽略或用作固定值。
  • I (信息字段): 就是你要发送的有效数据载荷。
  • CRC (循环冗余校验): 16位CRC校验码,基于A、C、I字段计算得出,用于接收端检错。
  • EOF (帧结束符, 0xC1): 标志一帧数据的结束。

这里有一个极易出坑的关键机制:异步透明传输。想象一下,如果你的数据载荷里,恰好有一个字节是0xC0(和BOF相同)或0xC1(和EOF相同),接收硬件会误以为帧开始或结束了,导致通信混乱。为了解决这个问题,硬件实现了“字节填充”。在发送端,硬件会扫描A、C、I和CRC字段(即BOF和EOF之间的所有内容),一旦发现0xC0, 0xC1或0x7D,它会在该字节前插入一个转义字节0x7D,并将原字节的第5位(bit 5,从0开始计数)取反(即与0x20进行异或操作)。例如,数据0xC0会变成0x7D 0xE0发送出去。这里有个非常重要的细节:用于CRC计算的字节,是原始字节(0xC0),而不是经过取反后的字节(0xE0)。接收端的过程则相反,它发现0x7D就知道下一个字节是转义过的,会丢弃0x7D,并将后续字节的第5位取反还原,再送入CRC计算器和FIFO。

注意:很多驱动代码在计算CRC时容易犯错,直接对发送缓冲区的数据计算,而忽略了硬件会对0xC0/0xC1/0x7D进行修改。正确的做法是,要么在软件层预先计算好CRC并填入帧的CRC字段(硬件会自动处理透明传输),要么深刻理解硬件在CRC计算点使用的是原始数据。

2.2 SIR的编解码与脉冲成形

SIR模式如何用光脉冲表示“0”和“1”?它采用了一种称为“归零”的编码。一个“0”比特(低电平)被编码为一个短暂的红外光脉冲,而一个“1”比特(高电平)则对应无光(或极弱光)的时段。

手册中提到了两种脉冲宽度方法:

  1. 3/16位周期脉冲: 这是最常用的方式。在一个比特位的16个系统时钟(16XCLK)周期内,光脉冲出现在第7到第10个时钟周期,宽度为3个时钟周期。这提供了良好的抗干扰能力。
  2. 1.6微秒固定脉冲: 无论波特率如何,脉冲宽度固定为1.6μs。这在低波特率下能提供更宽、更易检测的脉冲,但需要硬件支持。

编码器的工作流程如下:当TX FIFO输出为‘1’(空闲/停止位)时,TX线路保持低电平(红外LED熄灭)。当输出变为‘0’(起始位或数据0)时,编码器开始计数,在第7个16XCLK的下降沿点亮LED(TX线变高),在第10个16XCLK的下降沿熄灭LED,从而生成一个精确的3时钟宽脉冲。

解码器则相反:它持续监测RX引脚(来自红外接收头)的信号。一旦检测到上升沿(红外脉冲到来),它就在下一个16XCLK上升沿将内部RX FIFO输入拉低,并保持16个周期,以此还原出‘0’比特。如果没有检测到脉冲,则内部信号保持高电平,表示‘1’比特。

2.3 SIR自由格式模式与地址检查

有时,你需要完全掌控数据包的结构,例如实现自定义协议。这时可以使用SIR自由格式模式。在此模式下,硬件完全“放手”,不添加BOF、EOF,也不计算CRC,只是简单地将FIFO中的数据以SIR脉冲格式发送出去。所有帧结构的构建、CRC校验(如果需要)都必须由软件完成。这给了开发者最大的灵活性,但也带来了最大的责任。

另一个有用的功能是红外地址检查。在多设备红外环境中(想象一下一个房间里有多个支持红外的设备),为了避免设备收到不是发给自己的数据帧,可以启用此功能。通过配置UART_EFR寄存器和UART_XON1_ADDR1UART_XON2_ADDR2寄存器,可以设置1-2个本机地址。只有地址字段匹配的帧,其数据才会被存入RX FIFO并可能产生中断,不匹配的帧会被硬件静默丢弃,极大地减轻了CPU的中断处理负担。

3. 中速与高速:MIR与FIR模式解析

当SIR的115.2kbps速度无法满足需求时,就需要转向MIR和FIR模式。

3.1 MIR模式:比特填充与同步帧

MIR模式将速率提升至0.576或1.152 Mbps。它不再是异步通信,而是采用了同步HDLC-like的帧结构。一个MIR帧以至少两个连续的起始标志0x7E开始,然后是帧数据和CRC-16,最后以停止标志0x7E结束。

MIR模式的核心机制是比特填充。为了保证标志0x7E(二进制01111110)的唯一性,避免在数据字段中意外出现,发送端状态机会在数据流中每连续出现5个‘1’后,自动插入一个‘0’。接收端的状态机则负责删除这些填充的‘0’。这样,数据字段中永远不会出现连续的6个‘1’,因此0x7E就可以明确无误地标识帧的边界。中止序列被定义为至少7个连续的‘1’,这在比特填充规则下也是不可能在数据中出现的,从而保证了可靠性。

MIR的编解码器还有一个精妙的42-41-42循环调整机制。为了用48MHz的时钟精确产生MIR所需的波特���(误差需在0.1%以内),编码器不是简单地以固定分频产生时钟边沿,而是以42、41、42个时钟周期为一个循环来调整脉冲边沿的位置。这样产生的平均周期是符合要求的,虽然引入了微小的周期性抖动,但完全在IrDA规范允许的容限之内。

3.2 FIR模式:4-PPM编码与更高效率

FIR模式将速度推至4 Mbps。它采用了完全不同的4-PPM编码。PPM意为“脉冲位置调制”。在FIR中,每2个数据比特(一个符号)被编码为一个4位的符号,其中只有1位是‘1’,其余3位是‘0’。‘1’的位置代表了数据值:

  • 00->1000
  • 01->0100
  • 10->0010
  • 11->0001

这种编码方式提高了带宽利用率,并对红外LED的开关特性更友好。FIR的帧结构包含一个16次重复的固定前导码、一个起始标志、数据、CRC-32和一个停止标志。前导码、起始和停止标志都使用非法的4-PPM符号(如1010),因此绝对不会与数据混淆。

FIR的发送和接收状态机负责完成4-PPM的编码、解码、CRC-32计算以及帧边界识别。由于速率很高,其对时钟精度和硬件时序的要求也更为严格。

3.3 SIP:协调不同速率设备的共存

在MIR和FIR模式下,有一个重要的概念:SIP。SIP是一个持续约1.6ms的宽脉冲,后面跟随约8.7ms的静默期。它的作用是通知那些只支持低速SIR模式的设备:“信道正在被占用,请勿打扰”。因为SIR设备无法解码MIR/FIR的高速信号,如果没有SIP,它们可能会误以为信道空闲而尝试发送,造成冲突。硬件可以配置为在每帧结束后自动发送一个SIP,也可以由软件定时控制发送,以平衡信道占用开销。

4. CIR模式:消费电子红外遥控的实现

CIR模式与SIR/MIR/FIR有本质不同。后三者是为双向数据通信设计的,而CIR是专门为单向遥控器应用优化的。它的目标是灵活地模拟市面上各种各样的红外遥控协议,如RC-5、SIRC、NEC等。

4.1 CIR的核心:可编程的脉冲宽度调制

CIR模式的核心思想是用单个UART字节来表示一个“符号”的持续时间。这个符号可以是红外载波调制的一段脉冲(代表逻辑“1”或“0”),也可以是一段空白间隔。硬件不关心协议的具体含义,它只负责一件事:根据你写入TX FIFO的字节值,生成对应时间长度的调制脉冲空白

  • 载波调制: CIR输出的不是直流信号,而是一个被高频载波(通常是38kHz)调制的方波。这个载波由硬件内部产生。
  • 脉冲占空比: 调制脉冲的占空比(一个周期内高电平的比例)可以通过UART_MDR2[5-4]位域配置为1/4、1/3、5/12或1/2,以适应不同接收头的灵敏度。
  • 时间基准t: 所有时间长度都是基于一个可编程的基本时间单位t的倍数。t由UART的波特率发生器决定。例如,设置波特率使得t = 1.778ms,就可以用来模拟RC-5协议。

4.2 如何用CIR模拟常见协议

CIR模式提供了构建协议的“乐高积木”,具体搭建需要软件完成。

  1. 脉冲宽度编码(如NEC协议)

    • 逻辑‘1’: 560μs的载波脉冲 + 1690μs的空白。
    • 逻辑‘0’: 560μs的载波脉冲 + 560μs的空白。
    • 实现方法: 设定时间基准t=560μs。要发送一个‘1’,就向TX FIFO写入一个代表“1倍t脉冲”的字节(具体值由驱动约定),紧接着写入一个代表“3倍t空白”的字节。发送‘0’则写入“1倍t脉冲”和“1倍t空白”。协议中的引导码、重复码等,都可以通过组合不同时长的脉冲和空白字节来实现。
  2. 双相编码/曼彻斯特编码(如RC-5协议)

    • RC-5的每个比特位被固定在1.778ms的时槽内,用该时槽中点处的跳变来表示‘0’或‘1’。
    • 实现方法: 这需要将比特位拆解成更小的脉冲/空白单元。例如,一个逻辑‘1’可以用“前半段空白,后半段脉冲”来表示,即先写入一个“0.889ms空白”字节,再写入一个“0.889ms脉冲”字节。逻辑‘0’则相反。通过精心组合这些基本单元,就能拼出完整的RC-5帧,包括两个起始位、 toggle位、地址位和命令位。
  3. 索尼SIRC协议

    • 它使用脉冲的长度来区分‘1’和‘0’。‘1’是1.2ms脉冲, ‘0’是0.6ms脉冲,但空白间隔固定为0.6ms。
    • 实现方法: 设定t=0.6ms。发送‘1’时,写入“2倍t脉冲”字节;发送‘0’时,写入“1倍t脉冲”字节。在每个脉冲字节后,都跟一个“1倍t空白”字节。

实操心得: 在实现CIR驱动时,最关键的是建立一个“时间字节映射表”。例如,定义0x01代表1*t的脉冲,0x81代表1*t的空白,0x02代表2*t的脉冲,以此类推。发送一个遥控按键命令,就是按照协议格式,将这个命令转换成一系列映射后的字节序列,依次写入UART的TX FIFO。接收解码则是逆过程,测量脉冲和空白的时间长度,再映射回字节,最终解析出协议帧。

4.3 CIR的硬件接口与软件考量

CIR模式通常使用UART的三个引脚:TXD输出调制后的红外信号,RXD接收来自红外接收头的信号(用于学习型遥控器),RTSn(在CIR模式下重定义为SD)用于控制外部收发器的模式(如发送/接收切换)。

由于CIR硬件只是简单地按字节流发送脉冲/空白,字节之间没有间隔。因此,如果协议要求帧内各符号间有固定间隔,或者帧与帧之间需要较长的延时,必须由软件在写入FIFO的字节序列中,插入代表特定时长“空白”的字节来实现。这是CIR模式编程中最需要仔细处理的地方。

5. AM263P UART红外模块的配置与驱动开发要点

理解了原理,最终要落到代码上。基于AM263P的UART模块进行红外开发,以下配置步骤和避坑指南至关重要。

5.1 模式选择与基础配置流程

  1. 时钟配置: 确保UART的功能时钟(UARTi_FCLK)和接口时钟(UARTi_ICLK)正确使能并配置到所需频率。SIR模式的波特率由标准的UART波特率发生器产生。CIR模式的时间基准t也由波特率发生器决定,其计算公式为t = (波特率分频系数) / UART_FCLK,需要根据目标协议反推计算出应设置的波特率。
  2. 模式选择寄存器: 通过UART_MDR1[2:0]选择工作模式:000为UART/RS-485,001为SIR,010为MIR,011为FIR,1xx为CIR。
  3. IrDA特定配置
    • 脉冲类型: 在SIR模式下,通过UART_ACREG[7]选择3/16脉冲或1.6μs脉冲。
    • SIP控制: 通过UART_MDR1[6]UART_ACREG[3]控制SIP的发送策略。
    • 地址检查: 如果需要,配置UART_EFR[1:0]和地址寄存器。
  4. CIR特定配置
    • 占空比: 通过UART_MDR2[5:4]选择调制脉冲的占空比。
    • 引脚功能: 确认RTSn引脚被正确配置为SD输出功能。
  5. FIFO与中断: 配置FIFO触发阈值,使能所需的发送/接收中断或DMA请求。

5.2 常见问题排查与调试技巧

  1. 完全收不到任何数据

    • 检查硬件链路: 这是第一步也是最常见的一步。确认红外LED/接收头方向正确、已焊接牢固、限流电阻值合适。用手机摄像头(大部分手机CMOS能看到红外光)观察发送端LED在通信时是否闪烁。用示波器测量接收头输出引脚,看是否有信号变化。
    • 确认模式与引脚: 确保软件配置的IrDA/CIR模式与硬件设计匹配。例如,在CIR模式下,红外信号是从TXD脚输出,而不是RXD
    • 检查时钟与波特率: 用示波器测量TXD引脚(在UART模式下)或红外发射管驱动端的信号,看其波特率或脉冲间隔是否符合预期。计算波特率时的时钟源和分频系数是否正确。
  2. 数据错误或帧错误

    • SIR透明传输问题: 如果数据中包含0xC0,0xC1,0x7D,检查CRC计算是否正确。确保是使用原始数据计算CRC,或者确认硬件自动处理机制已正确工作。
    • MIR/FIR比特填充/解码错误: 确保发送和接收两端配置的速率(MIR 0.576或1.152, FIR 4M)完全一致。检查时钟精度是否满足要求(特别是MIR的0.1%容限)。
    • CIR时序不对: 这是CIR调试中最头疼的。用逻辑分析仪或高采样率示波器捕获发送出的红外波形,测量脉冲和空白的实际时长,与目标协议(如NEC的560μs/1690μs)进行对比。重点检查计算时间基准t的公式和UART波特率设置。同时,检查是否在需要间隔的地方插入了正确的“空白”字节。
  3. 通信距离短或不稳定

    • 发射功率: 检查LED的驱动电流是否足够。可以适当减小限流电阻,但注意不要超过LED和MCU引脚的最大电流限额。
    • 接收头干扰: 红外接收头容易受到环境光(特别是日光灯、太阳光)和电源噪声干扰。确保接收头有遮光罩,并在其电源引脚就近放置滤波电容(如10μF电解并联0.1μF瓷片)。
    • 协议容错: 某些消费协议(如NEC)有重复码机制,软件驱动应实现简单的重复按键过滤和协议解码容错(如允许一定的时间误差)。
  4. 使用调试工具

    • 逻辑分析仪: 配备红外解码功能的逻辑分析仪是调试红外通信的神器,可以直接解析出SIR、MIR、FIR的帧内容,或者测量CIR的脉冲宽度并解码成常见协议。
    • 通用遥控器与接收头: 手头备一个已知协议(如NEC)的通用遥控器和一个红外接收头,可以快速验证你的接收解码代码是否正确。用遥控器对着你的接收头按键,用MCU去解码,是最直观的测试方法。

红外通信是一个对时序和细节要求极高的领域。从SIR的异步透明传输,到MIR的比特填充,再到CIR的灵活脉冲构建,每一层都需要开发者对硬件手册有精准的理解。AM263P的UART模块将这些复杂的功能集成在硬件中,大大减轻了软件负担,但唯有深入理解其工作机制,才能写出稳定、高效的驱动,让无形的红外光可靠地承载你的数据。

http://www.jsqmd.com/news/1230416/

相关文章:

  • [具身智能-595]:RDK X5 如何支持 4G/5G 模块
  • 西安智界V9内饰升级哪家靠谱?车宫管一站式升级全攻略 - 互联网科技品牌测评
  • TI AM64x/AM243x集成以太网交换机CPSW3G架构、配置与实战调试指南
  • 温度采样与生成参数:如何配置distilgpt2 MLX获得最佳文本输出
  • 开发者必看:OpenVINO™ AI Plugins for GIMP插件架构与代码实现原理
  • 解决PVE集群中Ceph存储导致的VNC访问问题
  • 雷达官方更换原装表带价格查询|网点地址和电话权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • 小程序计算机毕设之基于 Android 的托管食堂就餐管理系统 学生小餐桌订餐签到管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 苹果M1 iMac深度评测:性能、设计与使用体验
  • (Redis基础教程之十二) 如何解决Redis中的故障
  • Geo优化系统源代码部署技巧及流程分享
  • AI 时代的知识库:企业效率提升的五大关键优势
  • 国产大模型哪个更适合企业内部落地?
  • 如何让老款Mac焕发新生:OpenCore Legacy Patcher详细使用指南
  • 7.20
  • 5分钟掌握:Windows消息防撤回终极方案
  • 南极科考关键技术解析:钻探与生态监测的创新突破
  • linux基于wifi,Xshell的远程连接
  • 2026年深圳消杀行业图谱:五强品牌服务能力全景对比 - 信息热点
  • 如何在 CoreOS 中部署 systemd-docker:完整部署流程与配置示例
  • Meta裁员反思:组织效率提升的关键在流程优化而非简单减员
  • 鸿蒙 ArkTS 实战:Life Time Account 从人生时间账户到个人效率工具完整解析
  • 哪款ai写小说软件最好用?2026年10款ai写小说软件深度测评
  • 2026年7月最新雅典温州吾悦广场维修保养服务电话 - 亨得利钟表维修中心
  • 2026年7月寄大件物流推荐便宜到离谱的真香榜单 - 生活情报姬
  • Claude Code Skill:从代码补全到自动化工作流的AI编程新范式
  • 2026年7月最新泰格豪雅无锡锡山吾悦广场维修保养服务电话 - 亨得利钟表维修中心
  • Open WebUI工具调用架构:3大技术创新与下一代AI代理系统实现
  • 用SurfaceView实现落花动画效果
  • 3分钟掌握Windows缩略图预加载:告别文件夹加载等待的终极方案