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

Telink 2.4G proprietary protocol 泰凌2.4G私有协议

2.4G私有协议介绍

  • 1. 链路层介绍
    • 1.1 数据包格式
      • 1.1.1 定长payload包格式
      • 1.1.2 变长payload包格式
    • 1.2 各字段说明
      • 1.2.1 Preamble
      • 1.2.2 Sync Word
      • 1.2.3 Header
      • 1.2.4 Paload
      • 1.2.5 CRC
      • 1.2.6 RSSI
    • 1.3 Data Rate
    • 1.4 Timebase
    • 1.5 Telink Generic FSK 链路层 (genfsk_ll)
      • 1.5.1 Single TX
      • 1.5.2 Single RX
      • 1.5.3 Single TX to RX
      • 1.5.4 Single RX to TX
    • 1.6 中断描述
      • 1.6.1 TX DONE
      • 1.6.2 RX DONE
      • 1.6.3 RX FIRST TIMEOUT
      • 1.6.4 RX TIMEOUT
    • 1.7 Telink Proprietary 链路层 (tpll)
      • 1.7.1 PRX
      • 1.7.2 PTX
    • 1.8 中断描述
    • 1.9 传输图
      • 1.9.1 非空 ACK 的正常通信过程
      • 1.9.2 空 ACK 的正常通信过程
      • 1.9.3 丢失数据包的单独通信过程
      • 1.9.4 丢失ACK包的单独通信过程
      • 1.9.5 具有最大重传次数的多个通信过程
      • 1.9.6 经典通信过程

在这里插入图片描述

1. 链路层介绍

1.1 数据包格式

1.1.1 定长payload包格式

定长packet包括前导码、同步码、payload、CRC四个字段。
在这里插入图片描述

1.1.2 变长payload包格式

变长packet相较于定长多了一个header,用来说明payload的长度。
在这里插入图片描述

1.2 各字段说明

1.2.1 Preamble

Preamble 可以为 0x55(01010101b) 或 0xAA(10101010b),具体用哪个作为preamble由sync Word的第一字节决定。Preamble的最后一个bit必须和sync word的第一bit极性相反

例如:
如果sync word为0xf3,即11110011b,那么preamble必须为0x55,即01010101b

preamble 的⻓度是可编程的,范围是 1 ~ 31 个字节。

Notice:

31 个字节是允许的最⼤⻓度,额外的⻓度⽤于调试,典型的应⽤程序只需要 1 ~ 8 个字节。

1.2.2 Sync Word

Sync Word 是第⼆个数据包元素,并且在关联设备的⽹络中,所有设备通常共享⼀个公共的 Sync Word。Sync Word 的⻓度通过特定寄存器进⾏编程,范围是 3 ~ 5 个字节。Sync Word 的内容也是通过特定寄存器⽽不是 TX Packet Buffer 进⾏配置。其他第三⽅平台可能⽀持同时搜索不只唯⼀⼀个Sync Word,⽽ Telink TLSR8258 只⽀持搜索⼀个 Sync Word。此外,还有⼀个寄存器⽤于设置 Sync Word 匹配阈值。在 RX 模式下的 PHY’s Sync Word 同步过程中,⼀旦解调数据的匹配⽐特位数达到预设阈值,baseband 会确定⼀个预期的 Sync Word 已被同步。换句话说,匹配阈值决定了 Sync Word 相关过程中 PHY 所能容忍的误码数量。注意,接收到的 Sync Word 没有存储在 RX Packet Buffer 中。TLSR8258 没有专⽤的状态位或中断信号作为 Sync Word 匹配的指⽰,⽽RX DONE irq 可以作为替代。⽆论 CRC 检查结果如何,在 Sync Word 匹配成功之后,接收到预设⻓度的payload 时,就会产⽣ RX DONE irq

当 Sync Word 匹配阈值⼩于 Sync Word 的⻓度时(即,允许 Sync Word 中有误码),CRC 计算使⽤的是payload 和“正确”的 Sync Word,⽽不是实际接收到的 Sync Word,虽然 Sync Word 通过了阈值,但仍可能存在误码。例如,对于 0x11223344 的 Sync Word,接收到的 Sync Word 是通过阈值的 0x00223344。CRC 计算将使⽤ 0x11223344,⽽不是 0x00223344。也就是说,即使 Sync Word 匹配阈值⼩于 Sync Word 的⻓度,CRC 仍然可以识别 payload 字段中可能存在误码。

1.2.3 Header

该字段仅存在于可变⻓度 payload 包格式中。header 的⻓度为 9 bits,包含 6 bits ⻓度的⼦字段,为 payload字段的⻓度,如下所⽰:
在这里插入图片描述

  1. Payload Length: payload ⻓度,单位为 octet, 最⼤⻓度为 2ˆ6-1 = 63 byte。
  2. PID: 为 Telink Proprietary TX/RX 链路层保留,对 Telink Generic FSK 链路层⽆意义,此字段内容可由软件控制。
  3. NO_ACK: 为 Telink Proprietary TX/RX 链路层保留,对 Telink Generic FSK 链路层⽆意义,此字段内容可由软件控制。

1.2.4 Paload

Telink 链路层有两种包格式。⼀种是定⻓ payload 包格式,另⼀种是变⻓ payload 包格式。

在定长 payload 包的结构中,payload 直接跟在 Sync Word 之后,而在变长 payload 包中,它跟在 Header 字段之后。在传输过程中,payload 通过 LSByte、MSBit 先⾏规则进⾏传输。在接收过程中,payload 也是通过LSByte、MSBit 先⾏规则进⾏接收。对于 TX 和 RX 来说,在射频收发器和链路层之间通过 DMA 模块来交换payload。对于 TX,必须在 SRAM 中定义⼀个专⽤的 TX Packet Buffer(即 unsigned char 元素类型的数组),其格式如下所示。

  1. buff前面四个字节用来说明payload的有效长度。为什么定长还有这么一个字段?因为这个长度不是硬件决定的,用户可以自己设置,在运行过程中就不能变化了。2. buffer要求16byte对齐。为什么?因为芯片RF DMA通道的搬运单元为4word,也就是16bytes,所以要16bytes对齐,这可能是空间换时间的一种策略吧。

在这里插入图片描述
在这里插入图片描述

在 PHY 层开始传输前,必须将 payload 的长度和 payload 写入 TX Packet Buffer。
对于 RX,必须在 SRAM 中定义⼀个专⽤的 RX Packet Buffer(即 unsigned char 元素类型的数组),其格式如下:
在这里插入图片描述
在这里插入图片描述

需要注意的是,对于定长 payload 包,在开启 PHY 接收之前,必须通过特定寄存器预设⼀个期望的 payload 长度。⼀旦 Sync Word 被成功关联,链路层控制器将加载预设⻓度的 payload 以及 RX 信息到 RX Packet buffer中,然后⽴即产⽣ RX packet irq。对于变长 payload 包,链路层控制器根据包含在 Header 字段中的 payload长度子字段来确定 payload 长度。

1.2.5 CRC

CRC 是数据包中的检错机制,它紧跟着 payload。经 CRC 校验的数据包部分是可编程的,TLSR8258 的 CRC 是通过 Sync Word 和 payload 固定计算的,CRC 字段的⼤⼩以 octet 为单位进⾏配置,有效范围为:0 <= CRC size <= 2
0 表⽰关闭 CRC 计算,CRC LFSR 的多项式和初始值也是固定的,1 字节 CRC 的多项式为 Xˆ8 + Xˆ2 + X + 1。初始值 0xFF。2 字节 CRC 的多项式为 Xˆ16 + Xˆ12 + Xˆ5 + 1, 初始值为 0Xffff。

1.2.6 RSSI

Telink 链路层有两种类型的 RSSI。⼀种是 RX 数据包的 RSSI,⼀旦收到数据包后,就会存储在 RX Packet Buffer中,其值等于 Sync Word 被识别成功时的 RSSI 瞬间值加上 110。另⼀种是给定信道的实时 RSSI。如果收发器在给定信道上处于 RX 状态,则可以从特定寄存器中读出该信道的实时功率测量值,该值减去 110 即为该信道的实时 RSSI。实时 RSSI 通常⽤来判断给定信道是否繁忙。

1.3 Data Rate

Telink 链路层控制器提供 4 个⽐特率选项,2Mbps、1Mbps、500Kbps 和 250Kbps,可通过特定寄存器进⾏编
程。

1.4 Timebase

Telink 链路层控制器可以使⽤以 16MHz 速率运⾏的 32-bit 多功能系统定时器,来调度其所有的 TX 和 RX 活动,低功耗模式 (suspend/deep sleep) 期间除外。时钟源为⾼精度 24MHz 外置的晶体振荡器。以 16MHz 速率运⾏的 32-bit 系统定时器⼤约每 268.4 秒滚动 (环绕) ⼀次。系统定时器的计数值可以随时通过相应的 API 读取和更改。
TLSR8258 中提供了两个 32-bit 定时器⽐较寄存器 T1_CMP 和 T2_CMP。当系统定时器达到 T1_CMP 值时,链路层控制器可以⾃动开启收发操作。同样,⼀旦系统定时器达到 T2_CMP 值,链路层控制器就可以⾃动停⽌收发操作。为了⽅便⽤⼾使⽤,这⾥提供了 6 种⾃动收发操作模式,分别由各⾃的硬件状态机实现:Single TX、Single RX、Single TX to RX、Single RX to TX、PTX 和 PRX, 前四种为 Telink Generic FSK 链路层,后两种为Telink Proprietary TX/RX 链路层。

1.5 Telink Generic FSK 链路层 (genfsk_ll)

1.5.1 Single TX

在该模式中,仅涉及 T1_CMP,即在系统定时器达到 T1_CMP 值时开始传输准备好的数据包。⼀旦传输完成,就会产⽣ TX DONE irq。
在这里插入图片描述

1.5.2 Single RX

在该模式中,T1_CMP 和 T2_CMP 都会涉及到。当系统定时器达到 T1_CMP 值时,收发器进⼊ RX 状态,开始搜索预期的 Sync Word。如果在系统定时器达到 T2_CMP 值之前未成功关联 Sync Word,则会产⽣ RX FIRST TIMEOUT irq,收发器回到 IDLE 状态。如果在系统定时器达到 T2_CMP 值之前收到数据包,则产⽣ RX DONE irq,收发器就回到 IDLE 状态。也可以禁⽤ T2_CMP,这意味着收发器将始终处于 RX 状态,直到收到数据包。
在这里插入图片描述

1.5.3 Single TX to RX

在该模式中,涉及到两个⽐较定时器。在系统定时器达到 T1_CMP 值时开始发送准备好的数据包。发送完成后,产⽣ TX DONE irq,收发器等待⽚刻(这个等待时间是可编程的),然后进⼊ RX 状态。如果在系统定时器达到T2_CMP 值之前未成功关联 Sync Word,则会产⽣ RX TIMEOUT irq,收发器回到 IDLE 状态。如果在 T2_CMP匹配之前收到数据包,则产⽣ RX DONE irq,收发器回 IDLE 状态。该⾃动模式适⽤于发送数据包后需要 ACK或响应数据包的场景。

在这里插入图片描述

1.5.4 Single RX to TX

在该模式下,收发器在 T1_CMP 匹配时⾸先进⼊ RX 状态,等待数据包到达。如果在系统定时器到达 T2_CMP值前都没有收到包,则会产⽣ RX FIRST TIMEOUT irq,收发器回到 IDLE 状态。如果数据包在 T2_CMP 匹配之前到达,则产⽣ RX DONE irq,收发器等待⽚刻(这个等待时间是可编程的),然后转换为 TX 状态并开始传输准备好的数据包。该⾃动模式适⽤于接收到数据包后需要发送 ACK 或响应数据包的情况。
在这里插入图片描述

1.6 中断描述

Telink 通⽤ FSK 链路层控制器共有四个相关的中断信号:TX DONE、RX DONE、RX FIRST TIMEOUT 和 RXTIMEOUT。

1.6.1 TX DONE

每完成⼀次数据包的传输,就会产⽣⼀个 TX DONE irq。

1.6.2 RX DONE

⽆论** CRC 校验结果如何**,⼀旦接收到数据包,就会产⽣⼀个 RX DONE irq,这意味着只要 Sync Word 匹配,就会在接收到整个数据包后产⽣⼀个 RX DONE irq

1.6.3 RX FIRST TIMEOUT

当系统定时器达到 T2_CMP 值时,RX FIRST TIMEOUT irq 产⽣在上述的两种⾃动模式 Single RX 和 Single RX to TX 中。

notice:

FIRST的意思是,RX在一个传输窗口内首先出现。single RX只有RX,RX当然是首先出现的,所以用FIRST TIMEOUT;single rx to tx中RX也是首先出现,所以也是FIRST TIMEOUT。

1.6.4 RX TIMEOUT

当系统定时器达到 T2_CMP 值时,RX TIMEOUT irq 仅产⽣在 Single TX to RX 模式。

1.7 Telink Proprietary 链路层 (tpll)

1.7.1 PRX

在该模式下,假设在进⼊ PRX RX 模式之前已经完成了所有与 RF 相关的配置,并且通过向寄存器“0xf00”写⼊“0x84”来触发 RF 实施接收。

⾸先,状态机进⼊ RX Settle 阶段,等待 RF RX Settle 阶段的 PLL 趋于稳定(⾄少需要 85us)。可通过寄存器0xf04<7:0> 和 0xf05<3:0> 配置“RX Settle”的持续时间(单位:us)。RX Settle 阶段结束后,状态机进⼊实际 RX 阶段

实际 RX 阶段是数据包接收的实际阶段,其持续时间是可配置的。

  • 当寄存器 0xf03<2> 设置为 1’b1 时,实际 RX 阶段的持续时间等于 RX Time 减去 RX Settle 阶段的持续时间,可通过寄存器 0xf0a 和 0xf0b 配置 RX 时间(单位:us)。
  • 当寄存器 0xf03<2> 被清零时,状态机将停留在实际 RX 阶段,直到收到数据包才进入下⼀个阶段

从这里可以看出来,RX有两种工作模式,一种是带有超时机制的,一种是死等的。
RX Time=Rx Settle+实际RX时间

当 RX 阶段收到⼀个数据包时,状态机会判断这个数据包是否为重复数据包。

  • 如果是重复数据包,则不会存储在相关寄存器中。
  • 如果不是重复数据包,射频硬件会解析数据包 Header 的 Packet Control 字段中的“NO _ ACK”位,并对该位和本地 0xf15<5> 位进⾏ XOR 操作。

如果 XOR 操作结果为 1,则认为对⽅不需要 ACK,状态机将返回 RX Settle 阶段等待接收下⼀个数据包。
如果 XOR 操作结果为 0,则认为对⽅需要 ACK,状态机会向对⽅发送⼀个 ACK 数据包。

当状态机需要应答 ACK 时,⾸先等待“TX wait”的持续时间(单位:us),这个时间可通过寄存器 0xf0e<7:0>和 0xf0f<3:0> 进⾏配置。然后状态机进⼊ TX Settle 阶段,以便等待 TX 阶段的 PLL 稳定(⾄少需要 112.5us)。

TX Settle 阶段的持续时间可通过寄存器 0xf04<7:0> 和 0xf05<3:0> 进⾏配置。

TX Settle 阶段结束后,状态机进⼊实际 TX 阶段发送 ACK。实际 TX 阶段的持续时间由 ACK 数据包的⻓度决定。

发送 ACK 数据包后,状态机等待“RX wait”的持续时间(单位:us),这个时间可通过寄存器 0xf06<7:0> 和0xf07<3:0> 配置,然后返回到 RX Settle 阶段接收下⼀个数据包。

下图显⽰了状态机的 PRX 时序流程。
在这里插入图片描述

1.7.2 PTX

在该模式下,假设在进⼊ PTX TX 模式之前已经完成了所有的配置,并且 TX 缓冲区已经填充,然后通过将“0x83”写⼊寄存器“0xf00”来触发 RF 实施传输。

首先,状态机等待通过寄存器 0xf04<7:0> 和 0xf05<3:0> 配置的 TX Settle 阶段,以便 RF TX Settle 阶段的PLL 趋于稳定(⾄少需要112.5us)(单位:us)。

然后状态机进⼊实际 TX 阶段,RF 将在空中发送数据包。数据包传输的持续时间由数据包⻓度决定。
数据包传输结束后,⾸先 RF 状态机会计算寄存器 0xf15<5> 和 0x404<6> 的 XOR 结果,然后据此判断是否需要等待对⽅的 ACK。

  • 当 XOR 结果为 1 时,状态机将认为不需要等待来⾃对⽅的 ACK,从⽽结束当前数据包传输,等待下⼀次传输被触发。
  • 当 XOR 结果为 0 时,状态机将认为需要等待对⽅的 ACK。状态机将等待通过寄存器 0xf06<7:0> 和0xf07<3:0> 配置的“RX Wait”时间(单位:us),然后切换到 RX 模式,等待 PRX 从 RX 切换到 TX 并响应 ACK。

PTX 将在通过寄存器 0xf0a<7:0> 和 0xf0b<3:0> 配置的“RX Time”内保持在 RX 模式(单位:us),等待对方回应 ACK。

注意:

在 PRX 模式的“RX Settle”期间(通过 0xf0c<7:0> 和 0xf0d<11:8> 配置,单位:us),状态机保持在 RX Settle 状态,等待 RF PLL 变得稳定(⾄少需要 85us)。在 RX Settle 阶段,由于实际上未启⽤ RF RX 功能,⽆法接收任何即将到来的数据包,即 RX 时间内的有效接收周期为实际 RX 阶段。

  • 如果在实际 RX 阶段接收到 ACK 数据包,则完成当前数据包的传输。

  • 如果在 RX 时间到期时没有收到对⽅的 ACK,PTX 将尝试重传。⾸先判断重试次数是否达到最⼤值:若未达到,则执⾏“retry cnt++”。然后等待通过 0xf10<7:0> 和 0xf11<3:0> 配置的“ARD”持续时间(⾃动重传延迟,单位:us)。
    在这里插入图片描述

1.8 中断描述

对于 PTX 端,每次发送数据包时都会触发 TX 中断。⽤⼾可以通过检查标志位来判断数据包是否发送成功。

如果 PTX 启⽤ ACK,则当接收到来⾃ PRX 的 ACK 时,适⽤以下两种情况:

  • 如果 PRX 响应的是空 ACK,PTX 将只触发 TX_DS 中断。
  • 如果 PRX 响应的是⼀个带有有效载荷的 ACK,PTX 将产⽣ RX_DR 和 TX_DS 中断。

如果 PTX 在指定的持续时间内没有接收到任何 ACK,它将尝试重传同⼀个数据包,直到接收到 ACK 或者重试次数达到预设的阈值。如果 PTX 在重试次数达到阈值后没有收到任何 ACK,则会产⽣ RETRY_HIT 中断。

对于 PRX 端,每次接收到数据包都会产⽣ RX 中断,但只有当接收到的数据包具有正确的 CRC 结果且Payload_Len 不等于 0 时,才能产⽣ RX_DR 中断。如果是带有 Payload 的 ACK 模式,则从接收第⼆个数据包开始就会产⽣ TX_DS 中断

如果 PRX 启⽤ ACK,在⼀次传输中产⽣ TX 和 RX 中断,但不产⽣ RX_DR 中断。原因可能如下:

  • 收到有错误 CRC 结果的数据包。
  • 收到 Payload_Len 等于 0 的空包。
  • 收到与前⼀个数据包具有相同 PID 的数据包。

Notice:

  • 当接收到的数据包 PID 既不是 local_pid(重复包) 也不是 local_pid + 1(下一个包) 时,PTX 和 PRX 都会产⽣ INVALID_PID中断。PTX\PRX 在连续接收两个 CRC 结果错误的数据包时会产⽣ CRC_2 中断。
  • PRX 可配置为连续接收数据包或仅在指定持续时间内接收数据包。如果 PRX 配置为在特定的持续时间内接收数据包,⽽在该持续时间内没有接收到任何数据包,则会产⽣ RX_TIMEOUT 中断。

1.9 传输图

1.9.1 非空 ACK 的正常通信过程

在这里插入图片描述
如果是带有 Payload 的 ACK 模式,则从接收第⼆个数据包开始就会产⽣ TX_DS 中断

1.9.2 空 ACK 的正常通信过程

在这里插入图片描述

1.9.3 丢失数据包的单独通信过程

在这里插入图片描述

1.9.4 丢失ACK包的单独通信过程

在这里插入图片描述

1.9.5 具有最大重传次数的多个通信过程

在该场景中,预设 ARC 为 2。如果 PTX 在重试次数达到阈值(ARC = 2)后没有收到任何 ACK,则会产⽣RETRY_HIT 中断。
在这里插入图片描述

1.9.6 经典通信过程

在通信过程中,收发器会出现产⽣ TX 和 RX 中断但不产⽣ RX_DR 中断的情况。出现这种现象的原因是⾮唯⼀
性的,主要由以下问题造成:

  • 收到有错误 CRC 结果的数据包。
  • 收到没有 payload(payload_len = 0)的数据包。
  • 收到的数据包 PID 与本地 PID 相同。
    在这里插入图片描述

通常情况下,Telink PTX 只有在丢失 ACK 数据包时才会连续发送同⼀ PID 的数据包。


http://www.mrgr.cn/news/55517.html

相关文章:

  • xlnt加载excel报错:xl/workbook.xml:2:2581: error: attribute ‘localSheetId‘ expected
  • Reverse.Kr—— 前四题
  • Java抽象类
  • 数据库、数据仓库、数据湖和数据中台有什么区别
  • 使用 Docker-compose 部署达梦 DM 数据库
  • 【MySQL】提高篇—复杂查询:多表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)
  • Windows下安装并使用 NVM(Node Version Manager)
  • 材料研究与应用
  • 高级sql技巧
  • git配置以及如何删除git
  • Python包---numpy1
  • unix系统的终端、进程、进程组、会话、控制终端、作业控制之间的关系
  • Python内置函数classmethod()详解
  • 有没有好用的待办事项清单软件? —— 一文带你了解
  • 企业成本与时间管理新策略 低代码自动化显身手
  • 《深度学习》模型的部署、web框架 服务端及客户端案例
  • 提升小学语文教学效果的思维导图方法
  • 完爆YOLOv10!Transformer+目标检测新算法性能无敌,狠狠拿捏CV顶会!
  • HTML 实例/测验之HTML 基础一口气讲完!(o-ωq)).oO 困
  • 《Frida Android SO逆向深入实践》书评——清华大学出版社
  • Electron兼容win7版本的打包流程
  • 周报 | 24.10.14-24.10.20文章汇总
  • AI 编译器学习笔记之八 -- Python基础学习
  • 从0到1构建Next.Js项目SSG和SSR应用
  • Effective C++ | 读书笔记 (一)
  • MySQL-31.索引-结构