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.

[参考译文] CC1310:使用EasyLink更改地址长度

Guru**** 2393895 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/575982/cc1310-changing-the-address-length-with-easylink

部件号:CC1310
主题中讨论的其他部件:SimpliciTI

我一直在玩rfWsn示例,并决定我的应用程序需要一个更长的地址。

我遇到了一个API函数,用它来扩展地址的大小:

EasyLink _setCtrl(EASYLink_Ctrl_AddSize, 4); 

此外,我还对项目的其他部分进行了更改,以适应较长的地址。 我遵循这一指南,大致了解需要改变的方面:  

但是,我很快发现,发送/接收的数据包阵列也需要更改,以便为较长的地址腾出空间。 我在节点和集中器应用程序中都执行了此操作。

/*保存数据包*/
latestRxPacket.header.sourceAddress =(rxPacket->payload[0]<24)|//已更改以为较长地址腾出空间
(rxPacket->load[1]<<16)|
(rxPacket->payload[2]<<8)|
rxPacket->Payload[3];
latestRxPacket.header.packetType = rxPacket->payload[4];
latestRxPacket.dmSensorPacket.adcValue =(rxPacket->payload[5]<< 8)|
rxPacket->Payload[6];
latestRxPacket.dmSensorPacket.batt =(rxPacket->payload[7]<< 8)|
rxPacket->Payload[8];
latestRxPacket.dmSensorPacket.time100MiliSec =(rxPacket->payload[9]<< 24)|
(rxPacket->load[10]<<16)|
(rxPacket->load[11]<< 8)|
rxPacket->Payload[12];
latestRxPacket.dmSensorPacket.Button = rxPacket->Payload[13];

/*接收到信号包*/
EVENT_POST (radioOperationEventHandle,radio_event_valid_packet_received); 

实施此操作后,我观察Concentrator切换时,它的"RADIO_EVENT_VALIDE_PACKGE_Received"指示LED每 3次,节点发送1个数据包。 这也导致它崩溃了几次,但我不知道为什么会发生这种情况,也不知道是什么原因造成的。 为什么会发生这种情况?

我已附加了项目文件,这些文件应该会有所帮助。 我一直在两个CC1310启动板上运行它。 如果有人能对此进行测试并在此为我提供一些指导,我将不胜感激。

e2e.ti.com/.../rfWsnExamples_5F00_4ByteAddr.zip

编辑:要测试示例,您需要在收集器端对EasyLink地址过滤进行注释,因为现在它是为我的特定LaunchPad设置的(地址从IEEE地址生成)。

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

    我明白了。 我提交此文件寻求帮助的时机可能还不成熟,但由于在如何扩展地址长度方面没有太多资源,我将保留此内容。

    问题是我在sendAck()函数中以错误的顺序将目标地址输入ACK数据包阵列。 我想我在处理地址时会被人拒绝。 因此,节点在未收到确认时尝试重新发送数据,这看起来像是发送到Concentrator设备的新数据包。 但我还是不知道这为什么会造成偶尔的碰撞。

    因此,如果有人以上面的项目文件为例,请将sendAck函数中设置目标地址的部分替换为:

    /*设置目的地地址地址,但使用EasyLink层目标地址功能*/
    txPacket.dstAddr[0]=(latestSourceAddress和0xFF0万)>>24;
    txPacket.dstAddr[1]|=(latestSourceAddress和0x0000)>>16;
    txPacket.dstAddr[2]|=(latestSourceAddress & 0xFF00)>>8;
    txPacket.dstAddr[3]||(latestSourceAddress和0xFF);