2015-06-05 7 views
0

Я работаю с GPS-модулем ublox-6 neo6 и пытаюсь извлечь данные из него с микроконтроллера pic32 с использованием SPI. Я использую контакты GPIO для этого, поэтому библиотека SPI находится вне таблицы.GPS-связь uxox-6 neo6 с микроконтроллером с использованием SPI

По-видимому, все, что мне нужно сделать, это отправить его 0xFF и прочитать то, что возвращается в то же время, чтобы получить данные. Когда я пытаюсь бить его сам, я посылаю 0xFF, но все, что я получаю от GPS, - 0xFF назад.

Я также пытался реализовать библиотеку SoftSPI, потому что меня беспокоило, что я пытался отправить и получить информацию слишком быстро, но аналогичным образом, когда я отправляю 0xFF, я все равно получаю 0xFF обратно из GPS.

Вот мой бит Стук код:

#include <plib.h> 
#include <Math.h> 
#include <p32xxxx.h> 

void setup() { 
    pinMode(RB05_GPSmosi, OUTPUT); 
    pinMode(RB02_GPSmiso, INPUT); 
    pinMode(RB03_GPSsclk, OUTPUT); 
    pinMode(RB04_GPScs , OUTPUT); 
    digitalWrite(RB04_GPScs, 1); 
    digitalWrite(RB03_GPSsclk, 0); 
} 

void loop() { 
    gpsHit(); 
} 


void gpsHit() { 
    char received = 0; 

    digitalWrite(RB04_GPScs, LOW); 

    int i = 0; 
    for(i = 0; i < 8; i++) { 
    digitalWrite(RB05_GPSmosi, ((0xFF >> (7-i)) & 0x01)); 
    digitalWrite(RB03_GPSsclk, 1); 
    received |= digitalRead(RB02_GPSmiso) << (7-i); 
    digitalWrite(RB03_GPSsclk, 0); 
    } 

    if((received & 0xFF) != 0xFF) 
    Serial.println(received); 

    digitalWrite(RB04_GPScs, HIGH); 
} 

А теперь для кода SoftSPI:

#include <SoftSPI.h> 
#include <Math.h> 
#include <p32xxxx.h> 

#define RB05_GPSmosi 21 
#define RB04_GPScs 15 
#define RB03_GPSsclk 20 
#define RB02_GPSmiso 14 

uint8_t recBuf[80]; 

SoftSPI gps; 

void setup() { 
    Serial.begin(9600); 
    gps.begin(RB04_GPScs, RB05_GPSmosi, RB02_GPSmiso, RB03_GPSsclk); 
    gps.setSpeed(80000); 
    gps.setDirection(SSPI_SHIFT_LEFT); 
    gps.setDelay(10); 

    //Reset gps 
    sendReset(); 
} 

void loop() { 
    int i = 0; 
    for(i = 0; i < 80; i++) { 
    Serial.print((char) recBuf[i]); 
    recBuf[i] = 0; 
    } 
    Serial.println(); 

    gps.setSelect(LOW); 
    gps.transfer(80, 0xFF, recBuf); 
    gps.setSelect(HIGH); 
} 

В обоих случаях я получаю 0xFF всякий раз, когда я пытаюсь отправить 0xFF. Как ни странно, я получаю фактические строки NMEA, когда я отправляю мусор, который не является 0xFF, но эти строки NMEA не имеют в них фактических данных, это выглядит примерно так:

$ GPGLL ,,,,,,,, V * 32

$ GPGSA ,,,,, A * 49

и т.д ..

^Эти примеры просто вытащил из памяти, так что не может быть именно то, что я получаю обратно, но очень аналогичный.

Любая идея, что может быть причиной этой проблемы? Техническое описание устройства просто говорит, что нужно отправить 0xFF, если у вас нет ничего реального для отправки, и прочитайте, что вы вернете для данных. Я попробовал сбросить устройство до заводского значения по умолчанию, отправив ему код UBX, но это совсем не помогло.

Любые советы или информация были бы весьма признательны.

ответ

0

Поэтому я не использую SPI, но UART для реализации Ublox LEA6T. Тем не менее я могу говорить о том, что NEMA, который вы получаете, выглядит корректным, если антенна или сигнал к приемнику GPS отсутствует. Если вы разместите свой фактический код SPI digitalWrite, я могу помочь больше. У вас есть доступ к логическому анализатору или области для проверки линий?

+0

Итак, я узнал, что всякий раз, когда я пытался сбросить устройство, я забыл выбрать gps, прежде чем пытаться его сбросить. Также я был в здании, где я не мог получить никакого сигнала. Поэтому, как только я исправил обе эти вещи, gps работает хорошо. Я действительно ценю ответ, хотя. Спасибо! – Kyle