ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
有两条接收数据包的命令:CMD_PROP_RX 和 CMD_PROP_RX_ADV。后者在数据包形成方式上提供了更大的灵活性。有关详细信息,请分别参阅节 26.10.5.4.1 和节 26.10.5.4.2。
对于这两条命令,无线电必须设置为兼容模式(例如专有模式),并且在命令发送到无线电内核之前,必须使用 CMD_FS 对频率合成器进行编程。
这两条命令都有一个由 endTrigger 和 endTime 指定的结束触发条件。如果在接收器搜索同步时发生该触发条件,则操作以 PROP_DONE_RXTIMEOUT 状态结束。如果在接收数据包时发生该触发条件,则操作取决于 pktConf.endType。如果 pktConf.endType = 0,则数据包将接收完,然后操作以 PROP_DONE_ENDED 状态结束。如果 pktConf.endType = 1,则数据包接收中止,操作以 PROP_DONE_BREAK 状态结束。无线电分别根据节 26.10.5.4.1 和节 26.10.5.4.2 中给出的详细信息接收数据包。收到一个数据包后,就会引发中断。如果 pOutput 不为 NULL,则 pOutput 指向的输出结构(如表 26-173 所示)也会更新。表 26-185 中给出了要引发的中断和要更新的字段。该表还给出了要写入接收缓冲区状态字段的结果(如果启用)。节 26.10.5.4.1 和节 26.10.5.4.2 分别介绍了忽略数据包的条件。
| 条件 | 引发的中断 | 递增的计数器 | 状态字节的结果字段 |
|---|---|---|---|
| 数据包完整接收,CRC 正确且未忽略 | RX_OK | nRxOk | 0 |
| 数据包完成接收,存在 CRC 错误 | RX_NOK | nRxNok | 1 |
| 数据包完整接收,CRC 正确但地址不匹配 (pktConf.filterOp = 1) | RX_IGNORED | nRxIgnored | 2 |
| 数据包接收因超时 (pktConf.endType = 1)、CMD_ABORT、CMD_PROP_SET_LEN 中的长度过短或 CMD_PROP_RESTART_RX 而中止 | RX_ABORTED | nRxStopped | 3 (1) |
| 数据包接收因非法长度或地址不匹配而中止 (pktConf.filterOp = 0) | RX_ABORTED | nRxStopped | – |
| 数据包因缺少缓冲区空间而无法存储 | RX_BUF_FULL | nRxBufFull | 3 (1) |
对于这两类命令,可以通过将 maxPktLen 设置为 0,以在数据包接收开始时将数据包长度配置为无限或未知。该模式只能与部分读取 RX 缓冲器配合使用。如果随后确定了长度,可通过即时或直接命令 CMD_PROP_SET_LEN 进行设置,该命令给出了标头(如有)与 CRC 之间的字节数。除通过这种方式设置长度外,还可通过以下方式停止数据包接收(以下情况不执行 CRC 校验):
对于被忽略的数据包和存在 CRC 错误的数据包,可配置接收缓冲区自动刷新。在这种情况下,数据包在接收后会从接收缓冲区中移除,因此下一个数据包会将其覆盖,且计数器不会更新以反映该数据包已接收。
部分读取 RX 条目不支持自动刷新。如果 rxConf.bAutoFlushCrcErr 为 1,则存在 CRC 错误(即引发 RX_NOK 中断)的数据包会自动刷新。
如果 rxConf.bAutoFlushIgnored 为 1,则被忽略(即引发 RX_IGNORED 中断)的数据包会自动刷新。收到数据包后,下一步操作取决于 pktConf.bRepeat。如果该值为 0,则命令结束。否则,它返回 RX,除非存在导致命令结束的其他条件。命令结束时,如果 pktConf.bFsOff 为 1,则频率合成器关闭。如果 pktConf.bFsOff 为 0,则合成器保持运行,因此该命令之后必须跟一条 RX 或 TX 命令(工作在同一频率)或一条 CMD_FS_OFF 命令来关闭合成器。
表 26-186 中列出了 CMD_PROP_RX 和 CMD_PROP_RX_ADV 的结束状态。该状态决定下一个操作,请参阅节 26.10.5.1。
| 条件 | 状态代码 | 结果 |
|---|---|---|
| 收到数据包,CRC 正确且 pktConf.bRepeatOk = 0 | PROP_DONE_OK | 真 |
| 收到数据包,CRC 错误且 pktConf.bRepeatNok = 0 | PROP_DONE_RXERR | 否 |
| 在同步搜索期间观察到结束触发条件 | PROP_DONE_RXTIMEOUT | 否 |
| 接收数据包期间观察到结束触发条件且 pktConf.endType = 1 | PROP_DONE_BREAK | 否 |
| 接收数据包期间观察到结束触发条件之后收到数据包,pktConf.endType = 0 | PROP_DONE_ENDED | 否 |
| 命令启动后收到 CMD_STOP,且如果找到同步字,则数据包已接收 | PROP_DONE_STOPPED | 否 |
| 命令启动后收到 CMD_ABORT | PROP_DONE_ABORT | ABORT |
| 数据包开始时无可用 RX 缓冲区 | PROP_ERROR_RXBUF | 否 |
| 在部分读取缓冲区的接收过程中,RX 缓冲区空间不足 | PROP_ERROR_RXFULL | 否 |
| 观察到非法参数 | PROP_ERROR_PAR | ABORT |
| 发送命令前未使用 CMD_PROP_RADIO_SETUP 或 CMD_RADIO_SETUP 将无线电设置为受支持的模式 | PROP_ERROR_NO_SETUP | ABORT |
| 发送命令前未对频率合成器进行编程 | PROP_ERROR_NO_FS | ABORT |
| 运行期间观察到 TX 溢出 | PROP_ERROR_RXOVF | ABORT |