CC1310 广播
CC1310 广播地址是啥了?00 ?ff?
您是指这个吗?
dstAddr.addr.shortAddr = 0xffff?
广播发的目的地址是啥?
无线信号在空间本身就是广播扩散的。
你说的广播应该是指特定协议里,接收到无线信号的设备根据目的地址来判断是否处理该数据包吧。
这取决于你使用的通信协议了。
这个还和你们系统程序地址过滤有关,你们是怎么过滤的,那个地址过滤程序太繁杂,你给简单告我一下它的过滤基本思想
你是指使能.pktConf.bChkAddress功能吗?
EasyLink_enableRxAddrFilter()这个函数
首先,你可以参看下面说明,了解EasyLink_enableRxAddrFilter()函数的说明。
http://dev.ti.com/tirex/#/?link=Software%2FSimpleLink%20CC13x0%20SDK%2FDocuments%2FProprietary%20RF%20User's%20Guide&collapsetree=
其次,你可以在C:\TI\simplelink_cc13x0_sdk_1_50_00_08\examples\rtos\CC1310_LAUNCHXL\easylink\rfEasyLinkRx\easylink目录下,查看EasyLink.c文件,里面有EasyLink_enableRxAddrFilter()函数的具体实现。
EasyLink_Status EasyLink_enableRxAddrFilter(uint8_t* pui8AddrFilterTable, uint8_t ui8AddrSize, uint8_t ui8NumAddrs)
{
EasyLink_Status status = EasyLink_Status_Param_Error;
if ( (!configured) || suspended)
{
return EasyLink_Status_Config_Error;
}
if ( Semaphore_pend(busyMutex, 0) == FALSE )
{
return EasyLink_Status_Busy_Error;
}
if ( (pui8AddrFilterTable != NULL) &&
(ui8AddrSize != 0) && (ui8NumAddrs != 0) &&
(ui8AddrSize == addrSize) &&
(ui8NumAddrs <= EASYLINK_MAX_ADDR_FILTERS) )
{
memcpy(addrFilterTable, pui8AddrFilterTable, EASYLINK_MAX_ADDR_SIZE * EASYLINK_MAX_ADDR_FILTERS);
EasyLink_cmdPropRxAdv.addrConf.addrSize = ui8AddrSize;
EasyLink_cmdPropRxAdv.addrConf.numAddr = ui8NumAddrs;
EasyLink_cmdPropRxAdv.pktConf.filterOp = 0;
status = EasyLink_Status_Success;
}
else if (pui8AddrFilterTable == NULL)
{
//disable filter
EasyLink_cmdPropRxAdv.pktConf.filterOp = 1;
status = EasyLink_Status_Success;
}
//Release the busyMutex
Semaphore_post(busyMutex);
return status;
}
可以看到EasyLink_enableRxAddrFilter()使用了Advanced Receive Command, CMD_PROP_RX_ADV命令中的addrConf配置。
可以阅读TRM文档中的
Table 23-137. CMD_PROP_RX_ADV and CMD_PROP_RX_ADV_SNIFF Command Structure
和
23.7.5.4.2 Advanced Receive Command, CMD_PROP_RX_ADV
简单来说,如果使能了address filter功能,你需要把你希望节点接收的数据包中的目的节点地址设置到pAddr指向的列表中。
The received address is compared to an address list pointed to by pAddr. The address to compare against this list is as received.
这有地址匹配了,才会接收。
我个人的理解是,这里没有强制规定广播地址是什么,你可以自己指定一个地址为广播地址,比如0xFF,然后,在每个节点的pAddr中,都把0xFF地址添加进去,这样,这样,每个节点都会将数据包中目的地址为0xFF的数据包判定为是发给自己的数据包而进行接收。
当然,不要忘记把该节点自己的地址也添加到pAddr地址列表中。
比如,在rfWsnConcentrator示例工程中,就是通过
/* Set concentrator address */;
concentratorAddress = RADIO_CONCENTRATOR_ADDRESS;
EasyLink_enableRxAddrFilter(&concentratorAddress, 1, 1);
将RADIO_CONCENTRATOR_ADDRESS放入Concentrator的Paddr列表中,这样,Concentrator只会接收目的地址是RADIO_CONCENTRATOR_ADDRESS的数据包。