Tracker-Edge V19 Firmware

Here’s a revised version of your text for clarity and readability:


I have a T404M board and want to use Tracker Edge v19. I selected the Asset Tracker/Monitor One as the target platform in Particle Workbench and set the Device OS version to 6.1.1. The code compiles without any issues.

Currently, my code is as follows:

void setup()
{
Tracker::instance().init();
Particle.connect();
}

void loop()
{
Tracker::instance().loop();
}

However, after the Tracker::instance().init() line, the program stops running (I tested this by adding logs before and after this line). What could be causing this issue? Are there additional configurations or steps needed?

Do you also have the STARTUP block? That will definitely affect power management but it's not clear that it should cause a hang.

STARTUP(
    Tracker::startup();
);

What are the debug logs at startup? You should probably waitFor serial before calling Tracker::instance()::init() so you can see all of the messages.

No I haven't this Code :

STARTUP(
    Tracker::startup();
);

And no any modification on Downloaded V19 Firmware from Particle

i Get Bellow log:

0000005953 [ModelGauge] INFO: read original OCV: 180, 219
0000005954 [ModelGauge] INFO: verify model access unlocked: success
0000006264 [ModelGauge] INFO: load model successfully
0000006586 [ModelGauge] INFO: model verify success

Can you tell me the best versions of DeviceOS and Edge-Tracker that work well together? Is DeviceOS 6.1.1 and Edge-Tracker 19 a good choice for the T404M Particle Module?

6.1.1 plus TrackerEdge v19 should work properly.

The model verify success occurs when the fuel gauge chip is checked, however that is probably not what is failing.

I'd add more debug statements in Tracker::init() to see where it's actually getting stuck. Also add some debugging statements to make sure it's not trying to access TrackerOne peripherals, which you probably don't have.

How can i see more debug statements ?
this is my code

#include "Particle.h"

#include "tracker_config.h"
#include "tracker.h"

SYSTEM_THREAD(ENABLED);
SYSTEM_MODE(SEMI_AUTOMATIC);




// PRODUCT_ID(TRACKER_PRODUCT_ID);
PRODUCT_VERSION(TRACKER_PRODUCT_VERSION);


SerialLogHandler logHandler(115200, LOG_LEVEL_TRACE, {
    { "app.gps.nmea", LOG_LEVEL_INFO },
    { "app.gps.ubx",  LOG_LEVEL_INFO },
    { "ncp.at", LOG_LEVEL_INFO },
    { "net.ppp.client", LOG_LEVEL_INFO },
});

void setup()
{
    delay(5000);
    
    Tracker::instance().init();

    Particle.connect();
}

void loop()
{
    Tracker::instance().loop();
}

Just modify the code in Tracker.cpp in the src directory to add more Log.info() statements.

The following line causes the program to stop in tracker.cpp:

        // Delay so that the bulk capacitance and battery can equalize
        delay(_commonCfgData.postChargeSettleTime);

It seems that _commonCfgData.postChargeSettleTime is not referencing a valid value.

I might have an issue with the Tracker Model. Where and how can I assign the Tracker Model or any other Configuration?

In Tracker.cpp, in the init() method you'll see the code to get the model and variant, and configure the device appropriately.

You probably won't want to try to reprogram the variant in the OTP area of the nRF52 MCU. but you could.

Instead, since you're customizing Tracker Edge anyway, just add your own code to handle configuring for your carrier board in init().

As a test, just add a default case before EdgePlatform::TrackerModel::eEVAL so that will be used for your base Tracker SoM and see if you get past the spot where it's getting stuck.

1 Like

I tested Firmware V18 and V19 with DeviceOS 6.1.1, but both versions have issues and do not run correctly on the device. However, when I tested Firmware V18 with DeviceOS 3.3.0, it worked fine.

Could you please tell me the best combination of Firmware and DeviceOS versions for the T404M board? Additionally, can you provide a compiled version of this combination for testing with my board?

To use Tracker Edge v19 on 6.1.1 on a Tracker SoM (not a Tracker One or Tracker SoM eval board), you may need to create a custom configuration class. However, the easiest solution is to just add a default case in Tracker.cpp, line 589.

    EdgePlatform::instance().init(_model, _variant);
    switch (EdgePlatform::instance().getModel()) {
        case EdgePlatform::TrackerModel::eTRACKER_ONE:
            _platformConfig = new TrackerOneConfiguration();
            _commonCfgData = _platformConfig->get_common_config_data();
            break;
        default: // <- Add this line
        case EdgePlatform::TrackerModel::eEVAL:
            _platformConfig = new TrackerEvalConfiguration();
            _commonCfgData = _platformConfig->get_common_config_data();
            break;
    }

For a bare Tracker SoM, the model will not be one of the two cases listed here, which causes the configuration class to be uninitialized, which does not work. Adding the default case uses the Tracker SoM eval board configuration, which should work in most cases.