必须在星型网络中配置 CC1310器件。
中央器件是一个 CC1310、此器件能够以无线方式与多个 CC1310器件交互。 该地址已配置为8个字节。
有人可以指导我如何使用=> EasyLink_enableRxAddrFilter 函数使中央器件与周围的每个器件独立同步、而不影响其他器件。
实现的 Easylink 版本为4.20.02.07
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_enableRxAddrFilter ()过滤目标地址或源地址吗? -低于1GHz 论坛-低于1GHz - TI E2E 支持论坛
Siri
你好,Siri。
我已阅读所提供主题中的信息。
现在,我已经被提出了一个问题。 在我的代码中、我尝试在两个初始化发送方地址的 CC1310之间建立通信(工作正常)。当我尝试由 ceceptor 使用广播地址进行传输、以将消息通知其他器件时、会出现此问题。 此时程序被阻止。
是否有办法禁用接收器中的目标地址并切换到另一个?
附件是代码块。
static void Task_Nozzle_ON(UArg arg0, UArg arg1){ EasyLink_enableRxAddrFilter(global,8,1); EasyLink_receiveAsync(RxCb, 0); while (true){ if(mFlag){ switch(Conection.status){ case Active:{ Conecton.status = sleep; break; } case sleep: { Conection.status = NFC; break; } case NFC:{ Conection.status = Broadcast_Send; break; }// case Broadcast_Send:{ txPacket.payload[0] = 0x6E; txPacket.payload[1] = 0xA2; memcpy(txPacket.dstAddr,dir_Broadcast, sizeof(dir_Broadcast)); txPacket.len = 2; EasyLink_transmitAsync(&txPacket, TxCb);//*/ break; }
非常感谢 Siri。
恐怕我不能完全理解您希望如何使用地址过滤、所以我将仅分享一些简单的示例:
我使用了默认的 rfEasyLinkTx 和 rfEasyLinkRx 作为起点、但简化了应用、如下所示:
发送:
static void rfEasyLinkTxFnx(UArg arg0, UArg arg1) { // Initialize the EasyLink parameters to their default values EasyLink_Params easyLink_params; EasyLink_Params_init(&easyLink_params); if(EasyLink_init(&easyLink_params) != EasyLink_Status_Success) { System_abort("EasyLink_init failed"); } while(1) { EasyLink_TxPacket txPacket = { {0}, 0, 0, {0} }; uint8_t i; for (i = 0; i < RFEASYLINKTXPAYLOAD_LENGTH; i++) { txPacket.payload[i] = i + 1; } txPacket.len = RFEASYLINKTXPAYLOAD_LENGTH; txPacket.absTime = 0; txPacket.dstAddr[0] = 0xAA; EasyLink_Status result = EasyLink_transmit(&txPacket); if (result == EasyLink_Status_Success) { PIN_setOutputValue(pinHandle, Board_PIN_LED1,!PIN_getOutputValue(Board_PIN_LED1)); } else { PIN_setOutputValue(pinHandle, Board_PIN_LED2,!PIN_getOutputValue(Board_PIN_LED2)); } sleep(1); } }
接收:
static void rfEasyLinkRxFnx(UArg arg0, UArg arg1) { EasyLink_RxPacket rxPacket = {0}; // Initialize the EasyLink parameters to their default values EasyLink_Params easyLink_params; EasyLink_Params_init(&easyLink_params); /* * Initialize EasyLink with the settings found in easylink_config.h * Modify EASYLINK_PARAM_CONFIG in easylink_config.h to change the default * PHY */ if(EasyLink_init(&easyLink_params) != EasyLink_Status_Success) { System_abort("EasyLink_init failed"); } while(1) { rxPacket.absTime = 0; EasyLink_Status result = EasyLink_receive(&rxPacket); if (result == EasyLink_Status_Success) { /* Toggle LED2 to indicate RX */ PIN_setOutputValue(pinHandle, Board_PIN_LED2,!PIN_getOutputValue(Board_PIN_LED2)); } else { /* Toggle LED1 and LED2 to indicate error */ PIN_setOutputValue(pinHandle, Board_PIN_LED1,!PIN_getOutputValue(Board_PIN_LED1)); } } }
默认情况下、两个器件都有其正在过滤的1字节地址0xAA (仅接受地址为0xAA 的数据包)。
在 rfEasyLinkTxFnx 中、地址会写入数据包、如下所示:
txPacket.dstAddr[0] = 0xAA;
接收器将接收到该数据包、您将看到 rxPacket 中的 dstAddr 在接收数据包时设置为0xAA。
如果您在发送器侧写入其他内容、例如:
txPacket.dstAddr[0] = 0xCC;
将不会接收到该数据包。
如果希望接收器也接收此地址的数据包、可以将以下内容添加到 rfEasyLinkRxFnx
uint8_t addressTable[] = {0xAA, 0xCC}; EasyLink_enableRxAddrFilter(addressTable, 1, 2);
现在、接收器将接收地址为0xAA 和地址为0xCC 的两个数据包。
在 rxPacket 的 dstAddr 中可以看到接收到的地址
假设您想改用4字节长的地址、并希望接收器接收具有以下地址的数据包。
0xAABBCCDD 和0x11223344
需要在 RX 代码中添加以下内容:
EasyLink_setCtrl(EasyLink_Ctrl_AddSize, 4); // Addresses are 4 bytes long uint32_t addressTable[] = {0xDDCCBBAA, 0x44332211}; EasyLink_enableRxAddrFilter(addressTable, 4, 2); // 2 addresses of 4 bytes each
在 TX 端、您将执行以下操作:
EasyLink_setCtrl(EasyLink_Ctrl_AddSize, 4); txPacket.dstAddr[0] = 0xAA; txPacket.dstAddr[1] = 0xBB; txPacket.dstAddr[2] = 0xCC; txPacket.dstAddr[3] = 0xDD;
请注意字节在地址表(在 RX 中)中与它们在 txPacket 中写入顺序的交换方式。
Br
Siri