NMEA 2000 Shield

Hello,

I'm having little bit trouble with my Arduino Due with mcp2515. In my setup i'm sending data to can bus with Arduino Mega and can-bus module (2515 and 2551). Serial monitor shows data packets correctly for some time and after around 20 secods it will start to print "Failed to send" (attached picture)

In the same bus I have also arduin Due with another 2515+2551 module. In Due I'm running default ActisenseListener. Due serial monitor indicates: "Initialize buffers" & "CAN device ready". In Can shield on Due, the RX led is constantly glowing and no data is received or shown in serial monitor.

Code in my arduino mega is shown below:

#include <NMEAGPS.h>

#include <DFRobot_sim808.h>
#include <sim808.h>
#include <Arduino.h>

#define USE_MCP_CAN_CLOCK_SET 8
#define N2k_SPI_CS_PIN 53

#include <NMEA2000_CAN.h>  // This will automatically choose right CAN library and create suitable NMEA2000 object
#include <N2kMessages.h>
#include <dht.h>

#include <GPSport.h>

#define DHT22_PIN A0
#define MESSAGE_LENGTH 160
#define phone_no "+35850xxxx"

#define TempUpdatePeriod 10000
#define GPSUpdatePeriod 1000
#define CourseUpdatePeriod 1000
#define FluidUpdatePeriod 10000

dht DHT;

// List here messages your device will transmit.
const unsigned long TransmitMessages[] PROGMEM = {130311L, 129284L, 0};

char message[MESSAGE_LENGTH];
int messageIndex = 0;


char c;
char phone[16];
char datetime[24];
double seconds;
double days;

const int sim808_status_led = 8;// the number of the LED pin
const int gps_status_led = 9;// the number of the LED pin

#define DEV_TEMP 0
#define DEV_GPS  1

DFRobot_SIM808 sim808(&Serial2);

NMEAGPS  gps; // This parses the GPS characters
gps_fix  fix; // This holds on to the latest values

void setup() {
  pinMode(sim808_status_led, OUTPUT);
  pinMode(gps_status_led, OUTPUT);
  
  // Set Product information
  
  NMEA2000.SetDeviceCount(2); //device count

  NMEA2000.SetProductInformation("100", 100, "Temperature", DEV_TEMP);
  NMEA2000.SetProductInformation("101", 100, "GPS", DEV_GPS);
  
  // Set device information
  NMEA2000.SetDeviceInformation(100, 130, 75, 2040, DEV_TEMP);
  NMEA2000.SetDeviceInformation(101, 145, 60, 2041, DEV_GPS);

  Serial.begin(115200);
  while (!Serial)
  Serial.print( F("Tiiulii_V2.ini: started\n") );

  Serial2.begin(9600);
  digitalWrite(sim808_status_led, HIGH);
  delay(1000);  
  while(!sim808.init()) { 
      delay(1000);      
  }
  digitalWrite(sim808_status_led, LOW);
  
  //******** Initialize sim808 module *************

   if( sim808.attachGPS()){
        Serial.println("Open the GPS power success");
        digitalWrite(gps_status_led, HIGH);
   }
   else
        Serial.println("Open the GPS power failure");

  NMEA2000.SetForwardStream(&Serial);
  // If you want to use simple ascii monitor like Arduino Serial Monitor, uncomment next line
  NMEA2000.SetForwardType(tNMEA2000::fwdt_Text); // Show in clear text. Leave uncommented for default Actisense format.

  // If you also want to see all traffic on the bus use N2km_ListenAndNode instead of N2km_NodeOnly below
  NMEA2000.SetMode(tNMEA2000::N2km_NodeOnly, 22);
  //NMEA2000.SetDebugMode(tNMEA2000::dm_Actisense); // Uncomment this, so you can test code without CAN bus chips on Arduino Mega
  //NMEA2000.EnableForward(false); // Disable all msg forwarding to USB (=Serial)
  // Here we tell library, which PGNs we transmit
  NMEA2000.ExtendTransmitMessages(TransmitMessages);
  NMEA2000.Open();
  
}

//beginning of loop
void loop() {
  while (gps.available(Serial2)) {
    fix = gps.read();

    days = parseTimeDate();
    seconds = parseTimeSeconds(fix.dateTime.hours, fix.dateTime.minutes, fix.dateTime.seconds);  

    SendN2kGPS();
    SendN2kTemperature();
    SendFluidLevel();
    SendCourseRapid();
    
    NMEA2000.ParseMessages();
  }
}  
//FUNCTIONS

double ReadCabinTemp() {
  int readData = DHT.read22(DHT22_PIN);
  return CToKelvin(DHT.temperature); // Read here the true temperature e.g. from analog input
}

double ReadCabinHumidity() {
  return DHT.humidity;
}

void SendN2kTemperature() {
  static unsigned long TempUpdated = millis();
  tN2kMsg N2kMsg;
  
  if ( TempUpdated + TempUpdatePeriod < millis() ) {  
    TempUpdated = millis();
    SetN2kEnvironmentalParameters(N2kMsg, 2, N2kts_MainCabinTemperature, ReadCabinTemp(), N2khs_InsideHumidity, ReadCabinHumidity());
    NMEA2000.SendMsg(N2kMsg, DEV_TEMP);
  }
}

void SendN2kGPS() {
  static unsigned long TempUpdated = millis();
  tN2kMsg N2kMsg;
  if ( TempUpdated + GPSUpdatePeriod < millis() ) {
    TempUpdated = millis();
    SetN2kGNSS(N2kMsg, 1, days, seconds, fix.latitude(), fix.longitude(), fix.altitude(), 0, 0, fix.satellites, fix.hdop, 0, 0);
    NMEA2000.SendMsg(N2kMsg, DEV_GPS);
  }
}

void SendFluidLevel() {
  static unsigned long FluidUpdated = millis();
  tN2kMsg N2kMsg;
  if ( FluidUpdated + FluidUpdatePeriod < millis() ) {
    FluidUpdated = millis();
    SetN2kFluidLevel(N2kMsg, 3, 1, 66, 300);
    NMEA2000.SendMsg(N2kMsg);
  } 
}

void SendCourseRapid(){
  static unsigned long CourseUpdated = millis();
  tN2kMsg N2kMsg;
  if ( CourseUpdated + CourseUpdatePeriod < millis() ) {
    CourseUpdated = millis();
    SetN2kCOGSOGRapid(N2kMsg, 1, 0, fix.heading(), fix.speed_kph()/3.6);
    NMEA2000.SendMsg(N2kMsg);
  } 
}


void SendSMS() {
  Serial.print("Sending sms");
  //sim808.sendSMS(phone_no, "test");
}

double parseTimeDate(){
  uint32_t timestamp = (NeoGPS::clock_t) fix.dateTime;
  timestamp = timestamp + 946684800;
  return (timestamp/3600/24);
}

double parseTimeSeconds(uint8_t d_hour, uint8_t d_minute, uint8_t d_second){
  uint32_t temp2;
  temp2 = ((d_hour+2)*3600L) + (d_minute * 60) + d_second;
  return temp2;
}

Is there something I'm doing wrong with Arduino Due or perhaps with Arduino Mega? Shouldn't Due show all the data Mega is sending to the bus?