基于 NXP QN9080 三模鼠标开发 —— 2.4G 模式数据封包格式

一、概述

        继上一篇讲述了 2.4G 模式基于 SDK 中比较重要的一些测试,本文将为大家介绍一下 2.4G 发送数据的数据格式及其组成。


二、环境搭建

2.1 SDK 下载

        本文基于 NXP QN9080 IC,SDK 可在NXP 官网 https://mcuxpresso.nxp.com 下载。

2.2 硬件

        本文基于 QN9080 DK 板进行开发,DK 板如图 2.2 所示。

 


                                                                                                                                                                       图 2.2

2.3 开发软件

        SDK 支持 IAR、Keil、MCUXpreeso IDE 三种开发软件、本文以 IAR 为开发环境作为介绍。

三、工程介绍

        在 SDK_2.2.0_QN908XCDK\boards\qn908xcdk\wireless_examples\genfsk\Connectivity_test 目录下的工程是描述 2.4G 的基本功能,这次将给大家介绍一下 2.4G 数据包的封包格式,让大家了解数据包的组成以及可以如何修改数据包得到自己需要的功能。

3.1  数据包组成

        2.4G 的数据包主要由 4 部分组成,分别是 Preamble 、Access address 、PDU 以及 CRC。每部分的大小范围如下:

  • Preamble: 1 ~ 8 Bytes
  • Access address: 3 ~ 5 Bytes
  • PDU: 0 ~ 2048 Bytes
  • CRC: 0 ~ 3 Bytes

 

        具体内容可参考图 3.1 – 1。

 
                               

                                                                                                                                                                       图 3.1 – 1

        下面将一一为大家介绍数据包的每一个成员。

3.2  Preamble 的介绍

        Preamble 是发送数据的前导码,数据包里面至少使用 1 个 Byte 用于前导,对于 2M 传输速率建议使用不少于 2 Bytes 当做前导。在 SDK 默认的情况下数据包的前导是 10101010b 或者 01010101b,也就是 0xAA 和 0x55。

        具体代码显示如图 3.2 – 1。

                             

                                                                                                                                                                       图 3.2 - 1

 

        图 3.2 – 1 中的 ① 是 Preamble 的大小,Preamble 的值可以自定义修改,通过修改 gGenFskDefaultPreamSize_c 这个宏进行改变。具体位置可参考图 3.2 – 2。图 3.2 – 1 中的 ② 是将 Preamble 的值接入发送 Buffer 的过程。

 
                               

                                                                                                                                                                       图 3.2 – 2

 

        另外 Preamble 的范围可以通过一个 8 bit 寄存器进行修改,具体的参数修改如图 3.2 – 3。

 
                               

                                                                                                                                                                       图 3.2 – 3

 

3.3  Access address 的介绍

        Access address 主要是为了确认通信双方的存在,只有发送端以及接收端拥有的 Access address 完全一样才能进行通信,我们可以利用这个特性去使得每一个产品的接收端以及发送端都是唯一匹配的,这样就不会出现一个接收端同时连上多个发送端或者一个发送端多个接收端的问题了。Access address 的修改方式如图 3.3 – 1。

 
                               

                                                                                                                                                                       图 3.3 – 1

 

        图 3.3 – 1 中的 ① 是 Access address 的大小,可以通过改变宏的大小进行修改,但是 Access address 的实际大小是在宏的基础上加 2。具体位置可参考图 3.2 – 2。图 3.2 – 1 中的 ② 是将 Access address 的值接入发送 Buffer 的过程。

 
                               

                                                                                                                                                                       图 3.3 - 2

 

        另外 Access address 的默认地址也可以进行修改,具体的修改方式如图 3.3 – 3。图 3.3 – 3 的 ① 是 Access address 的大小,② 是 Access address 的默认地址,虽然 SDK 中的默认地址写了 5 Bytes,但是实际 SDK 只用到了 4 Bytes,具体需要用到多少 Bytes 可以根据自己实际项目去修改相应的寄存器,可参考图 3.3 – 4。



                               

                                                                                                                                                                       图 3.3 – 3

 
                               

                                                                                                                                                                       图 3.3 – 4

 

        初始化默认的 Access address 可以通过图 3.3 – 5 的函数进行初始化或者在修改了地址之后进行及时的更换。

                               

                                                                                                                                                                       图 3.3 - 5                        

 

3.4  PDU 的介绍

        PDU 之中最主要的是 payload,这是用来存放我们要传输的数据,payload 的具体格式以及具体内容可以根据自己的实际情概况进行存放,例如我们需要做一个鼠标,就可以将 Sensor 的数据以及按键的数据都放进去 payload 里面进行传输,但是需要注意的是 2.4G 的传输时间与传输的数据长度是成正比的,因此不建议一次传输太长的数据。PDU 的长度可以通过修改寄存器 DP_TOP_SYS_CTRL 里面的 bit 达到需要的长度,具体可参考图 3.4 – 1。

 
                               

                                                                                                                                                                       图 3.4 – 1

 

        PDU 的总长度可以达到 2048 Bytes,但是需要区分 Tx 端还是 Rx 端,可以参考以下两条计算公式:

  • TX 端:  Preamble + Access Address + PDU <= 2048 bytes
  • Rx 端: PDU+CRC <= 2048 bytes

 

3.5  CRC 的介绍

        CRC 检验将会使用硬件 CRC,并且通过一定的多项式计算,将计算到的值拼接到需要发送的 Buffer 上面进行发送,接收端接收到之后再通过同样的计算方式计算后进行比较,从而得出接收到的数据是否被改变或者是否是自己需要的包。CRC 可以设置为 4 种模式,分别是 no CRC、 8 bit CRC、 16 bit CRC、 24 bit CRC,具体的设置方式是通过修改寄存器的值进行设置,可以参考图 3.5 – 1。

 
                               

                                                                                                                                                                       图 3.5 – 1

 

        此外,不同模式的 CRC 会使用不同的多项式进行计算,多项式的计算公式如下:

  • 8 bits CRC: x8 + x2 + x + 1
  • 16 bits CRC: x16 + x12 + x5 + 1
  • 24 bits CRC: x24 + x10 + x9 + x6 + x4 + x3 + x + 1

 

        对于 CRC 的初始化可以通过图 3.5 – 2 的结构体进行初始化,并且使用图 3.5 – 3 中函数进行配置。当然对于 CRC seed 这个参数,我们可以通过寄存器进行修改,可以将默认的 0xFFFFFF 修改成任意数,具体可以参考图 3.5 – 4。

 
                               

                                                                                                                                                                       图 3.5 – 2

 
                               

                                                                                                                                                                       图 3.5 – 3

 
                               

                                                                                                                                                                       图 3.5 – 4

 

四、总结

        经过上面的解析说明,相信大家都对于QN9080 SDK 2.4G 模式的数据包的组成已经有所了解了,后面将会给大家介绍一下如何在实际应用中针对 Access address 做出一个发射端对接一个接收端的问题。欢迎大家继续观看。

 

五、参考资料

        [1] QN908x.pdf
        [2] QN908x user manual.pdf

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论