Are my AB02 boards dead?

I have two HTCC-AB02 boards which I am having issues with.
both have the same code uploaded to them, but give different results.
I have tried uploading from both Arduino IDE and Platform IO - no difference.
Code is below:

#include "LoRaWan_APP.h"

#include <Wire.h>
#include "HDC1080.h"


#define rainPin GPIO1
int rain = 0;
int finalrain = 0;
uint16_t vbat;
uint16_t cnt;
void cntIncrease();
/*
 * set LoraWan_RGB to Active,the RGB active in loraWan
 * RGB red means sending;
 * RGB purple means joined done;
 * RGB blue means RxWindow1;
 * RGB yellow means RxWindow2;
 * RGB green means received done;
 */

/* OTAA para*/


uint8_t devEui[] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x06, 0x04, 0x7B};
//generic_meshed_testing app
uint8_t appEui[] = { 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6, 0xC69, 0x69};
uint8_t appKey[] = {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX};
/* ABP para*/
uint8_t nwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };
uint8_t appSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 };
uint32_t devAddr =  ( uint32_t )0x007e6ae1;

/*LoraWan channelsmask, default channels 0-7*/ 
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };

/*LoraWan region, select in arduino IDE tools*/
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;

/*LoraWan Class, Class A and Class C are supported*/
DeviceClass_t  loraWanClass = LORAWAN_CLASS;

/*the application data transmission duty cycle.  value in [ms].*/
uint32_t appTxDutyCycle = 300000;

/*OTAA or ABP*/
bool overTheAirActivation = LORAWAN_NETMODE;

/*ADR enable*/
bool loraWanAdr = LORAWAN_ADR;

/* set LORAWAN_Net_Reserve ON, the node could save the network info to flash, when node reset not need to join again */
bool keepNet = LORAWAN_NET_RESERVE;

/* Indicates if the node is sending confirmed or unconfirmed messages */
bool isTxConfirmed = LORAWAN_UPLINKMODE;

/* Application port */
uint8_t appPort = 1;
/*!
* Number of trials to transmit the frame, if the LoRaMAC layer did not
* receive an acknowledgment. The MAC performs a datarate adaptation,
* according to the LoRaWAN Specification V1.0.2, chapter 18.4, according
* to the following table:
*
* Transmission nb | Data Rate
* ----------------|-----------
* 1 (first)       | DR
* 2               | DR
* 3               | max(DR-1,0)
* 4               | max(DR-1,0)
* 5               | max(DR-2,0)
* 6               | max(DR-2,0)
* 7               | max(DR-3,0)
* 8               | max(DR-3,0)
*
* Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
* the datarate, in case the LoRaMAC layer did not receive an acknowledgment
*/
uint8_t confirmedNbTrials = 4;

/*!
 * \brief   Prepares the payload of the frame
 */
HDC1080 hdc1080;
static void prepareTxFrame( uint8_t port )
{
	/*appData size is LORAWAN_APP_DATA_MAX_SIZE which is defined in "commissioning.h".
	*appDataSize max value is LORAWAN_APP_DATA_MAX_SIZE.
	*if enabled AT, don't modify LORAWAN_APP_DATA_MAX_SIZE, it may cause system hanging or failure.
	*if disabled AT, LORAWAN_APP_DATA_MAX_SIZE can be modified, the max value is reference to lorawan region and SF.
	*for example, if use REGION_CN470, 
	*the max value for different DR can be found in MaxPayloadOfDatarateCN470 refer to DataratesCN470 and BandwidthsCN470 in "RegionCN470.h".
	*/
    pinMode(Vext,OUTPUT);
    digitalWrite(Vext,LOW);
    hdc1080.begin(0x40);
    float temperature = (float)(hdc1080.readTemperature());
    float humidity = (float)(hdc1080.readHumidity());
    hdc1080.end();
    digitalWrite(Vext,HIGH);
    uint16_t vbat = getBatteryVoltage();
    unsigned char *puc;

    puc = (unsigned char *)(&temperature);
    appDataSize = 12;
    appData[0] = puc[0];
    appData[1] = puc[1];
    appData[2] = puc[2];
    appData[3] = puc[3];

    puc = (unsigned char *)(&humidity);
    appData[4] = puc[0];
    appData[5] = puc[1];
    appData[6] = puc[2];
    appData[7] = puc[3];

    appData[8] = (uint8_t)(vbat>>8);
    appData[9] = (uint8_t)(vbat);

    appData[10] = (uint8_t)(cnt>>8);
    appData[11] = (uint8_t)(cnt);

    

    Serial.print("T=");
    Serial.print(temperature);
    Serial.print("C, RH=");
    Serial.print(humidity);
    Serial.print("%,");
    Serial.print("BatteryVoltage:");
    Serial.println(vbat);
}


void setup() {
	Serial.begin(115200);
		 PINMODE_INPUT_PULLUP(GPIO1);
  attachInterrupt(GPIO1,cntIncrease,FALLING);  /* pin to interup, ISR (interupt rouint function), mode(falling or rising) */
#if(AT_SUPPORT)
	enableAt();
#endif
	deviceState = DEVICE_STATE_INIT;
	LoRaWAN.ifskipjoin();
}

void loop()
{
	switch( deviceState )
	{
		case DEVICE_STATE_INIT:
		{
#if(LORAWAN_DEVEUI_AUTO)
			LoRaWAN.generateDeveuiByChipID();
#endif
#if(AT_SUPPORT)
			getDevParam();
#endif
			printDevParam();
			LoRaWAN.init(loraWanClass,loraWanRegion);
			deviceState = DEVICE_STATE_JOIN;
			break;
		}
		case DEVICE_STATE_JOIN:
		{
			LoRaWAN.join();
			break;
		}
		case DEVICE_STATE_SEND:
		{
			prepareTxFrame( appPort );
			LoRaWAN.send();
			deviceState = DEVICE_STATE_CYCLE;
			break;
		}
		case DEVICE_STATE_CYCLE:
		{
			// Schedule next packet transmission
			txDutyCycleTime = appTxDutyCycle + randr( 0, APP_TX_DUTYCYCLE_RND );
			LoRaWAN.cycle(txDutyCycleTime);
			deviceState = DEVICE_STATE_SLEEP;
			break;
		}
		case DEVICE_STATE_SLEEP:
		{
			LoRaWAN.sleep();
			break;
		}
		default:
		{
			deviceState = DEVICE_STATE_INIT;
			break;
		}
	}
}

void cntIncrease() {
  static unsigned long last_interrupt_time = 0;
  unsigned long interrupt_time = millis();
  // If interrupts come faster than 250ms, assume it's a bounce and ignore
      if (interrupt_time - last_interrupt_time > 500)
        {
          cnt++;
        }
      last_interrupt_time = interrupt_time;
  
}

AB02 number one will try and join, but will always fail. It will try different frequencies, but always with DR 5. (other boards I have cycle through different DR values until join is successful)
AB02 number 2 will accept a successful upload, but then does nothing. pressing the reset button only gives the serial output : ‘Copyright @2019-2020 Heltec Automation.All rights reserved.’
pressing and holding ‘USR’ while pressing and releasing ‘RST’ gives ‘bootloader Rev 1.0’.

Running the same code on a board that is known to be working gives expected results.
Am I to accept that these two boards are just dead now?

EDITED: Board AB02 number 2 is now working correctly, I have no idea why, the only difference is that i used platform io to upload the sketch and it now works and sends data via TTN as desired!

Board AB02 number one is still stuck on trying to join at DR5 with no success…

Same bahaviour when connected to usb ?

yes, i now believe that the board abo2 number 2 has an issue with the lorawan chip, as i uploaded the factory test sketch from arduino ide, and it wont get past displaying ‘Lorawan Starting’ on the oled display