Thursday, December 3, 2009

Still alive and working hard

Hi,

despite not writing anything in here, I have been working on a new version of the dongle and on many other things.

First, I'm now in hardware design: look at the new signal samplers, my personal joy and pride :)

Fig.1: Primo USB dongles: very flexible GNSS data samplers.

These have the same functionality of the old CPLD version, but are more slick and robust. Eheh!

Second, I'm playing with a new platform:

Fig.2: The Gumstix Overo Earth runs our software GNSS receiver.

Above is one of our dongles connected to a Gumstix OVERO earth carrier board. Not only the OMAP3503 can reliably record the raw GNSS stream, but it is also capable of processing 16 GPS -or Galileo BOC(1,1)- channels in real-time, continuously!
To do that, quite some assembly code had to be written (especially for the FFTs!). The NEON core within the Cortex-A8 is a wonderful machine, and the learning curve with gcc is very acceptable. I won't give more details of how we did it, just want to share -again- my joy and pride :)

To finish, this time I HAVE TO thank all my colleagues-friends working hard with me at NSL, and the opensource community of the Beagleboard and the BeagleSDR project.

Cheers!
Mic

P.S.: Next post is coming soooon...

39 comments:

Ash Charles said...

Hi Michele,
I'm an intern at Gumstix and I thought your post was pretty cool. I posted a link to it on the Gumstix user wiki (http://www.gumstix.net/wiki/index.php?title=Category:Projects_-_monitoring_and_control) so other users can see different applications of the technology. I hope this is okay with you.

-- Ash

Michele Bavaro said...

Ash,

no problem with me. Thank you, actually ;)

I'm now working on a small carrier board with battery management, 3-axis accelerometer, 1-axis gyro, GPS RF front-end and antennas for personal and automotive navigation applications (wish me good luck)!

Cheers,
Michele

Ash Charles said...

Michele,

the carrier board sounds pretty cool - when not at Gumstix I build robots so a carrier board for Overo like the one you described sounds pretty useful. I just talked to one of the engineers here and he mentioned that the Palo35 has an accelerometer on board and an upcoming board will include a GPS module (specifically, a u-blox 5 series GPS chip). The schematics for these boards are available online -- perhaps these would be a useful reference for you?
Cheers,

Ash

Michele Bavaro said...

Ash,

thank you very much for the pointers: I'm quite sure that an open-source handheld navigator with GPS and inertial sensors is quite useful, and I'm sure I'll have a close look at the Palo35 and the upcoming expansion board. I also subscribed @gizmoforyou for the Flow G1.5 project.

But my objective is to demonstrate that a fully software solution for GPS can match (if not beat) the space and power requirements of a hardware receiver - at least with current Cortex-A8 application processors. Therefore, I have the very specific need to place on the board a Maxim MAX2769, which most of the users would not want :)

If you wish, I'll send you the design when it's presentable (end of the week hopefully?). See if you can make anything out of it.

Cheers!
Michele

Ash Charles said...

That MAX2769 chip looks pretty interesting - I've not seen something like that before. One of the designers here would definitely be interested in your design -- if you could send it through that'd be great (ashcharles (AT) gmail...).
-Ash

Erick da Silva said...

Hi Michele,

my name is Erick. I am working also with Primo Front-End. Unfortunatelly I'm a beginner and having problems programming the MAX2769 RF of the Primo Front-End. The documentation didn't help me too much. My question is maybe simple to you: how can I configurate the sampling frequency of ADC and the IF frequency in the output of the Front-End?

Thanks in Advance,
Erick da Silva

Michele Bavaro said...

Hello Erick,

sorry for not coming back to you earlier. What do you exactly mean when you say that you're working with "Primo Front-End"? If you bought one from NSL, then go through the official support - which is always me but with a higher effort rate ;)

If you are just working with a MAX2769 chip and your own custom design, please be more specific in your question. To yours, I could only answer "read the datasheet".

Regards,
Michele

Erick da Silva said...

Hi Michele,

Thanks for your answer. I have a NSL too. I got problems exactly in the MAX2769 chip configuration. I have read all datasheets but unfortunatelly, it is not explained clearly how to configurate the IF frequency on the output. The configuration of IF frequency of the MAX2769 chip is represented in its configuration file by a 6-bits FCEN. The default configuration of IF, 4GHz, is represented in this register by the binary number '001101'. Until now, I don't know why 4Ghz is represented by '001101', and how to change the IF frequenty to, for example, 6Ghz.
Besides, the configuration of IF frequency seems related also with the Bandwidth configuration represented by the 2 bits FBW in configuration register 1.

So, I will continue trying to understand...

Thanks,
Erick

Erick da Silva said...

Sorry,

In my last post I mean 4 MHz, and not 4Ghz as I wrote.

Michele Bavaro said...

OK Erick,

I can help with that.

It's a little more complicated than what you say. First of all, the IF is NOT set through FCEN. FCEN only sets the centre of the BP filter. In fact FCEN is useless if you decide to use both I&Q channels and a zero-IF configuration. The relationship between FCEN and the center of the filter is explained in a confidential app note from Maxim ;)

To set the intermediate frequency you have to play with the synthesizer settings: registers PLLCONF, DIV, and FDIV. You will have to understand how a VCO works first:

http://upload.wikimedia.org/wikipedia/en/d/d9/PLL_generic_inline.svg

Example: you have a reference frequency (16.368MHz TCXO). You can divide that by 16 (see RDIV is 16 at page 21?), so your reference is now 1.023MHz. Your VCO can span between 1550 and 1610 (see page 4), but you want L1 at an IF of 4.092MHz, so a LO frequency of 1575.42MHz - 4.092MHz = (1540-4)*1.023MHz = 1536*1.023MHz. Oh wait, 1.023MHz is your reference frequency and 1536 is an integer number! So, set the VCO divider to be of integer type (INT_PLL=1, pag. 20), and NDIV=1536d=000011000000000b (pag.21). This is also explained at pag. 11, "synthesizer".

Good luck,
Michele


P.S.: Feel free to contact NSL if you need more, and ask to speak to me.

Erick da Silva said...

Thanks, Michelle!

lieu said...

hi,Michelle!
i have a max2769 and i want to design a sofware_defined gps receiver by matlab.but i don't know how to connect it to PC through usb port.can you tell me what i should do first?thanks in advance!

Michele Bavaro said...

Lieu,

your question is not clear. What do you mean with "I have a max2769"? Do you have a sample, do you have the eval-kit, ...? Once you specify better, I might be able to help you.

Mic

lieu said...

thankyou for replying!. .this is my problem: I have only a max2769 chip not a evaluation kit and i intend to design a circuit board to receive gps/galileo signal with it and show the position on a LCD. may you guide me how to solve this prolem easily?

Michele Bavaro said...

Lieu,

it's a fairly large question.

First, do you understand that the MAX2769 is a GNSS signal sampler and not a complete receiver?
If yes, how would you like to implement the receiver (fully software defined radio, DSP, FPGA, ...)? If software, do you know how to connect it to a processor (x86, ARM, ...)?

Anyway... for a board you may start looking at the Maxim/Dallas application notes and evaluation kit:

http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5241/t/do

http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5243/t/al

Cheers,
Mic

lieu said...

as i know,max2769 is a GNSS receiver chip,but not a complete receiver. I want to implement the receiver fully software defined radio. I don't know how to connect it to a processor (such AVR).

Michele Bavaro said...

Lieu,

so you said you want to program your receiver in Matlab connecting through the USB port?
I am not aware of any Matlab running on AVR or any other embedded machine with an LCD screen, but I might be misinformed.

As I told you, you can request the application note and design files for a MAX2769+USB here:

http://www.maxim-ic.com/app-notes/index.mvp/id/4275

OsGPS people did a similar thing with a SiGe front-end, but I doubt they would disclose their hardware desing:

http://sourceforge.net/projects/osgps/

What I can tell you is that in PRIMO the MAX2769 is connected to a CPLD (XC2C64A) and a Cypress USB micro (CY7C68014A). The CPLD is a sort of "glue-logic" to the USB micro which configures the MAX2769 and streams the digital data to the host.

Another interesting feature I'm studying at the moment is the "DSP interface" of the MAX2769. Some application processors have fast serial ports capable of sustaining 10 or more Mbit/sec, which is what you need for Galileo BOC(1,1). In this case, you can seamlessly (almost) connect a MAX2769 to a host processor.

Hope it helps,
Michele

Nicolas said...

Dear Michele,
when you say "The relationship between FCEN and the center of the filter is explained in a confidential app note from Maxim ;)" ; Do you have access to this note ? Do you have a contact any contact with Maxim support?
I Have some technical questions pending that are not explained in Max2769 datasheet nor applications notes :
How is coded FCEN (6bits) ?
How is coded ILNA1(4 bits) and ILNA2 (2 bits) ?
Is ANT_FLAG prior over LNA_MODE register ?
Many thanks.

Michele Bavaro said...

Nicolas,

Yes I have the application note, and I obtained it being very persistent with Maxim technical support. The fact that we buy many of their chips helped as well.
I cannot disclose those details without authorisation from Maxim, sorry.

Regards,
Michele

Amin said...

hello
I am trying to cross-compile the gps-sdr code on my host pc to excecute it on beagleboard C3 and I am getting some errors:
"unknown pseudo-op: `.intel_syntax'"
I am wondering if there is anything that I could do in order to make this work
thanks in advance
Amine

Michele Bavaro said...

Hi Amine,

Is it maybe to do with the fact that Beagleboard carries an ARM, and gps-sdr is written using Intel SSE2? Make sure no assembly is compiled, or you'll always get that error ;)

Cheers,
Michele

shitake83 said...

Hi Michele,

thanks for all the information. I have a couple of Max2769 chips, at first i thought its a "complete" solution (by the way they advertise it on the page), until I read the datasheet and came across all this information. Eventhough you are saying that the MAX2769 is a GNSS signal sampler and not a complete receiver. Im not an expert on the topic, as i am trying to learn new stuff, so excuse if my question sounds newbish.
What would i need to add to it to make it a complete gps receiver ?! Do i need a (seperate)MCU to process the data ?? How would i get NMEA data (if at all) ??
I want to add it to an AtMega , would that be enough or would i need to process the data coming out of the 2769 with something like ARM A8 and later on send the processed data from ARM to AtMega through Serial. Can you point me to some information so i can research for myself ??

Thanks VERY much.

Michele Bavaro said...

Hi shitake83,

You need to process the data with something like a DSP, an ARM A8, FPGA, etc..
I suggest you to discard the MAX2769 option if all you want is NMEA, and use some cheap COTS all-in-one receiver.

I hope this helps,
Michele

shitake83 said...

Wow, thanks for this quick answer :).

Yes in the end all i want is NMEA for my quadrocopter, but on the other hand i also want to understand what the COTS is doing and how it works (i actually have a couple). It also has glonass and gallileo so thats also something i would want to explore. Can you try to explain what i would have to do ? not in great detail but just a guideline so i can understand what I would have to do. I have an ARM A8 lying around somewhere.

Michele Bavaro said...

Hi,

Well, it's a long story and not trivial at all. Google for "GPS SDR" and "GNSS SDR" to understand better.
If you want to have better control over what the module is doing perhaps you should consider a carrier phase enabled COTS receiver, such as the S1315F-RAW, the ORG4472, or the LEA-6T. If you need Glonass, go to Skytraq (S4554GNS-LP, S2525G2F, or GG12A) or Fastrax (IT600). I heard Skytraq is adding carrier phase outputs to their GPS/Glonass modules.

shitake83 said...

For what reason is maxim selling its max2769 then ?? I cant get it, if nobody can get it to work, or if its SO hard , why they build it in the first place ?? you get me. if they built it, it must be possible to use it :). Its not that i couldnt use a COTS receiver but i really want to use this chip and if the training curve is so high, then i might have to take the long route. Even if it takes me a year to get it working i still learned something along the way. I will read into gps sdr/gnss sdr. Thanks. If theres more stuff i can/have to look for , please tell me. Even very basic stuff, that i might not know. (because i dont know what i have to know :) ). Thanks a lot.

Dan GNSS said...

Michel,

You mentioned your Gumstix OVERO can also process 15 channel GPS at real time, I would like to know how do you allocate the resource to do the processing, did you use DSP to do the FFT or using NEON SIMD doing FFT or both? I try to use beagleboard xm as a software GPS receiver but I find I need more computation power to do FFT

Michele Bavaro said...

Hi Dan,

Yes OMAP35x is perfecty capable of running a GPS SW receiver: it's all a matter of optimisation. I used only NEON to do all the processing. Your statement about needing more computation power for the FFT is not clear to me, as acquisition is not such a time-constrained process of the receiver.

Bests,
Michele

Dan GNSS said...

Hi Michele,

Did you use fftw-neon or just implement bfly function using neon? I imported whole gps sdr into beagleboard and found out pure C function version doesn't work. I am going to update fft using neon. Do you know beside fft which module take more time in sdr?
also you use USB port so you only have about 8M byte/s you may not have ability to process GLONSS and Glileo signal, Am I right?

Dan

Michele Bavaro said...

Hi Dan,

I implemented my own FFT using NEON for the sake of speed. But any FFT would work so I don't agree with your statement "pure C function version doesn't work".
The most time critical task is the SW correlator (MAC).

Primo (and others) support data packing and most F/E use only 2bit/sample, so 8MBytes/sec translate to 32Msample/sec which is more than enough for Galileo (E1) and Glonass (G1). Moreover, 8MByte/sec sounds like a conservative number for USB2 HS. Intel host controllers transfer up to 40MByte/sec so I would expect Beagleboard XM to be capable of more than 8Mbyte/sec.

Cheers,
Michele

Tom said...

Dear Michele,
By mentioning "Primo (and others) support data packing and most F/E use only 2bit/sample, so 8MBytes/sec translate to 32Msample/sec which is more than enough for Galileo (E1) and Glonass (G1)", you mean we could extract the samples in 2-bit-values, don't you. How to do so in usb frontend in general? since I think the usb frontedn in fact packs 2-bit-values into 1-byte-values when connecting to the PC via USB. Am I right?

Michele Bavaro said...

Hello Tom,

Packing is achieved using a CPLD acting pretty much as a shift register.

With PRIMO and SdrNav00 I received GPS,Galileo,Glonass, and Beidou2.
Since the max data rate on the USB2.0 is around 30MByte/sec, one could stream I only at 2bit/sample and fs=120MHz.
Of course the ADC inside the MAX2769 is limited to about 30-something MHz so the above speed is impossible to achieve.
But of course, by using a 16.368MHz TCXO and the clock doubling feature inside the MAX2769, you can sample at 32.736MHz and have an effective data rate on the USB 2.0 of 8MBytes/sec (4 I-only samples packed in one byte).
Please note that despite being 32.736MHz appealing for Glonass (8MHz bandwidth), the 98th clock harmonic will produce a CW spike nearby slot with k=+4.
For Glonass you may need e.g. a 26MHz TCXO.

Cheers,
Michele

volgy said...

Michele,

Nice work, I envy your insight to the MAX2769. After going through the datasheet (multiple times) I still wonder about the timing of the ADC interface. Apart from a scope screenshot, there is practically no information on this topic. It seems that sampling the I/Q data lines on the rising edge of CLKOUT is the intended method, but I wonder if you could confirm this.
Thanks,

Peter

Michele Bavaro said...

Hi Peter,

According to the data-sheet and by experience data is updated on the rising edge of CLKOUT so it must be sampled on the falling edge.
Hope this helps.

Best regards,
Michele

volgy said...

Thanks Michele,

I agree. The safest bet seems to be the DSP interface (with slower ADC clock or I channel only). Over the weekend I realized I need to contact Maxim if I want to use this chip. I guess you went down this path before.

The SE4150L seems to be a bit simpler to work with. I only need L1 GPS anyways. Do you know any good website/post/discussion thread comparing these two RF frontends?

Thanks again,
--
peter

Michele Bavaro said...

Peter,

The DSP interface is not well documented and incompatible with most SPI master controllers found in inexpensive micro-controllers, so I would suggest not going down that route.

On the other hand, the normal parallel interface is as easy to use as any other GPS front-end.

I would never choose SE4150L as Skyworks has no plans of developing further the GNSS product line and -if you do SDR- MAX2769 has obvious upgrade paths.

Best regards,
Michele

volgy said...

Michele,

Your last comment on the future prospects of these products is invaluable !(yes, it is an SDR project). Thanks,
--
peter

Nagaraj Patil said...

Hi Michele

This is Nagaraj
I already have Max 2769 IC's with Maxim's confidential app notes(BPF selction and DSP ) iam getting difficulty interfacing DSP present in Max2769 and ARM7(LPC2129)through spi interface so please kindly help me...
thanks in advance

Nagaraj

John Dudley said...

The software development company in delhi alludes the association having skill in creating software according to the requirements of the organization.