This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1200:SmartPreamble 模式下的器件地址检查。

Guru**** 2535150 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/993950/cc1200-device-address-check-in-smartpreamble-mode

器件型号:CC1200

我在 SmartPreamble 示例(swrc274a)中添加了地址检查时遇到了一些问题。

我添加了  

{CC120X_PKT_CFG1、0x13、0x00}、
{CC120X_DEV_ADDR、0x05、0x00}

定制 RegisterSettings[]中。

并在 TX 端的函数 createPacket()中添加了地址字段。 现在、此函数:  

静态空 createPacket (void){
UINT16校验和;
uint16 i;


txBuffer[SMARTPREAMBLE_LEN]= 0x55;//前导码
txBuffer[SMARTPREAMBLE_LEN + 1]= 0x55;//前导码
txBuffer[SMARTPREAMBLE_LEN + 2]= 0x55;//前导码
txBuffer[SMARTPREAMBLE_LEN + 3]= 0x55;//前导码
TxBuffer[SMARTPREAMBLE_LEN + 4]= 0xD0;//有效载荷 SYNC1
TxBuffer[SMARTPREAMBLE_LEN + 5]= 0xC9;//有效载荷 SYNC0
txBuffer[SMARTPREAMBLE_LEN + 6]= 21;//长度字节
txBuffer[SMARTPREAMBLE_LEN + 7]= 0x05;//地址字节

//带有随机数据的有效载荷
uint8_t temp = 0x01;
for (uint16_t i =(SMARTPREAMBLE_LEN + 8);
I <(SMARTPREAMBLE_LEN + 8 + PAYLOAD_LENGTH);i++){
txBuffer[i]= temp++;

//为数据包生成 CRC
校验和= CRC_INIT;
for (i =(SMARTPREAMBLE_LEN + 6);
i <=(SMARTPREAMBLE_LEN + 7 + PAYLOAD_LENGTH);i++){
校验和= calcCRC (txBuffer[i]、校验和);

TxBuffer[SMARTPREAMBLE_LEN + PAYLOAD_LENGTH + PAYLOAD_开销- 2]=
(uint8_t)(校验和>> 8);
TxBuffer[SMARTPREAMBLE_LEN + PAYLOAD_LENGTH + PAYLOAD_开销- 1]=
(uint8_t)(校验和& 0x00FF);

在文件 cc120x_smartpreamble_settings.h 中、我已经更改了  

#define PAYLOAD_RAY开销     9.

更改为

#define PAYLOAD_RAY开销     10.

它仅在我将  NUM_TIMESTAMP_PACKETS 设置在范围2 - 5时工作。

地址过滤的工作原理我对此进行测试。 使用 NUM_TIMESTAMP_packets  2.

但是、如果我将 NUM_TIMESTAMP_PACKETS 设置为50、则会丢失70%的数据包。

如果我将 NUM_TIMESTAMP_PACKETS 设置为 250 、则表示数据包丢失了99%。

我缺少什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否还记得在所有时间戳数据包中添加地址?

    BR

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的答复。

    我已将  TIMESTAMP_PACKE_LEN 更改为  8

    和修改 了通用 SmartPreamble 函数、如下所示

    void generateSmartPreamble (uint8* txBuffer){
    uint16 i;
    UINT16校验和;

    //生成时间戳
    对于(i = 0;i < NUM_TIMESTAMP_packets;i++){
      校验和= CRC_INIT;
      校验和= calcCRC (0x02、校验和);
      校验和= calcCRC (0x05、校验和);
      校验和= calcCRC ((NUM_TIMESTAMP_packets - 1)- I、校验和);

      txBuffer[(I * 8)]= 0x55;
      txBuffer[(I * 8)+ 1]= 0x93;
      txBuffer[(I * 8)+ 2]= 0x0B;
      txBuffer[(I * 8)+ 3]= 0x02;//长度字节
      txBuffer[(I * 8)+ 4]= 0x05;//地址
      txBuffer[(I * 8)+ 5]=(NUM_TIMESTAMP_packets - 1)- I;
      txBuffer[(i * 8)+ 6]=(uint8)(校验和>> 8);
      txBuffer[(I * 8)+ 7]=(uint8)(校验和& 0x00FF);
      }

    刷写了两块板、但仍然无法正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    -您是否获得了此示例以未修改的方式运行?

    -您是否重新计算 tEvent0时间,因为在时间戳数据包中添加地址字节将更改时间。   

    -修改后,您会收到一些数据包。 您是否检查了您是否收到了时间戳数据包? 您是否比较了接收到的数据包与主数据包开始之间的时间以及计算出的时间?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    未修改 的示例工作正常。

     tEvent0时间通过 generateLookupEvent0Table 函数重新计算。

    不管怎样、现在一切都正常、我的错误是在 RX prj main.c 中、应该读取时间戳编号。

    Siri、ter 感谢您的帮助。