Problem with Skynet SKM53 GPS module

I got a skynet SKM53 module and connected it to the Serial2 port on my Arduino Mega 2560.

I seem to get bursts of 37 bytes from it, which are all zeros, so it seems to be trying
to do something, its not completely dead.

This seems strange, because none of the NMEA output strings are 37 bytes long.

In the datasheet for this device, it says thats its “TXD” pin is an input, and its “RXD” pin
is an output. I’m assuming this is a mistake, and I am correct to connect its TXD pin
to the RX pin on the mega.

It says the default baud rate is 9600. If this information was actually wrong, what would
I expect to see ?

It has a “reset” pin RST, which it says is active low. Should I leave this pin disconnected,
or connect it to 5V ? I tried both, no difference.

It says in the datasheet that the TTL high level is 0.75xVcc and the low level is 0.25xVcc. Vcc is 5 volts.

But then it also says in the datasheet, that the serial signal level is “LVTTL” which is says is 2.85 Volts.
2.85V does not seem to be 0.75xVcc . Are these statements inconsistent ?

Has anyone got one of these devices to work ?

Any suggestions at all , as to what to try next ?

In the datasheet for this device, it says thats its "TXD" pin is an input, and its "RXD" pin
is an output. I'm assuming this is a mistake

Why do you assume this? The direction that data flows can be a bit tricky when labeling pins. Sometimes the pins are labeled based on what should be connected to them; sometimes they are labeled based on the direction that data flows.

Since the GPS receives data from satellites, it outputs data that you are interested in. So, you might be correct in thinking that that data would be on the TXD pin. On the other hand, the device may be saying "connect your TXD pin to here".

If you aren't getting reasonable data, or even the right amount of data, try swapping the rx and tx lines.

Well I'm not assuming anything.... but the "Reset" pin of the device is labelled as an input, so one would think that pins of the device are being labelled as "inputs" or "outputs" from the point of view of the device, and not the microcontroller it is connected to.

I followed your suggestion and tried connecting the "RXD" pin of the device to the RX pin of the Arduino. Got the same stream of zeros, as what I got from the "TXD" pin of the device.

I tried disconnecting the RX pin of the arduino from anything, and the stream of zeros stopped.

Under what circumstances, could a serial input to an arduino generate a stream of zero bytes when in fact there might be nothing talking to it at all ?

Another possibility has been raised, that the output level from the device is low voltage, and both a 0 and 1 bit are being read as 0 by the arduino. The datasheet for the device is contradictory about this.

If the device is outputing '1' at a voltage too low to be read as '1' by the arduino, any suggestions on how to get around this ?

I tried disconnecting the RX pin of the arduino from anything, and the stream of zeros stopped.

Well, of course they did. You removed the source.

Under what circumstances, could a serial input to an arduino generate a stream of zero bytes when in fact there might be nothing talking to it at all ?

None that I know of. There are resistors on the serial pins that prevent noise from being considered valid input.

If I were posting on a forum asking for help, I would not be citing parts of the data sheet for a device. I'd post a link to the device and the data sheet for the device. Your mileage may vary.

OK, this is getting ridiculous. The TXP pin of the GPS module is connected to the RX pin of the arduino by a three-inch long piece of wire. If I disconnect the wire at the arduino end, the stream of zero bytes stops. If I disconnect the wire at the other end, I get a stream of zero bytes from the serial port from a three-inch long piece of wire not connected to anything.

Sorry, the information about the device is here:

http://www.skylab.com.cn/datasheet/SkyNav_SKM53_DS.pdf

If I connect the wire from the RX2 pin of the arduino to ground, I get no bytes from the Serial2 port. But if I plug the wire into the RX2 pin of the arduino and leave the other end hanging in the air and not touching anything, I get a stream of zero bytes from the Serial2 port.

Is that what I should expect to see ? Seems strange to me.

I don't think the GPS device is actually emitting anything at all. The input I am seeing from the Serial2 port is probably entirely spurious.

The data sheet suggests a 10k resistor between the GPS's RX and TX pins and the Arduino's RX and TX pins.

You do have VCC and GND of the GPS connected to the appropriate pins on the Arduino, right?

I tried connecting a 10k resistor between the TXD pin of the GPS device and Vcc. I thought that is what they meant by their recommendation to "pull up". When I did this, I get no bytes on the serial port.

I then tried your suggestion to put the 10k resistor between the TXD pin of the GPS device and the RX2 pin of the arduino. When I do this, the serial port creates the stream of zero bytes still.

I then tried disconnecting the input wire to the serial port, so it is connected to the RX2 pin of the arduino at one end and the other end connected to nothing. I dont get the stream of zero bytes. But if I touch the plastic coating of the wire near the free end with my finger, the stream of zero bytes starts up.

The GPS could be stuck in binary mode or the baud rate you are using is wrong. Upload the sketch below, then connect 5V and GND to the Arduino . Leave the Rx pin from the GPS floating (do not connect) and connect the TX pin of the GPS to the Tx pin of the Arduino. Then open Serial Monitor and cycle through the baud rates on the bottom of the screen until you see valid data. This will tell you what the baud rate should be. Perhaps a screen shot of what you're seeing might help also.

void setup(){
  pinMode(0,INPUT);
  digitalWrite(0,LOW);
  pinMode(1,INPUT);
  digitalWrite(1,LOW);
}

void loop(){
  while(1);
}