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 monitored the communication between eZ430-Chronos and Control Center Software (CC) and found some information about the protocol.
Firstly CC opens the port corresponding to "TI CC1111 Low-Power RF to USB CDC Serial Port" using the settings 115200,1,N,8. I think CC firstly search for COM ports matching some criteria and opens it.
After that it continuously send ping requests in the background even when he reads any acc data in order to know that AP is working and not disconnected.
When you push the button "Start Access Point" it sends a request to let AP know that. After that it begins polling the AP for valid acc data.
While we are waiting for TI to release some documentation or source code it may be useful for impatient guys.
Packet format:
PC-to-Ap: 2 byte command + 1 byte packet length + n byte packet load
AP-to-PC: 2 byte command + 1 byte packet length + n byte packet load
Some commands:
Background polling
----------------------------------------------------------------------
PC to AP : ff 20 07 00 00 00 00
Response : ff 06 07 xx xx xx xx
xx xx xx xx: 4 byte watch address
Start Access Point:
----------------------------------------------------------------------
PC to AP : ff 07 03
Response: ff 06 03
Command before each Request Acc. data (functionality not known):
----------------------------------------------------------------------
PC to AP: ff 00 04 00
Response : ff 06 04 03
It may be returning the state of the watch or AP
Request Acc. data:
----------------------------------------------------------------------
PC to AP: ff 08 07 00 00 00 00
Response: ff 06 07 tt xx yy zz
tt: data type (ff: no data, 01: valid acc data)
xx, yy, zz : acc data
Acc Reading sequence:
1. Open the port using the settings 115200,1,N,8.
2. Send background ping requests (Optional)
packet : ff 20 07 00 00 00 00
3. Send "Start Access Point" command
packet: ff 07 03
4. Send the acc data request command
packet : ff 08 07 00 00 00 00
5. if you want to get new acc data go to step 4
I found another command:
Stop Access Point
----------------------------------------------------------------------
PC to AP : ff 09 03
I found it after I wrote my code though. Oh well.
Actually, before the turn off access point can be issued, the same "command" that turns the access point on:
ff 07 03
must be issued.
So to turn the access point off you would send:
ff 07 03 ff 09 03
to the access point from the PC.
Hi Guys,
Thank you so much for the information. I'm trying to communicate with the watch following your communication protocol to read ACC data but no result. I wrote a toy Matlab code but no way, maybe it's because the tx rate 115200 is so high..
This is the code, any help will be very welcome..
clear all, clc
pingrequest_CMD = 'ff200700000000';
startAP_CMD = 'ff0703';
getACCdata_CMD = 'ff080700000000';
stopAP_CMD = 'ff0703ff0903';
n_samples = 5000;
data =zeros(n_samples,3);
instrfind
s = serial('COM16','BaudRate',115200,'DataBits',8);
fopen(s);
fwrite(s, pingrequest_CMD);
pause(0.2);
fwrite(s, startAP_CMD);
pause(0.2);
fwrite(s, getACCdata_CMD);
try
for i=1:n_samples
frame = fread(s,8);
if frame(4) == 01
data(i,1)=frame(3); %Acc_x
data(i,2)=frame(2); %Acc_y
data(i,3)=frame(1); %Acc_z
else
error('Parsing frame');
end
end
catch
fclose(s);
delete(s);
rethrow(lasterror);
end
fwrite(s, stopAP_CMD);
fclose(s);
Thanks in advance,
Jesus Mora
Hi, do you get any response from the serial port at all, for example a valid response from the 'access point' command?
Andy
Hi Andy,
No men, I don't receive anything, the timeout expires always before at all. For sure I'm not doing the things well....
I would like TI publish at least the communication protocol.
Thanks in advance,
Jesus Mora
Hi Jesus,
I'm not very familiar with MATLAB, but it seems like you aren't sending the data to the serial port as a bytestring. If you can somehow convert the data into a bytestring your code will (probably) work.
Thanks,
Sean
Hi uguryildiz,
That was nice post I managed to get the data bytes for three axes. Thank you.
But I still wonder -the data I get is byte data max FF whereas the data displayed by control center is +/-1000. Perhaps it is G*100 representation. How do I get to convert the data to G values - any ideas?
Hi Ganesh,
I was just wondering, the data you're capturing is actually the acceleration data or the tilt data? Please let me know.
Thanks!
Venkatesh.
Good question - I am right now only capturing the tilt values.
If these values are FF at max already then how to obtain acceleration data. Usually there are extrapolation methods using the calibration values which gives the G values. I wish TI gives away the codes to read the data from watch.
Has anybody tried codes to obtain other data from the watch such as the altitude and time? The data center is still a mystery, probably the code for data center shoud've been included for practical applications.
Regards
Ganesh,
One other thing, I believe you have a code for capturing Telt data...So, at this point, the program imports data into CSV file automatically when we start running it..Is it also possible to import that data into XML file along with CSV file at the same time? If so how can we do it?
Also, I am just wondering how can we Sync'd each chronos to the CC1111 receivers..Can you please explain the process?
Thank you so much for all your help Ganesh!
Luke.
Venkatesh/Luke,
When you are connecting more that one Chronos, you need to take care of sequence of starting which might be important especially if you are dealing with tilt.
Let us say you have two chronos A & B are connected to convey data from Joe and Harry respectively. If you start access point on A and then Harry turns on his chronos you have Harry's data on A which is mis-match. You need to take care that way.
Ganesh
Luke,
I am capturing data on screen only, I am not writing it to any file as of now.
But I wonder why would you want both CSV as well as XML file simultaneously? Of course you could write the data into both csv and xml. I do not know what is your interface program to go any further. But perhaps you can have two streams of data to both the files and write in the respective formats and close the streams on exit.
Synchronization is to turn on access point and chronos one after the other matching so that we know we the source of data is what we believe it to be - as in the earlier post. You turn on AP for A then Joe then AP for B then Harry.
I hope this is useful.
Ganesh
Hi Ganesh,
I am also trying to extract ACC data from the USB Access point without using the TI CC application. I opened a serial connection, but the read to the Access point fails(in fact it times out). Can you tell me the setting you used for the serial connection.
Regards
Jerry
Hi Jesus,
I was able to get the accel readings using ur code with slight modification. here is the code.
function read_acc(port)
pingrequest_CMD = 'ff200700000000';
int_arr = [255 32 7 0 0 0 0];
ping_CMD = char(int_arr);
startAP_CMD = 'ff0703';
int_arr = [255 7 3];
start_CMD = char(int_arr);
checkAP_CMD = 'ff000400';
int_arr = [255 0 4 0];
check_CMD = char(int_arr);
getACCdata_CMD = 'ff080700000000';
int_arr = [255 8 7 0 0 0 0];
get_CMD = char(int_arr);
stopAP_CMD = 'ff0703ff0903';
%int_arr = [255 7 3 255 9 3];
int_arr = [255 9 3];
stop_CMD = char(int_arr);
s = serial(port, 'BaudRate',115200,'DataBits',8, 'StopBits', 1);
try
fopen(s);
fwrite(s,start_CMD);
frame = fread(s,3, 'uchar');
disp(frame);
for i=1:5000
fwrite(s, check_CMD);
frame = fread(s,4,'uchar');
fwrite(s, get_CMD);
frame = fread(s,7,'uchar');
if frame(4) == 1
D = sprintf('%i %i %i \n', frame(5), frame(6), frame(7));
disp(D);
else
%disp('No data');
end
end
disp('Stopping AP');
fwrite(s, stop_CMD);
disp(frame);
fclose(s);
delete(s);
clear s;
catch
fclose(s);
delete(s);
clear s;
rethrow(lasterror);
end
end
The stop command is not yet working properly.
Here is the serial port trace when CC Application is issuing stop command to AP.
[19/02/2010 15:02:45]
11469 IRP_MJ_WRITE - Request transfers data from a client to a COM port
STATUS_SUCCESS
ff 31 16 07 00 00 00 00 00 00 00 00 00 00 00 00 ÿ1..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
----------------------------------------------------------------------------------
[19/02/2010 15:02:45]
11471 IRP_MJ_READ - Transfers data from a COM port to a client
STATUS_SUCCESS
ff 06 16 ÿ..
----------------------------------------------------------------------------------
[19/02/2010 15:02:45]
11473 IRP_MJ_DEVICE_CONTROL - Request operates a serial port
STATUS_SUCCESS
IOCTL_SERIAL_PURGE - Request cancels the specified requests and deletes data from the specified buffers
Flags - 15
----------------------------------------------------------------------------------
[19/02/2010 15:02:45]
11475 IRP_MJ_WRITE - Request transfers data from a client to a COM port
STATUS_SUCCESS
ff 09 03 ÿ..
----------------------------------------------------------------------------------
[19/02/2010 15:02:45]
11477 IRP_MJ_READ - Transfers data from a COM port to a client
STATUS_SUCCESS
ff 06 03 ÿ..
----------------------------------------------------------------------------------
[19/02/2010 15:02:46]
Also as Ganesh mentioned, the x,y,z acceleration readings got prom AP are one byte values. But the TI CC App gives 2 byte readings. There might be some conversions involved.
Regards
Jerry Mannil
Ganesh,
I connected two Access Points to one computer and tried to get Tilt data from two Chronos, but I wasn't able to do that..I could only get from one Chronos, I'm actually using Python program to get the Tilt, Please Ganesh can you help me with you Bro?
Thanks,
Venk
Hi Venk,
If you have connected the two access points you would get two ports for accessing the data from two chronos. You need to open both the ports and then you can read data from both chronos. The algorithm should be like:
Open port P1
Open port P2
Start AP1
Turn on Chronos1
Start AP2
Turn on Chronos2
.
.
.
Stop AP1
Stop Ap2
Close Port1
Close Port2
.
.
.
Timer/Event Procedure
Read data from P1
Read data from P2
Process P1 & P2 data such as display or write to file
End Procedure
I am scheduled on a project with two chronos but for now, I am on my first phase where I am focusing on the application software with one Chronos.
Warm regards,
Ganesh N
Hi Jerry,
The port setting is as follows:
Data Bits = 8
Stop Bits = 1
Baud Rate = 115200
Read Timeout = 3000 //3 Seconds
Write Timeout = 3000
Check your timeout setting if it is about 1sec it is bound to timeout mostly. For my project this setting suits well.
Warm regards,
Ganesh N
Hi All,
Firstly, thanks for putting together the list of commands.
Like most of the guys in this thread, I am trying to read the acceleration data from the watch into my program.
My problem is that I am not seeing the exact byte responses you guys mention. What I am getting from the AP is an echo. Every command I issue is being echoed back.
I have tried various baud rates. As soon as I switch to the CC app, I can see the graph on the CC window. So I know the problem is most likely in my program.
Am I missing a setting or something?
Thanks in advance
Has anyone tested the above Stop Access Point command? I can start the access point, but I can't stop it.
Marty
Yep. Me, and lots of other people have written code that uses the stop access point command. Check out some of the code listed here:
There's examples using it in Python, Ruby, and Processing. What language are you using?
My mistake. I assumed the access point was not stopped but I was looking at the watch rather than the USB doggle. The code works fine. I coding in C++ but I have been using your python code as an example.
Thanks for your assistance,
Marty
Guys,
the new Chronos content update with the AP firmware source code and updated documentation might be able to help you with your development.
Regards,
Dung
hi guys
i know i sound stupid out here...but can some one pls tell me where u learnt how to send commands to the rf access point and pls tell me how it is done.i. have absolutely no clue... it would be very helpful if u cud give me tat info asap..
thanx
kaushik
Hi Kaushik,
Good question - you might be aware of the technique of reverse engineering, the practical stuff we do to solve problems.
In this case thanks to uguryildiz whose work was useful to be carried forward. You could learn the same with port scanning, lot of patience and time.
Warm regards,
Ganesh N
hi ganesh
thanx for de reply. actually i am doin a project now. its only for a month and i dont have that much time to sit and research all stuff. i need to create a GUI which can send commands through the AP and receive certain data from the watch and do some calculations on the PC side. I am using JAva to do this. But the prob is i am not very well versed in JAVA or any language which can help me create a GUI . i know a MATLAB properly and know to make GUIs in it. but i feel matlab is too slow to draw real time graphs . is it possible to do it in matlab itself ?? pls advice me how i cud proceed.
regards
kaushik
Kaushik,
Given the situation a. You are doing a short term project & b. You are only well verse with MATLAB, I don't see you reaching your goal.
JAVA is no big deal, for that matter if you can lay your hands on Microsoft .NET technologies they are very intuitive. I am sure you can do it this way rather than living with a mental block. Unfortunately, I can't guide you with MATLAB.
Regards,
Ganesh N
Hey ganesh,
its cool i got it runnin on java.. there was a minor mistake in de code . prob coz i didnt know java well.. anyway cleared it. shud not be a prob now i hope. :)
kaushik
Thank you everyone for your information on the above. I was wondering if anyone has gotten two chronos connected to one access point or two chronos connected to one chronos (2 slaves to a master). I just started playing with these and looking for any help I can get. Thanks again.
I don't think 8 bits are enough for the acceleration data. When I use Chronos Control Center interface I see data large than 255 and there are negative values out there. So I think each axis should have more bits for its value.
Hello Guys,
I have got this watch very recently and I am still in the initial stages. Could someone help me write a code in C to capture the x,y,z co-ordinates onto an xml file or a data file? It would be of great help if anyone can guide me through the process.
Thanks a lot.
Regards,
Srikanth Sistla.
Hi Jesus,
in MATLAB, to load AP i've done this
% startAP_CMD = 'ff0703'; replaced by startAP_CMD = [255 7 3];
s=serial (...) % same as you have done
startAP_CMD = [255 7 3];
fprintf(s,'%s',native2unicode( startAP_CMD )) % the use of " format" "%s" is to supress the use of terminator
and works fine.
i have some troubles to get off the AP using "ff 09 03"(while, the "solution" is close the serial connection, and open TI program to be sure the connection will be closed when close this).
that's all.
regards
Hello all!
I recently got my Chronos ez430, and I have been able to play with the programming in the swatch, but I´m struggling quite a bit with the PC-Chronos Communication. I would like to use Visual Studio, whatever language is fine. I thought this was going to be like a regular serial port, but I guess its not that easy to use the AP...
Im lost in this matter, can anyone help me please?
Thanks,
Ángel Hernández
I have tried to show a 3D box in Processing that rotate when you tilt the watch:
http://www.metacafe.com/watch/7035380/ez430_chronos_processing_and_tilt_measurement_error/
I get the 3 maximum and minimum values and convert them to -1.0 and 1.0 interval. Then with the atan2 function I convert it to rotations for X (pitch) and Z (roll) axys:
float x, y, z;
x = map(buffer[4], -53, 47, 1, -1);
z = map(buffer[5], -60, 43, -1, 1);
y = map(buffer[6], -65, 31, -1, 1);
valorX = atan2(x,y);
valorZ = atan2(z,y);
However as you can see in video, when I invert the watch the 3D box moves wrong. What is the formula to calculate 360º rotations with the three values (x,y and z) retrieved from accelerometer?
hi, here if im sending the data as "ff 07 03"., the same command is echoed back to me.
im not able to connect it via hyperterminal.
please help me in getting the accelerometer values via hyperterminal.
Hello,
First of all I would like to thank you for your contributions in this thread, because it was very helpful.
Unfortunately, I still have a problem when I want to read my AP (my Chronos is working with the Data Logger).
Example: I send "FF 07 03" (which also works) to start the AP and now want to read if this statement was successfully arrived.
The only thing witch I get back is a timeout, although my serialsniffer (Portmon) protocolls, that the string "FF 06 03" was read (see picture).
Here is my c++-code (for my QT-Programm wich using qextserialport):
#include <QtCore>
#include <QCoreApplication>
#include <qextserialport.h>
int main(int argc, char *argv[]){
char data[3];
QString message("\xFF\x07\x03");
QString message1("\xFF\x09\x03");
QextSerialPort *mySerial = new QextSerialPort("COM6");
mySerial->setBaudRate(BAUD115200);
mySerial->setTimeout(500);
//Open serial port and start AP
bool start = mySerial->open(QextSerialPort::ReadWrite);
int total = mySerial->write(message.toAscii(),message.length());
//Read if AP has started
int i = mySerial->read(data, 3);
//Stop AP and close serial port
total = mySerial->write(message1.toAscii(),message1.length());
mySerial->close();
return 1;
}
Regards and thank you for reading,
Matthias
Hi h2ogeezr and everyone!
Please. Somebody knows if you want to connect two chronos in the same PC... Could you use only one cc1111 rf access point?? Because I think it isn´t possible to connect two cc1111 because the two devices have the same VID, PID, etc, and whe you connect the second, the first disconnect.
If it´s possible to control two chronos with one cc1111, how can I make it work?
Thank You soo much!
Hi, do you know the command to send a packet? I would like to send a simple packet from the AP to the ED?
Thanks!
Hi Patrick,
there is no generic command to send messages.
You could use the Sync Mode to exchange messages.
You send a message from the AP to the ED with the command FF || 0x31|| Length(1 Byte, Length of Data + Overhead(3 Bytes) ) || Data
You have make sure that AP + ED are in Sync Mode before you send messages.
The dll project for tcl in the eZ430-Chronos\Control Center\GUI Sources\DLL folder is a good reference. The bm_api.h header has all possible commands.
Hi Martin ,
Am using the EZ430-chronos watch for a project , and i want to apply movements on an object according to the accelerometer reading , so could you please tell me what kind of library or code you used to read the accelerometer ?! am using C++
Thank you so much :)
jolie john said:Hi Martin ,
Am using the EZ430-chronos watch for a project , and i want to apply movements on an object according to the accelerometer reading , so could you please tell me what kind of library or code you used to read the accelerometer ?! am using C++
Thank you so much :)
Hi jolie
you can check for eZ430_Chronos_Net.dll available at http://sourceforge.net/projects/ez430chronosnet/files/
Al Very nice...
Now how about using the chronos to display tekst from the host computer.
I know possibility is limited because of the display but how about numbers>
I would like to display the status of my house alarm...every door in the house has an unique system.
When there is an alarm i would like the chronos to show me which door tripped the alarm.
so long story short, I would like to send data to the chronos and proccess it inside the chronos.
Any idee?
**Attention** This is a public forum