Tool/software: TI-RTOS
Hi all. After three days fighting to allow a CC2652 joining to a 802.15.4 network coordinated by a Digi Xbee S1 Pro 802.15.4 module, I surrender. I would like to share my tests and configurations in order to help other people that tried a similar approach, maybe they were more lucky.
First, I took as base the 802.15.4 sensor example that comes with the SDK (2.30.00.34, the latest version supported by my launchpad). In the config.h I modify:
-
CONFIG_SECURE = false to disable encryption
-
CONFIG_PAN_ID = 0x0001 to match with the PAN ID of the coordinator
-
CONFIG_CHANNEL_MASK to match with the channels in witch the coordinator tries to create a network. I've tested several values here, but in order to generalize, the value 0xF0 in the second byte (channels 12 to 15) and 0xFF in the third byte (channels 16 to 23) covers all the range of a Xbee S1 Pro 802.15.4 (it doesn't operate on channels 11 and 24-26).
On the Xbee S1 Pro side, with Coordinator firmware, the configuration is this (just relevant parameters documented):
- Coordinator association (A2) mask set to 0x6, indicating that the coordinator will establish the network in the best of the enabled channels (read on) and that the coordinator allow association of end nodes
- Coordinator enable (CE) set to 1 : Module working as coordinator
- Encryption enable (EE) set to 0: Encryption disabled
- Mac Mode (MM) set to 2: Module working on legacy 802.15.4 with ACKs enabled
- Network address (MY) set to 0: The coordinator address will be the address 0
- PAN identifier (ID) set to 0x0001
- Scan channels (SC) set to 0x200, meaning that the coordinator will try to establish the network only on channel 20. Several combinations have been tested here in order to allow more channels, though, but this channel seems to be free since the coordinator tends to select it.
Behavior of the modules has been different, depending on I don't know what:
- The first time I tried, the CC6252 joined the network, after a while it left and then it never joined again. That means that, in the terminal, the module shows "State changed: 1" (joining, i guess) and it does nothing.
- When arriving to the previous state, the module never joins to the network. It is necessary loading other programs (examples as the PWM led or the 802.15.4 collector) and then after re-loading the sensor program, the module joins some times (showing the proper messages in the console, reacting properly when the coordinator is powered of... everything normal). But then again, when the module starts to fail joining, it enters in a state of not joining that only can be stopped by reloading other programs (and that approach not always works, to be sincere)
- Best results were achieved when I limited the module to only work on channel 20, doing the same on the coordinator. In that state, the module worked perfectly during 24 hours, allowing me to receive the periodic reads from the coordinator side.
- Last tries has been quite dissapoining though: The module says that it is joined but the coordinator does not receive data, neither incrementing the Rx counters nor showing radio signal activity in the channel... something as if the module was saying that it is sending data but it is really not doing it. I've checked that the module tries to send that data to the destination node 0, that is the address of the coordinator
So, as you can see, many tests with disappointing results. The most disgusting is when the module becomes unable to join. Is it possible that some information regarding the last connection was stored on flash and that was the cause of entering on that state?
I hope that this information was useful for people trying to follow my approach, or even if somebody has any suggestion about how to proceed it will be really welcome.