微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1310 广播

CC1310 广播

时间:12-23 整理:3721RD 点击:

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的数据包。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top