CubeCell

From RevSpace
Revision as of 20:55, 27 March 2022 by Bertrik Sikken (talk | contribs) (Timing issues)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Project CubeCell
Cubecell.png
Low-power LoRaWAN Board
Status In progress
Contact bertrik
Last Update 2022-03-27

Intro

This page is about the CubeCell board from heltec.org, aka HTCC-AB01

the github page for the Arduino code

What I'd like to investigate:

  • Does it have an RTC? YES, it appears so
  • --Can we run the arduino-lmic library on this? NO, probably not in the short term--
  • --Can we compile the code with platformio? YES--
  • Use this board for my LoraBatBox
  • Video review by Andreas Spiess

Hardware

Features:

  • based on an ASR605x (ARM cortex M0+ core) + SX1262 radio chip
  • low power, only microamps sleep current
  • battery connection
  • solar cell connection
  • pinout

According to https://heltec.org/project/htcc-ab01/ this board has only 16 kB RAM, so things might get a bit tight. A basic LoRaWAN "hello world" example with the basicmac stack uses approximately 2336 bytes.

Software

Example code

The CubeCell hardware works with (an export of) the basicmac device stack from Lacuna Space, just needs a pinmap definition, (see also https://www.thethingsnetwork.org/forum/t/heltec-cubecell-part-2/37225/72):

const lmic_pinmap lmic_pins = {
    .nss = RADIO_NSS,
    .tx = LMIC_CONTROLLED_BY_DIO2,
    .rx = LMIC_UNUSED_PIN,
    .rst = RADIO_RESET,
    .dio = {LMIC_UNUSED_PIN, RADIO_DIO_1, LMIC_UNUSED_PIN},
    .busy = RADIO_BUSY,
    .tcxo = LMIC_CONTROLLED_BY_DIO3,
};

Troubleshooting

Failure to initialize hardware

The SPI clock in the basic mac stack is configured by default to 10 MHz. Reducing this to 1 MHz makes it start much more reliably. This can be configured in hal.cpp , change:

 static const SPISettings settings(10E6, MSBFIRST, SPI_MODE0);

into

 static const SPISettings settings(1E6, MSBFIRST, SPI_MODE0);

Timing issues

The stack complains about event being out of order. These can be 'fixed' by configuring DCFG_rxrampup to some high number, e.g. 10000

Still, I'm seeing trouble to have joins succeed in the first try. When it does succeed, it's usually already up to SF11.

Constant OSTICKS_PER_SEC amounts to 62500, or 16 us per tick.

This post suggests the micros() function is off by a couple percent. Basically, the arduino micros() function appears to be broken for this platform.

Slow joins

Joining seems to fail until the node reaches SF=11. At that setting, the node can receives the gateway loud and clear (RSSI -36 dBm, SNR +9 dB or so) and the join accept is processed.

TX_START / TX_DONE timing

The plan is to use the interval between these two events for duty cycle bookkeeping. It appears the timing between these events is typically 30 ms higher than what is shown in the TTN console. Perhaps there is an effect of serial port debugging, slowing things down a bit?