UART 接口

用户可以使用外部主机设备,以 115200 的波特率通过 UART 接口连接 DWM 模块. 下图显示了 DWM1001 UART 接口的工作流程. 在 UART 通用模式通信中,主机设备是启动器,而 DWM 模块是响应器. DWM1001 UART 提供两种模式:UART 通用模式和 UART Shell模式. DWM1001 UART 的默认模式是通用模式. 不过,这两种模式是可以转换的.

通用模式转换为外壳模式:按两次 “Enter ”键,或在一秒钟内输入两个字节 [0x0D, 0x0D].

如果模块在低功耗模式下处于“sleep”状态,如*低功耗模式唤醒机制*中介绍的那样,在双击“Enter”之前需要额外的字节. 例如,按三次“Enter”将唤醒模块并将其转入 Shell 模式. Shell 模式转为通用模式:用户需要输入“quit”命令.

../../../_images/image91.png

UART 工作流程


UART TLV 模式

UART TLV 模式使用 TLV 格式数据. 在这种模式下,主机设备和 DWM 模块使用 TLV 请求/响应进行通信. 完整的 TLV 请求通信流程包括以下步骤:

  1. 主机设备发送 TLV 请求;

  2. DWM1001 回应 TLV 数据.

在接收到任何数据时,UART 会为后续数据启动延迟计时器. 如果在延迟时间内(具体为 25 个时钟周期(25/32768 秒≈ 763 μs))有新数据输入,UART 就会启动延迟计时器,等待新数据. 如果在延迟时间内没有新数据进来,延迟计时器就会过期. 然后,UART 会将接收到的数据发送到通用 API 线程,并等待它返回响应数据或错误信息.

DWM1001 UART TLV 模式线程在串行的三种状态之间传输: “UART: Idle”, “UART: 接收 “和 ”UART: 完成”. 每个状态都会在特定事件发生时转移到下一个相应的状态.

  • UART: Idle:是初始化后和每次成功的 TLV 响应后的状态. 在此状态下,UART 只期待一个字节作为 TLV 请求或双 “Enter ”命令的开始.

    • 等待事件:接收 TLV 请求.

    • 事件的操作:

      • 启动延迟计时器.

      • 传输到 UART:接收.

  • UART: Receiving:是等待接收请求结束的状态. 在此状态下接收任何数据时,UART 将刷新延迟计时器. 如果主机设备已经发送完字节,延迟计时器将失效.

    • 等待事件:延迟时间已过.

    • 对事件的操作 - 如果收到的请求是双 “Enter”:

      • 转到 UART Shell 模式.

    • 对事件采取行动 - 如果收到的请求不是双 “Enter”:

      • 将收到的请求发送到通用 API 线程.

      • 传输到 UART:完成.

  • UART:完成:是等待通用 API 线程解析传入请求,并将响应数据或错误信息发回 UART 线程的状态.

    • 等待事件:通用 API 线程调用 call_back()函数.

    • 事件的操作:

      • 向主机设备发送响应数据或错误信息.

      • 传输到 UART: Idle.


UART TLV 模式通信

下图说明了 TLV 模式下的 UART 通信:

  1. 主机设备以 TLV 格式发送请求;

  2. DWM 模块回应一个 TLV 格式的信息.

    ../../../_images/image10.png

    UART TLV 通信


UART TLV 模式通信示例

下图举例说明了主机设备发送 dwm_gpio_cfg_output 命令,将引脚 13 设置为高电平(字节数组中的[0x28, 0x02, 0x0D, 0x01]),并在 TLV 模式下使用 UART API 接收 DWM 模块的响应. 通信流程的步骤如下:

  1. 主机设备以 TLV 格式发送 dwm_gpio_cfg_output TLV格式的命令: 类型 = 0x28,长度 = 0x02,值 = 0x0D 0x01.

  2. DWM 模块以 TLV 格式响应: 类型 = 0x40,长度 = 0x01,值 = 0x00,

其中 Type = 0x40 表示这是一条返回信息,Length = 0x01 表示后面还有一个字节作为数据,value = 0x00 表示 TLV 请求已被正确解析.

../../../_images/image11.png

UART TLV 通信示例


UART Shell模式通信

UART Shell 模式提供提示并使用 Shell command. UART Shell 模式旨在为用户提供人工可读的 API 访问. 因此,所有 Shell command都是字母字符串,后面跟一个字符回车,即 “Enter”. 用户可以直接通过键盘输入字符串,然后按 “Enter ”键发送 Shell command. 除 “退出 ”命令外,DWM1001 UART 在执行完每条 Shell 命令后都会保持 Shell 模式.

如下图所示,完整的 Shell command通信流程包括以下步骤:

  1. 主机设备发送 Shell command + “Enter” 到 DWM1001.

  2. 如果有任何要回应的信息,DWM1001 会将信息发送给主机设备.

  3. 如果没有任何回应,DWM1001 不会发送任何信息,并保持安静.

../../../_images/image12.png

UART Shell模式通信


UART Shell模式通信示例

下图举例说明了主机设备使用 UART Shell 发送 “GPIO 设置 ”命令,将引脚 13 设置为高电平(字节数组中的 “gs 13”,之后是 “回车 ”键,详见 gs). 通信流程的步骤如下:

  1. 主机设备在 Shell 模式下发送 “GPIO 设置 ”命令: “gs 13“ + ”Enter”.

  2. DWM1001 会以字符串 “gpio13: 1” 回应主机.

../../../_images/image13.png

UART Shell模式通信示例


低功耗模式唤醒机制

正如 PANS 库所提供的,DWM 模块可以在低功耗模式下工作. 在低功耗模式下,当主机设备不与 API 通信时,模块会让与 API 相关的线程进入 “休眠 ”状态. 在这种情况下,主机设备需要通过外部接口唤醒模块,然后才能开始真正的通信.

对于 UART 接口,主机设备需要先发送一个字节来唤醒模块.

在 API 传输完成后,主机设备需要让模块回到 “睡眠 ”状态,以节省电源,如 dwm_sleep 和 shell 命令 quit 所介绍.


UART 唤醒

如果 DWM 休眠(低功耗模式),在 SPI/UART 开始接受指令之前,必须执行唤醒程序. 要从休眠状态唤醒,必须在 UART 接口上发送至少一个字节(仅在低功耗模式下).