ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
CMD_PROP_RX_ADV 用于接收格式符合图 20-11 的数据包。作为特例,用户可以按图 26-9 中所示设置数据包。参数如表 26-175 中所示。
调制解调器配置接收器并开始监听同步字。要监听的同步字在 syncWord0 字段中给出,如果使用的位数少于 32 位,则该字段位于 LSB 中。该字按照无线电中编程的位序排列。如果 syncWord1 非零且 MCE 支持,接收器还会监听 syncWord1 字段中给出的同步字(格式相同)。当使用 CMD_PROP_RX_ADV_SNIFF 且 csConf.bEnaCorr 设置为 1 时,不能使用两个同步字。
如果检测到同步字,则无线电 CPU 开始接收数据。数据包可包含一个标头,其位数由 hdrConf.numHdrBits 指定,最多可达 32 位。如果标头中的位数不能被 8 整除,则认为标头由足够数量的字节组成,包含所有存储的位,如节 26.5.3.1所示。此标头可包含长度字段或地址。
收到的数据包可以是固定长度或可变长度。如果 hdrConf.numLenBits 为 0 且 maxPktLen 非零,则数据包为固定长度,由标头之后到 CRC 之前的 maxPktLen 个字节组成。如果 hdrConf.numLenBits 大于 0,则从标头 LSB 起始的第 hdrConf.lenPos 位开始,读取长度为 hdrConf.numLenBits 的字段,并将其作为长度字段。将有符号数 lenOffset 与收到的长度相加,得出标头之后到 CRC 之前的字节数。如果此数值小于或等于 maxPktLen,则接收该数据包。如果 maxPktLen 为零,则长度不受限制,如节 26.10.5.4开头所述。CMD_PROP_RX_ADV 的数据包长度定义与 CMD_PROP_TX_ADV 的定义不同,请参阅节 26.10.5.4.2,其中标头包含在数据包长度内。
支持两种地址。第一种选择是地址作为标头的一部分。在这种情况下,地址大小可以为 1 到 31 位。另一种选择是将地址放在标头之后。如果这样,地址由 1 到 8 个字节组成。要使用包含在标头中的地址,必须将 addrConf.addrType 设置为 1。地址的位数由 addrConf.addrSize 给出。这些位从标头的第一位起,按 addrConf.addrPos 指定的位序号进行读取。要使用标头之后的地址,必须将 addrConf.addrType 设置为 0。在这种情况下,地址的字节数由 addrConf.addrSize 给出。
收到的地址将与 pAddr 指向的地址列表进行比较。要与此列表比较的地址即为收到的地址。此外,如果满足以下条件之一,会将一个用于标识同步字的位作为 MSB 与地址相拼接:
如果收到的同步字为 syncWord0,则此额外位为 0;如果收到的同步字为 syncWord1,则为 1。地址列表中的条目大小为 8、16、32 或 64 位;选择能够容纳地址大小(如果适用,包括同步字标识位)的最小大小。地址列表中的条目数量由 addrConf.numAddr 给出。无线电 CPU 扫描地址列表中的地址,并将其与收到的地址进行比较。如果不匹配,则进一步的处理取决于 pktConf.filterOp。如果此位为 0,则停止接收并重新开始搜索同步字。如果此位为 1,则如同地址已匹配一样接收数据包,但将其标记为忽略。
如果 addrConf.addrSize 为零,则不使用任何地址。在这种情况下,pAddr 被忽略且必须为 NULL。
如果正在接收数据包,数据将放入接收缓冲区,如节 26.5.3.1所示。此接收缓冲区位于 pQueue 指向的接收队列中。如果 pQueue 为 NULL,则从不存储数据包。
标头作为一个字段接收,遵循无线电中编程的位序。如果标头超过 8 位且 rxConf.bIncludeHdr 为 1,则标头始终以小端字节序写入接收缓冲区。如果无线电配置为先接收 MSB,则接收缓冲区中存储的最后一个标头字节最先被接收。有效载荷逐字节存储,因此在标头之后,无论无线传输的位序如何,都不会发生字节交换。
如果 pktConf.bUseCrc 为 1,则在末尾接收并校验 CRC。CRC 位数、多项式和初始化值遵循无线电中的配置。如果 pktConf.bCrcIncSw 为 1,则收到的同步字(假设它与 syncWord0 或 syncWord1 完全相同)包含在用于计算 CRC 的数据集中。如果 pktConf.bCrcIncHdr 为 1,则收到的标头包含在用于计算 CRC 的数据集中。有效载荷(包括标头之后的可选地址)始终用于计算 CRC。如果 pktConf.bUseCrc 为 0,则处理方式与 CRC OK 相同。
如果启用了数据白化,只有当 pktConf.bCrcIncHdr 为 1 时,可选的标头才会进行解白化处理。启用后,有效载荷(包括标头之后的可选地址)和收到的 CRC 始终会进行解白化处理。解白化处理在 CRC 评估之前完成。
如果将状态字节附加到数据包(rxConf.bAppendStatus 为 1),其格式如下(请参阅“接收缓冲区”
表 26-180)。如果 addrConf.addrSize 非零,addressInd 字段是地址列表中第一个与接收地址匹配的索引(如果存在地址匹配情况)。否则,addressInd 为 0。如果收到的同步字为 syncWord0,则 syncWordId 字段为 0;如果同步字为 syncWord1,则为 1。结果字段根据表 26-185 写入。