查看: 2133|回复: 0

[分享] 使用 i.MX RT1010 FlexIO 模拟 SSI

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3301

    主题

    6548

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32040
    最后登录
    2024-4-28
    发表于 2020-5-20 13:46:02 | 显示全部楼层 |阅读模式
    使用 i.MX RT1010 FlexIO 模拟 SSI

    1 介绍
       这篇应用笔记阐述了如何使用 i.MX RT1010 单片机的 FlexIO 模块来模拟 SSI总线接口。SSI 是一种广泛应用于传感器和控制器之间的串行总线接口。当前i.MX RT1010 不直接支持 SSI 接口,但是一个很好的解决方案是使用其 FlexIO来模拟 SSI,以实现与专用 SSI 设备之间的通讯。
        i.MX RT1010 处理器基于 ARM Cortex-M7 平台,具有很高的 CPU 性能和最佳的实时响应,且拥有丰富的外设资源。本篇应用笔记通过一个简单的例程来演示 FlexIO 模块模拟 SSI 总线接口的过程,并得到了验证。


    2 SSI 简介
       SSI 全称 Synchronous Serial Interface,即同步串行接口。在本篇应用笔记中,i.MX RT1010 的 FlexIO 外设要模拟的 SSI 接口是一种能够与 Texas Instruments(德州仪器,TI)同步串行接口的器件进行同步串行通信的主机或从机接口,它的单次传输通信格式如 图 1 所示。
    1.png
    3 硬件平台
       为了模拟同步串行接口(SSI)的 master(例如控制器)和 slave(例如传感器)之间的通信,在此演示中使用了两块 i.MXRT1010EVK 板子。 一块板用于模拟 SSI master 设备,另一块板用于模拟 SSI slave 设备。另外,为了能够成功演示该 demo,需要对i.MX RT1010 EVK 板子进行如下操作和改动。
    SSI master 板子和 SSI slave 板子之间按如下关系连接:
    2.png
    3.png
    在 i.MX RT1010 上,FLEXIO 共有 27 个引脚。 在本应用中,有 4 根 FlexIO 引脚分别用于模拟 SSI_Fss 引脚,SSI_RX 引脚,SSI_TX 引脚和 SSI_CLK。表 2 给出了这 4 根 FlexIO 引脚及板子对应的位置。
    4.png


    实际的硬件平台如 图 2 所示,为了能够使本应用笔记中例程能够成功演示,还需要对板子进行以下改动:
    • 去掉电阻 R792,并在 RT1010 EVK 板 R800 处焊接 0Ω 电阻。
    • 将 ISP 拨码开关 SW8 更改为 0b0010。
    • 将 J1-1 和 J1-2 引脚用短路帽连接。
    • 将 USB 插到板上的 J41 进行供电。
    5.png

    4 SSI 模拟
        这一节主要介绍如何使用 FlexIO 模块来模拟 图 1 所示的 SSI 单次传输,以及详细描述 SSI 主机模式和从机模式的配置。
    4.1 FlexIO 简介
        FlexIO 是高度可配置的模块,支持各种协议,包括但不限于 UART,I2C,SPI,I2S 这几种,并提供多种功能,例如:
    • 高度灵活的 16 位定时器,支持各种内部或外部触发,复位,使能和禁用条件。
    • 可编程的与总线时钟无关的波特率,在 stop 模式下支持异步操作。
    • 支持中断,DMA 或轮询的发送/接收操作。
    • 用于并行接口支持的 1、2、4、8、16 或 32 位的移位宽度。
    • 具有发送,接收,数据匹配模式的 32 位移位寄存器阵列,双缓冲移位器可实现连续的数据传输。
    FlexIO 是一个非常灵活的模块。对于固定的时序模拟,其配置方法不是唯一的。通过不限数量的定时器和移位器,以及不同组合的多种配置方法可以实现同样的效果。本应用中分别介绍了一种实现 SSI master 和 SSI slave 的配置方法。



    4.2 SSI master 配置
         总共使用两个 Timer,两个 Shifter 用于模拟 SSI master 设备。Timer0 用于产生 SSI_CLK 信号,Timer1 用于产生 SSI_Fss 信号。Shifter0 连接SSI_TX 引脚,并在 SSI_Clk 的每个上升沿发送数据,Shifter2 连接到 SSI_RX 引脚,并在 SSI_Clk 的每个下降沿接收数据。图 3 显示了 FlexIO 模拟 SSI master 接口的内部连接关系。

    6.png

    Timer0 配置为双 8 位计数器,在触发事件高电平时被使能,在比较事件到来时禁用。Timer0 的触发源连接到内部 Shifter0,Timer0 的计数递减源配置为 FlexIO 时钟,Shift 时钟是由 Timer0 的每一次计时输出决定的,Timer0 的起始位也需要被使能。另外,Timer0 需要被配置为能够被 Shifter0 的状态标志位触发。在此应用中,由于传输频率为 200kHz,因此 Timer0 的 Compare寄存器的值经计算得到需配置为 0xF1D。
    Timer1 被配置为 16 位计数器模式,由 Timer0 触发,当 Timer0 被使能时也使能,在比较事件到来时禁用。Timer1 的计数递减源设置为触发信号的两个边沿。
    Shifter0 配置为 Transmit 模式,并在移位器时钟的上升沿移位,使能移位器起始位并将其设置为逻辑低电平。Shifter2 配置为 Receive 模式,并在移位器时钟的下降沿移位,使能移位器起始位并将其设置为逻辑低电平。
    下面给出了 SSI master 模式下详细的寄存器配置:
    • FlEXIO01.SHIFTCTL[0] = 0x00031502
    • FlEXIO01.SHIFTCTL[2] = 0x00801601
    • FlEXIO01.SHIFTCFG[2] = 0x00000002
    • FlEXIO01.SHIFTCFG[2] = 0x00000002
    • FlEXIO01.TIMCTL[0] = 0x01C31A01
    • FlEXIO01.TIMCTL[1] = 0x03430003
    • FlEXIO01.TIMCFG[0] = 0x00002222
    • FlEXIO01.TIMCFG[1] = 0x00102100
    • FlEXIO01.TIMCMP[0] = 0x00000F1D
    • FlEXIO01.TIMCMP[1] = 0x00000002
    当数据从 SHIFTER 加载到 SHIFTBUF 寄存器中或数据从 SHIFTBUF 寄存器加载到 SHIFTER 中时,如果已经将 SHIFTER 状态标志位(SHIFTSDENSSDE)置 1,就可以产生一个 DMA 请求。整个 SHIFTER 的微体系结构如 图 4 所示,它充分展示了SHIFTER 中各个模块之间的关系以及 IO 引脚输入输出的关系。

    7.png

    4.3 SSI slave 配置
          SSI slave 的配置与 SSI master 的配置类似,SSI slave 的模拟也是需要用到两个 Shifter 和两个 Timer。Timer0 用于检测 SSI_Fss
    信号,Timer1 用于检测 SSI_CLK 信号。Shifter0 连接到 SSI_TX 引脚,Shifter2 连接到 SSI_RX 引脚。图 5 显示了 FlexIO模拟
    SSI slave 接口的内部连接关系。




    未完>>>


    点击查看完整版

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-28 16:45 , Processed in 0.101099 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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