Hola, coco, te cuento mi experiencia con los GPS, he programado para los smarphones de windows mobile que tienen GPS (por ejemplo los motorola symbol), para eso no uso mas que lo que vos estas usando, no hay mas ciencia en esto, uso la clase System.IO.Ports, declaro un puerto COM, lo abro con las propiedades, (Parity, StopBits, DataBits, BaudRate) esas propiedades tienen que ser exactas sino te lee cualquier cosa o no hace nada, despues una ves aberto comienza a llegar info al puerto, mas presisamente lo que se llaman "tramas", con la informacion de la latitud y longitud y todo tipos de datos, cuando llega la trama que a mi me interesa, la parseo y listo obtengo la latitud-longitud y la guardo.
no se que codigo estas usando, pero sirve cualquier codigo que haya en internet de manejo de puertos, por ejemplo yo uso esta funcion para leer la trama:
Public Function leerPuertoSerie() As String
Try
If puertoSerie.IsOpen Then
Dim bData As Byte() = Nothing
Dim numberOfBytes As Integer = 256
bData = New Byte(numberOfBytes - 1) {}
puertoSerie.Read(bData, 0, numberOfBytes)
puertoSerie.DiscardInBuffer()
Return System.Text.Encoding.UTF8.GetString(bData, 0, numberOfBytes)
Else
Return ""
End If
Catch Ex As Exception
Return ""
End Try
End Function
eso me devuelve el string con la trama.
y asi lo abro:
puertoSerie.PortName = "COM8"
puertoSerie.Parity = Parity.None
puertoSerie.StopBits = StopBits.One
puertoSerie.DataBits = 8
puertoSerie.BaudRate = 4800
puertoSerie.Open()
saludos.