chipKIT® Development Platform

Inspired by Arduino™

Hang on data in from XBee

Created Thu, 10 Apr 2014 02:33:56 +0000 by ServoHawk2


ServoHawk2

Thu, 10 Apr 2014 02:33:56 +0000

Hi:

I'm trying to create a simple loop-back test with my XBee Series 1 in transparent mode. XBee to PC is working great in one direction, all baud rates. In fact, I'm pushing 7500 sensor readings (35k) a minute @115kbaud over 150' - not a glitch in the single direction.

BUT, the MAX32 hangs upon arrival of data - every time, instantly. I stripped down to code to the basics to unit-test it.

Code (below) is straight-forward. Interestingly, the same code works if I use only Serial (in and out the USB port). Using Serial1 (below) or Serial2 or Serial3 with Xbee causes a hang upon receipt of the new data. I have tried all baud rates, same issue (sends fine, hangs on first receive). I had a scope on the RX1-RX3 lines and see the new data arriving - then bang - it crashes. Appropriate data signals are being delivered, so I can count out the XBee configuration as being an issue. Most basic test - send a single character/byte - hang, so it's not DI buffer over-run.

This test happens to be in Serial, out Serial1 - because I just saw in/out Serial working fine. I have also tried in/out on each of Serial1-3 - same hang behavior, all baud rates.

It is as if the DI buffer/queue is not established and I'm triggering a memory fault when the first character arrives causing a system halt. I lack the diagnostics to get within the Arduino logic.

Probably something simple as I am SURE tons of folks are doing this!

Many thanks for insight, -john

// 
// MAX32
// Loop-back test
//


unsigned long tstart;
unsigned long ttotal = 0;

int loop_count = 0;
char inByte = 0;

void setup() {
    //
    // Communications
    //
    Serial.begin(115200);    // This sets up a serial connection
    Serial1.begin(115200);   // This sets up XBee connection
    delay (2000);          // allow serial line setup       
    
    Serial.write("Debugger");
    Serial.write("\n");
    Serial1.write("@");   // verify Serial1 operational
}

void loop() {
    // read from Serial, echo to Serial1:
    
    loop_count += 1;
    if (( loop_count % 100) == 0)
        Serial.write("*");                 // life indicator
        
    if (Serial1.available()) {     //IF (.available) - hangs HERE
        tstart = micros();               
        while (Serial1.available()) {
            inByte = Serial1.read();
            Serial.write(inByte); 
        }
        ttotal = micros() - tstart;
        Serial.write("\n");
        Serial.print( ttotal);
        Serial.write("us\n");
    }
        
    delay(5);
}

majenko

Thu, 10 Apr 2014 07:51:36 +0000

Let me guess... MPIDE version 20130715? Upgrade.

[url]http://chipkit.net/forum/viewtopic.php?f=6&t=2481[/url]


ServoHawk2

Thu, 10 Apr 2014 21:19:04 +0000

majenko:

BINGO! That was it! I probably wasted five hours trying to get it to work with all my experimental permutations.

Many thanks to you, majenko, for sharing this insight! -john