Hi,TI工程师,
想在cc1310上实现组网,节点30个左右差不多。有解决方案吗?
Susan Yang:
您可以尝试 Contiki 6LowPAN ,是支持 CC13xx的。也有私有组网 ,在CCS下集成了Wireless Sensor Network组网例程,一对多 http://www.ti.com/tool/cc13xx-sw
Eggsy Pang:
你好,
目前还没有任何联盟为sub1g定义协议,你可以在上面自由的定义自己协议进行组网,比较灵活,可以基于虚拟地址或物理地址,路由等方式组网。我曾经模仿蓝牙的调频协议在CC1310里组网,是完成没问题的。若保存节点信息的话,30个肯定没问题的,若不保存节点信息,自由刷新,多少个都没问题。
建议参考我们的SDK提供的基于EASYLINK的例程 : (concentrator 和node)这两个程序。
k999:
回复 Eggsy Pang:
(concentrator 和node)这两个例程没有解决冲突的问题。这个冲突又如何解决的??
Albin Zhang:
K三9,
来来,用TI的TI15.4stack.
http://www.ti.com/tool/TI-15.4-STACK
或者像2楼推荐的contiki 6lowpan均可。
BR. AZ
k999:
回复 Albin Zhang:
Designed for 915MHz FCC / 863MHz ETS 只支持这两个频率吗??
Albin Zhang:
回复 k999:
明年初就支持china band了。不远了。
BR. AZ
k999:
回复 Eggsy Pang:
hi Eggsy Pang:
可以将你的这个例程发出学系学习吗?
Eggsy Pang:
回复 k999:
Hi K999,
不好意思,这几天都在忙,那么晚回复实在抱歉。
由于协议这方面跟客户信息有关,不方便把这个文件给到您。我可以给你跟您看一下怎么实现防止冲突,主要是在下面一个EasyLink_transmit发送函数里面实现:
EasyLink_Status EasyLink_transmit(EasyLink_TxPacket *txPacket){ EasyLink_Status status = EasyLink_Status_Tx_Error;
if ( (!configured) || suspended) { return EasyLink_Status_Config_Error; } //Check and take the busyMutex if (Semaphore_pend(busyMutex, 0) == FALSE) { return EasyLink_Status_Busy_Error; } if (txPacket->len > EASYLINK_MAX_DATA_LENGTH) { return EasyLink_Status_Param_Error; }
//store application callback memcpy(txBuffer, txPacket->dstAddr, addrSize); memcpy(txBuffer + addrSize, txPacket->payload, txPacket->len);
//packet length to Tx includes address EasyLink_cmdPropTx.pktLen = txPacket->len + addrSize; EasyLink_cmdPropTx.pPkt = txBuffer;
if (txPacket->absTime != 0) { RF_cmdNop.startTrigger.triggerType = TRIG_ABSTIME; RF_cmdNop.startTrigger.pastTrig = 1; RF_cmdNop.startTime = txPacket->absTime; } else { RF_cmdNop.startTrigger.triggerType = TRIG_NOW; RF_cmdNop.startTrigger.pastTrig = 1; RF_cmdNop.startTime = 0; }
/* Set up the next pointers for the command chain */ RF_cmdNop.pNextOp = (rfc_radioOp_t*)&RF_cmdPropCs; RF_cmdPropCs.pNextOp = (rfc_radioOp_t*)&RF_cmdCountBranch; RF_cmdCountBranch.pNextOp = (rfc_radioOp_t*)&EasyLink_cmdPropTx; RF_cmdCountBranch.pNextOpIfOk = (rfc_radioOp_t*)&RF_cmdPropCs;
/* Customize the API commands with application specific defines */ RF_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM; RF_cmdPropCs.csEndTime = (IDLE_TIME_US + 150) * 4; /* Add some margin */ RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
// asyncCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropTx, // RF_PriorityNormal, txDoneCallback, EASYLINK_RF_EVENT_MASK); RF_runCmd(rfHandle, (RF_Op*)&RF_cmdNop, RF_PriorityNormal, &Wcallback, 0);
status = EasyLink_Status_Success; RF_cmdNop.status = IDLE; RF_cmdPropCs.status = IDLE; RF_cmdCountBranch.status = IDLE; RF_cmdPropTx.status = IDLE; RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
//Release the busyMutex Semaphore_post(busyMutex);
return status;}
k999:
回复 Eggsy Pang:
thanks Eggsy Pang,我试试。