Thank you for your advice ... and your patience !
So I ran a new serie of tests. In all my test, I used the startup sequence of the GPS. Directly connected to the PC here is the output:
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRFTXTWK: 1340*4F
$PSRFTXTPOS: 6378137 0 0*06
$PSRFTXTCLK: 96250*09
$PSRFTXTCHNL: 12*5F
$PSRFTXTBaud rate: 38400 System clock: 1124.403MHz*6D
$PSRFTXTVersion 01002-02A*68
$GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,00000.0000,E,,,100905,,,N*7E
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235949.047,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*40
$GPRMC,235949.047,V,0000.0000,N,00000.0000,E,,,100905,,,N*78
$GPVTG,,T,,M,,N,,K,N*2C
Try bumping up your speed to your serial monitor, like to 115200, so your debugging gets echoed faster.
Here are two tests to check if the serial port speed has an effect :
Test #1:Buffering : one line
Serial port speed : 115200
Waiting for GPS...
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRF?XT¯K: ?34?*4£
?S©FT¬TP§S: 6?78?3FXTerson0102-2A68
$GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,000?0.?°0?,E?,,?°0?05,,,N*7¢
?$GPGGA,235949.047,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*40
$GPRMC,235949.047,V,0000.0000,N,00?00?00?0,¢,,?10?90?,,?N*?8
?$$GPGGA,235950.036,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4E
$GPRMC,235950.036,V,0000.0000,N,0000?.0?00?E,?,1?09?5,?,N?76?
Test #2:Buffering : one line
Serial port speed : 4800
Waiting for GPS...
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRFªXT«K: 1340*4£
$PSRFªXTPOS: 63781?*
PSTXTadrae:840 Sserin 10-0A*8
$GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,00?00?0000?E,,,10?905,,,N*7?
$$GPGGA,235949.047,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*40
$GPRMC,235949.047,V,0000.0000,N,00000?0000,E,,,100905,,,N*78
$$GPGGA,235950.036,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4E
$GPRMC,235950.036,V,0000.0000,N,000?0.000,E,,,100?05,,,N*76
Result are similar for both speeds.
the problem might simply be that it can't echo to you fast enough, and is losing some incoming bits while it does so.
Here are some more few tests. Here, the sketch is buffering several lines to see if it gets better (code available here
http://pastebin.com/GK5fAkU8)
Test #3Buffering : 4 lines
Serial port speed : 115200
Waiting for GPS...
Bloc
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRFTXTWK: 1340*4F
$PSRFTXTPOS: 6378137 0 0*06
Bloc
$PSRFTXTCLK: 96250*09
$PSRFTXTCHNL: 12*5F
$PSRFTXTBaud rat: $GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,00000®0000,E,,,100905,,,N*7E
Bloc
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235949.048,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4F
$GPRMC,235949.048,V,0000.0000,N,00000.0000,E,,,100905,,,N*77
$GPVTG,,T,,M,,N,,K,N*2C
Test #4Buffering : 4 lines
Serial port speed : 4800 bps
Waiting for GPS...
Bloc
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRFTXTWK: 1340*4F
$PSRFTXTPOS: 6378137 0 0*06
Bloc
$PSRFTXTCLK: 96250*09
$PSRFTXTCHNL: 12*5F
$PSRFTXTBaud rat: $GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,00000.0000,E,,,100905,,,N*7E
Bloc
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235949.047,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*40
$GPRMC,235949.047,V,0000.0000,N,00000.0000,E,,,100905,,,N*78
$GPVTG,,T,,M,,N,,K,N*2C
Test #5Buffering : 10 lines
Serial port speed : 115200
Waiting for GPS...
Bloc
$PSRFTXTVersion GSW3.1.1TO_3.1.00.07-C23P1.00 *2A
$PSRFTXTTOW: 0*09
$PSRFTXTWK: 1340*4F
$PSRFTXTPOS: 6378137 0 0*06
$PSRFTXTCLK: 96250*09
$PSRFTXTCHNL: 12*5F
$PRFXTau rte 840 yte coc: 12.03Hz*D
$SRTTVesin010202*6
$GPGGA,235948.037,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*46
$GPRMC,235948.037,V,0000.0000,N,00000.0000,E,,,100905,,,N*7E
Bloc
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235949.047,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*40
$GPRMC,²35949.047,V,0000.0000,N,00000.0000,E,,,100905,,,N*78
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235950.036,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4E
$GPRMC,235950.036,V,0000.0000,N,00000.0000,E,,,100905,,,N*76
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,235951.036,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4F
$GPRMC,235951.036,V,0000.0000,N,00000.0000,E,,,100905,,,N*77
$GPVTG,,T,,M,,N,,K,N*2C
Buffering more lines and using slow speeds seems to lower the problem. However, data get screwed up in the first bloc of 10 lines. This might indicate that the Arduino messed with data without outputing something to the serial port.
In the Arduino Serial.print() reference
http://arduino.cc/en/Serial/Print one can read :
As of version 1.0, serial transmission is asynchronous; Serial.print() will return before any characters are transmitted.
Does this means invoking Serial.print() should not block the Arduino ? I tried to used Serial.flush() and Serial.write() without any more luck.
What am I missing?