Posts: 2
Registered: ‎09-06-2017

EFR32MG Send 802.15.4 packets back to back.



We have developed a new radiomodule here at SAAB Training & Simulation...

A customers things was using Zigbee and our things had to comunicate with their things but our own old radiomodule did only support raw 802.15.4 comunication, no place for a Zigbee-stack. So we designed a new radiomodule with EFR32MG1P to be able to comunicate over Zigbee and that works great. Now we will replace our old radiomodule with this new one.

My job now is to implement our old comunication protocol in the module, We have thousands of products at customers using this protocol & our new products must use it as well.

I did the software for the old module long time ago, but I did not design the protocol. 

The old 2.4GHz 802.15.4 based protocol is using a "preamble sequence" to wake up low power devices who are using listening cycles to save power. The preamble sequence consists of 802.15.4 packets with only one byte payload sent back to back. We use 3 "modes" with 0, 5 or 19 preamble packets. The old module used a Atmega AVR231 radiochip. With that one you can load a message once and send it many times, perfect for the preamble sequence. It was also possible to load the final datapacket at the same time as the last preamble packet was being sent & then send it back to back. I trigged new transmission directly from packet-sent-interupt.


Now I am trying to do the same with EFR32MG1.

I am using the RAIL-lib with 802.15.4 functionality & I can send & recieve single packets.

I can recieve messages using the preamble sequence sent from our old module.

When I try to generate the preamble sequence with EFR32MG1 I cant get that short time between packets as I could with the old module.

I tried to call RAIL_TxStart(.. multiple times without call to RAIL_TxDataLoad(.. to see if I could resend last loaded packet but no packet was sent.

I also tried to load and start send next packet from within the RAILCb_TxPacketSent(.. Callback but then no packet was sent either.

With the old module I could send 19 preamblepackets in 12.6ms.

With EFR32MG1 It takes 17,6ms.


Is it tecnicaly possible to add support for sending packets like this in future RAIL-lib?

Im thinking of double buffering & sending same packet multiple times.

Maybe it will work by sending fewer packets in the preamble sequence but I would prefer to be able to replicate the old protocol & and timing.

If I can't maybe my project leaders will make a new radio-module based on another chip.

I realy like EFR32MG and want to stick with that.

We also have a Si4468 chip on the module to be able to talk to even older products, old protocol & modulation designed 20 year ago, my next job...


Timing measured with RAIL_GetTime(void)

delta time [uS]

[0] 22         dTime to load & start send first preamble packet. packet length 15.
[1] 740       dTime to packet sent interrupt.
[2] 38         dTime to start load & start send. This could be optimized in my code!!!!
[3] 22         dTime to load & start send next preamble packet.
[4] 860       dTime to packet sent interrupt.
[5] 40         dTime to start load & start send. This could be optimized in my code!!!!
[6] 22        dTime to load & start send next preamble packet.
[7] 860       dTime to packet sent interrupt.



Regards/ Peter