请选择 进入手机版 | 继续访问电脑版
查看: 3640|回复: 6

在i.MX RT1010上使用FlexIO模拟UART

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3297

    主题

    6542

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31909
    最后登录
    2024-3-29
    发表于 2020-4-9 10:05:56 | 显示全部楼层 |阅读模式
    在i.MX RT1010上使用FlexIO模拟UART

    在i.MX RT上有一个非常神奇的外设——FlexIO,用它可以模拟各种各样的串并型外设接口,例如UART、I2C、SPI等简单协议,还可以实现比较复杂的I2S接口协议,甚至是LIN总线或摄像头的接口。我们将陆续推出一系列介绍FlexIO实现各种接口协议的介绍文章。

    一、FlexIO介绍
    本文如何使用FlexIO模块在i.MX RT1010上模拟UART。
    尽管RT1010具有4个LPUART,但当LPUART数量不足时,也可以选择FLEXIO模拟。

    FlexIO是NXP i.MX RT系列上的片上外设,是一个高度可配置的模块,能够仿真各种通信协议,例如UART,I2C,SPI,I2S等。用户还可以使用FlexIO生成PWM和PFM波形等。

    二、基于FlexIO的UART
    2.1 UART简介
    通用异步接收器/发送器(UART)是一种计算机硬件,可以在并行和串行形式之间转换数据。UART通常与EIA,RS-232,RS-422或RS-485等通信标准结合使用。通用名称表示数据格式和传输速度是可配置的。

    电信号电平和方法(例如差分信号等)由UART外部的驱动器电路处理。UART通常是用于在计算机或外围设备串行端口上进行串行通信的单个(或一部分)集成电路。
    必须将发送和接收UART设置为相同的位速度,字符长度,奇偶校验和停止位,以确保正常工作。接收UART可能会检测到某些不匹配的设置,并为主机系统设置“成帧错误”标志位。
    下图为典型的UART 8位数据帧。
    41.png
    2.2 FlexIO模拟UART

    当使用FlexIO模拟UART时,应当注意到这种方法的优缺点,以更好的协调和分配片上资源:
    优势
    增加了可用的UART总数
    高波特率
    灵活配置,可以自行定义和配置帧内数据位数
    不足
    不支持奇偶校验
    不支持FIFO,大量数据收发时建议使用DMA
    FlexIO由移位器(Shifter)和定时器(Timer)组成。

    移位器(Shifter)具有发送,接收和数据匹配的功能。对于UART,移位器(Shifter)在发送或接收模式下工作。除此之外,移位器(Shifter)还支持启动/停止位(Start/Stop bit)生成。

    定时器(Timer)支持各种内部/外部触发,并支持启用/禁用/复位/减量条件功能。计时器(Timer)具有三种工作模式:
    双8位波特率模式(Dual 8-bit baud mode),
    双8位PWM模式(Dual 8-bit PWM mode),
    和单16位模式(Single 16 bit mode)。

    对于UART,定时器在双8位波特模式下工作。
    42.png
    下图展示了简略的UART数据发送和接收的过程。

    对于发送过程,要发送的数据存储在SHIFBUFi寄存器中,然后加载到SHIFTERi寄存器,最后数据在定时器和时钟的共同作用下,通过FlexIO的输出引脚输出。

    对于接收过程,输入数据被FlexIO输入管脚捕捉,对应的定时器被触发,在定时器和时钟的共同作用下将数据存储到SHIFTERi寄存器中,最后将数据移出并加载SHIFTBUFi寄存器中。
    43.png
    更详尽的分步操作,请查看本应用笔记的附件,附件中的幻灯片有助于更好的理解整个过程。


    2.3 基于FlexIO的UART发送器

    使用FlexIO模拟UART发送功能,需要使用下列的资源:

    1个定时器(Timer): 配置为双8位波特率模式(Dual 8-bitbaud mode)以控制数据的移位
    1个移位器(Shifter):在定时器的控制下对来自SHIFTERBUF的数据移位
    1个引脚(Pin): 连接到移位器(Shifter)用于输出数据
    44.png
    发送器的移位器(Shifter) 配置如下:
    45.png
    发送器的定时器(Timer)配置如下:
    46.png
    下面是接收器工作原理动图:
    47.png
    48.png
    2.4 基于FlexIO的UART接收器


    使用FlexIO模拟UART接收功能,需要使用下列的资源:
    1个定时器(Timer): 配置为双8位波特率模式(Dual8-bit baud mode)以控制数据的移位
    1个移位器(Shifter):在定时器的控制下对来自SHIFTERBUF的数据移位
    1个引脚(Pin): 连接到移位器(Shifter)用于输出数据
    49.png
    接收器的移位器(Shifter) 配置如下:
    50.png
    接收器的定时器(Timer)配置如下:
    51.png
    下面是接收器工作原理动图:
    52.png
    三、总结


    下图对比了UART和FlexIO模拟UART在功能上的差异。除了不能实现过采样以外,其他的功能基本可以支持。
    53.png
    在RT1010的SDK软件包内有一些关于FlexIO UART的应用例程,路径是:
    boards\evkmimxrt1010\driver_examples\flexio\uart
    这些应用例程有: edma_transfer, int_rb_transfer, interrupt_transfer, polling_transfer

    在FlexIO UART的基础上,还可以进一步开发IrDA协议模拟的应用,具体可以查看相应的应用笔记。


    作者:Lucas@NXP  文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    6

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2024-1-2
    发表于 2022-5-18 12:28:43 | 显示全部楼层
    你好博主,有个问题想请教你一下:
    发送器的移位器(Shifter) 配置里面有个input source,为什么配置成 from pin ? 它的输入来源不是来自 shifter buf吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3297

    主题

    6542

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31909
    最后登录
    2024-3-29
     楼主| 发表于 2022-5-18 13:38:17 | 显示全部楼层
    二月花 发表于 2022-5-18 12:28
    你好博主,有个问题想请教你一下:
    发送器的移位器(Shifter) 配置里面有个input source,为什么配置成 fr ...

    开漏
    签到签到
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    6

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2024-1-2
    发表于 2022-5-18 14:09:36 | 显示全部楼层

    大佬你好,我还是有一点不能理解。请原谅我的无知
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    6

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2024-1-2
    发表于 2022-5-18 15:16:30 | 显示全部楼层
    大佬,附件动画好像失效了,可以私发一下吗?zgguo@iflytek.com   万分感谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-21 11:31
  • 签到天数: 35 天

    [LV.5]常住居民I

    7

    主题

    1875

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1797
    最后登录
    2024-3-28
    发表于 2022-5-19 14:35:29 | 显示全部楼层
    二月花 发表于 2022-5-18 14:09
    大佬你好,我还是有一点不能理解。请原谅我的无知

    系统里定义了两个值,一个是来源引脚,一个是来源下一个移位寄存器,所以输入源为引脚。并不是其他移位寄存器输入来的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    6

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2024-1-2
    发表于 2022-5-20 09:46:42 | 显示全部楼层
    aoxiangwode2008 发表于 2022-5-19 14:35
    系统里定义了两个值,一个是来源引脚,一个是来源下一个移位寄存器,所以输入源为引脚。并不是其他移位寄 ...

    哦哦,谢谢大佬。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-30 00:00 , Processed in 0.137860 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表