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.

Some basic questions about the SimpliciTI Stack

Other Parts Discussed in Thread: SIMPLICITI, CC2500

Hi there,

 

I am using an eZ430-RF2500 set and am trying to connect two devices (here ED1 and ED2) peer-to-peer without an AP on SimpliciTI 1.1.0. Both devices are in LPM3 first. After ED1 is waked it listens for a packet from ED2. Which is waked a bit later bursting 5 packets with a delay of 300ms between. On a receive of a packet the ED1 should answer with a response packet, which ED2 should receive.

At the moment I implemented these functions with the SMPL_Send and SMPL_Receive and the SMPL_LINKID_USER_UUD (or similar from Cascade example). ED1 first sets the CC2500 to receive with the SMPL_Ioctl function and has the callback implemented (follows later). The ED2 simply wake the CC2500 with SMPL_Ioctl and sends the packets. After that it also switches the CC2500 to receive-mode with ioctl. The Callback on ED1 is implemented similar as it checks the received packet and the sends a burst of 10 response packets. Later it switches back to LPM3.

Now the basic questions:

Is it possible to make the ED2 listen between the sends? Does the SMPL_Send switch the CC2500 back to the radio_state before or do I need to set the CC2500 to receive after every send?

As I tested the functions I implemented above I wondered if the stack makes a receive queue where on ED1 I have to make SMPL_Receive more than once (as I expect it receives 3-4 packets of ED2 in queue) to be able to verify the next packet after wakeup ( I had the situation that the callback fired without ED2 being active and got a packet with the correct values).

I also heard about the auto-acknowledge function of Simpliciti. What does the SMPL_SendOpt in that mode? Does it send the packet several times until it gets an ACK or times out? What does the SMPL_Receive or the RXCallback do on arrival? How does an ACK packet look like if I need to send it as a Callback response? Can I change my implementation so that I only need on SMPLSendOpt with autoack and everythign else does the stack? Do the functions switch the CC2500 between TX and RX when Auto-Acknowledge is activated?

Some questions about the callback. As I need to put my callback function as a parameter to SMPL_Init I read in the Documentation the the ED would try to link to an AP an go to the callback if it gets an answer. Is it doing that every time? As I don't need that without an AP. How is the callback implemented? I saw there is a SyncPinISR in the stack. Is it used for the callback? I implemented a WOR feature in my stack with an ISR configured in IOCFG2 with value 7. This asserts  when the received packet has a correct CRC. Why is the other ISR only looking for Sync? Pros? Cons?

Another thing I tried to find out in this forum is the thing about the LinkID. As I looked into the AP_as_Data_Hub example I saw a LinkID_t is used with value 0. Is that used for the whole connection or is the ID changed by reference with the SMPL_Link command? I am asking because I tried to implement the example above with a Link and LinkListen code but that did not really work. I saw that the Link worked one or two times but the packets I wanted to send an receive with the LinkID did not seem to arrive. And after 2 or 3 tries even the Linking did not work. I thought that would be a problem of the connection table so I tried to Unlink them before going to sleep. That also did not work. By the way I am using the IAR comiler and wondered in which variable or array I could look into the connection table while debugging? In another post it said that the LinkID would be a code of the device address.....really? why then using the LinkID 0 in the AP_as_Data_Hub example?

I hope you can understand the things because I am not a native speaker....

Thanks in advance

Chris