Hi all,
I try to find out wich is the maximum data Rate that the ez430 is capable of sending. I can only get 64kbit/sec. But shouldn't the cc2500 be capable of transmitting 250kbit/sec?. Or is the MCU to slow to handle that data Rate?
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.
Hi all,
I try to find out wich is the maximum data Rate that the ez430 is capable of sending. I can only get 64kbit/sec. But shouldn't the cc2500 be capable of transmitting 250kbit/sec?. Or is the MCU to slow to handle that data Rate?
Hi,
First of all. SimpliciTI was designed to support low rate networks and never optimized for high data rates. If you get 64 kbit /sec you are probably close to what can be achieved out of the box. Did a theoretical calculation once one the peak datarate with acknowledge and came to ~70-80 kbps.
Although the radio data rate is 250 kbps, you will have to take into account all the overhead such as:
- Packet Overhead (preamble, sync word, simpliciTI frame overhead)
- Radio calibration time, switch states etc
- Network overhead (code execution time, from SMPL_Send is called until actual transmission in MRFI_Transmit etc)
A few tips and tricks to increase the datarate:
- Use the entire allowed payload (believe this is around 50 bytes, check the documentation. will increase the data to overhead ratio).
- Use 500 kbps settings for the radio. This will reduce the range / performance but increase the datarate
- Set the radio to calibrate only every 4th time (see MCSM0 radio register)
- Force SimpliciTI to use MRFI_TX_TYPE_FORCED instead of MRFI_TX_TYPE_CCA for every transmit. (CCA will listen to see if channel is clear before sending, forcing will send immediately with the risk of the channel being occupied)
Regards,
Kjetil
Well..it requires some knowledge on how the CC2500 works (datasheet and design notes used) and some details of the SimpliciTI stack.
I'll try to give a rough breakdown on how i did this. Remember this was back on v.1.0.3 and was rather quick and dirty so do not trust these numbers to be 100% accurate.
I assumed a two byte acknowledge sent from receiver for this calculations.
- The radio need to spend time calibrating the frequency. This takes roughly 721 usec at 26 MHz. The receiver has already calibrated when going to Receive mode and do not need to recalibrate for the transmission of ack. The startup time was set to 88 usec.
- The radio needs to spend some time in Receive mode for it's clear channel assessment ('listen before talk') and this number was pulled from DN505 and is roughly 155 us at the default 250 kbps
- The Transmit/Receive switch time is roughly 50 usec.
- The transmitter needs to send 4 bytes of preamble and sync and the SimpliciTI header was then 14 bytes. For maximum peak rate all 64 bytes in fifo is used to the transmission is 72 bytes @ 250 kbps which equals 2,304 msec. For the receiver and the acknowledge with the two byte payload this is only 24 bytes @ 250 kbps which is 0,768 msec.
- For the receiver i measured the simpliciti processing time from receiving the message until it called MRFI_Transmit to send the acknowledge. This was measure to be 540 usec.
Adding all this together i ended up with a transmission time of 3.2 msec for the transmitter and 1,6 msec for the acknowledge. For a transmission of 50 bytes, this boils down to a ~82 kbps peak rate.
If this sounded all gibberish to you, let me know and i'll try to explain this further. Believe there is a design note in the works that has a similar calculation for the v1.1.0 release.
Regards,
Kjetil
Hi Kjetil,
I'm sorry, as a Undergraduate student, I can only roughly understand the whole calculation process. You do the calibration by using the oscilloscope or by some other means? where do you get those time values like "Transmit/Receive switch time is roughly 50 usec" ;
"For maximum peak rate all 64 bytes in fifo is used to the transmission is 72 bytes @ 250 kbps which equals 2,304 msec"; Do you get from data sheet of CC2500(I doubt this though) or you measure it? Could you tell me a little bit more how you measure it? Thank you very much!
Sincerely
Pang Bo
Hi Bo,
Added some references below. These are mostly from datasheet or other available documentation on www.ti.com.
hope this helps
------------------------
- The radio need to spend time calibrating the frequency. This takes
roughly 721 usec at 26 MHz. The receiver has already calibrated when
going to Receive mode and do not need to recalibrate for the
transmission of ack. The startup time was set to 88 usec. See table 9, table 28, in CC2500 datasheet. For more info in calibration see chapter 22.1
- The
radio needs to spend some time in Receive mode for it's clear channel
assessment ('listen before talk') and this number was pulled from DN505
and is roughly 155 us at the default 250 kbps See Design note 505 - http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=swra114b
- The Transmit/Receive switch time is roughly 50 usec. See table 28 in the CC2500 datasheet. Seems like i added some margin here, but does not really matter as it is so small. More information here: http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=swra191
-
The transmitter needs to send 4 bytes of preamble and sync and the
SimpliciTI header was then 14 bytes. For maximum peak rate all 64 bytes
in fifo is used to the transmission is 72 bytes @ 250 kbps which equals
2,304 msec. For the receiver and the acknowledge with the two byte
payload this is only 24 bytes @ 250 kbps which is 0,768 msec. This is also from the datasheet. The CC2500 FIFO is 64 bytes not including preamble and sync word (8 bytes). This gives a 72 byte RF package when sending 50 bytes of data. At the data rate of the radio (250kbps) this corresponds to 2,304 ms (72 bytes * 8 / 250 kbps)
- For
the receiver i measured the simpliciti processing time from receiving
the message until it called MRFI_Transmit to send the acknowledge. This
was measure to be 540 usec.Measured this by setting a pin high in the MSP interroupt routine and setting the same pin low in the MRFI _Transmit() function. Measured with a oscilloscope.
Adding all this together i ended up with a transmission time of 3.2 msec for the transmitter and 1,6 msec for the acknowledge. For a transmission of 50 bytes, this boils down to a ~82 kbps peak rate.
Hi Kjetil,
Can I ask you one more question? Although we can achieve around 70-80kbps theoretically as you already explained above, I designed a project which is try to send file wirelessly from one PC to another. However, I cannot achieve smooth transmission when the baud rate larger or equal to 9600kbps. There're always some random characters missing and the only way to get a 100% accurate transmission is to set chracter delay in hyperterminal. However, if I set some characters delay in the hyperterminal, the actual transmission rate is no longer what I was intended. For example, I set the baud rate to be 19200 and had to add 50 ms character delay in the hyperterminal in order to get a 100% file transfer accuracy which means the actual transmission rate is not 19200bps but some slower rate.
The theoretical calculation implies me that I can get ultimate 19200 bps with 100% accuracy which I can not in practice. Can you help me explain this? Thank you very much!!
Sincerely
Pang Bo
Hi.
If i remember correctly the eZ430-RF2500 is fixed at 9600bps only for the serial transmission.
Btw, did you notice the new design note on a UART driver for SimpliciTI:
http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=swra306
Regards,
Kjetil
Hi Kjetil,
The transmission rate is fixed at 9600bps only when you use the USB interface. I skip this by using a max232 converter to get higher baud rate I want. Actually, even in 9600bps, I still have to set the character delay in hyperterminal to avoid the random data missing. Can you explain to me more of this? Thank you very much!
Sincerely
Pang Bo
Hi.
Am a little clueless here I'm afraid. Do you buffer up characters or just transmit them one by one asap?
Have you had a look at the example posted above for hints? Seems like they manage this somehow.
Regards,
Kjetil
Hi Kjetil,
Right now I'm thinking of maybe it's because the format of te file I'm transmitting. Can you tell me whether simpliciTI protocol will take care of Non-ASCII code or not. I mean can I use simpliciTI wireless protocol to transmit PDF or Word format file? Thank you very much!
Sincerely
Pang Bo
Hi.
SimpliciTI does not care what data it sends. It will send what ever bytes you are telling it to send. If the UART handles the files you are trying to transmit and that the code slizes this up in packages, then SimpliciTI will do the rest.
Kjetil
Hi Kjetil,
I believe I have same problem with another person and here is her post:
Hi all,
Has anybody tried to use simpliciTI to realize PDF or Word file transfer? I have two eZ430-RF2500 boards with CC2500 on board. Each eZ430 board is connected to a PC respectively via the com port (by using a MAX232 circuit) . I have set up a peer to peer application network. What I am tring to do is to transfer a PDF or a Word file from one side to another using simpliciTI. However, when I try to do this on hyperterminal “send file” option (not "send text file" option). By using Xmodem protocol, I can only manage to transfer 128bytes (repeating first 128bytes of the file) for both PDF and txt and 256 bytes for Word. Anyone can give me some suggestions on how to improve? Is it possible to get large size file transfered? Or anyone can suggest another software to transfer files? I tried tera term and got similar situation. Any help is much appreciated!!!
Regards
snowy beauty
Can you help us? Thank you very much!
Sincerely
Pang Bo
When I increased the payload size to 50 bytes, I'm noticing the sending device has trouble sending the frames. In other words, sometimes it works, sometimes it doesn't. More often it fails.
Is there a suggested wait time between sending frames?
My application is relatively simple. One device, connected to the computer via USB, sends data received from hyperterminal to another peer. The peer then echos back what was transmitted.
Thank you.
I suppose, the maximum usefull datarate of CC2500 is really around 500 kbit/s. To get it, you should write your own program for serial non stop transmitting using radio serial input without using FIFO (simpliciTI cant do it) - check CC2500 datasheet, PKTCTRL0 register. After that you can use microcontroller to give the data you want to transmit serially on necessary radio input pin. So, in that way, you can get something like "serial wireless" interface. I have tested it some time ago - it works. Although, due to lack of synchronization between TX and RX after some time you will start to have really many errors.
Hello,
I hab bought an Ez430-Rf2500 and I want to change the data rate on the siplicity TI protocol. Where I can found this part in the Simplici Ti code ? How I can do it ?
Thanks
Pierric
Yes, Kjetil's post was extremely helpful.
Any thoughts on reducing latency without regard to throughput? For a small packet I'm at about 2.2ms latency from the send to the receive at 250kbps (processor is at 20MHz). You mentioned that there is 540us of receive processing time which would account for 1/4 of the time. Just checking if there are any other tricks for shaving off time.