can2.0B EFF help

has anyone came across can2.0b eff frames. trying to use canutils to dump eff frames.
ive been into mopar stuff for a bit and this is the first time ive come across this, its on a 2013 dodge dart.
ive been able to sniff the ECU on the bench of my 14 charger, and various other dodge models but this one is the first ive seen with Extended frame format.
ive tested with an arduino and mpc2515 library and have been able to receive the extended frames. im trying my hand at wrting a skectch for the carloop but im not getting any data or maybe am not coding it right lol iv’e seen a sample on here and just want to be able to use canutils first to determine what id’s i need to look at. any help much appreciated. the crazy part is i can connect a cheap elm327 and request vin and it works. but if i connect the carloop (socketcan sketch) i dont see any data flowing by which leads me to belive i need to setup EFF with carloop receive filter.

#include "OBDMessage.h"

#include <carloop.h>
#include <application.h>
Carloop<CarloopRevision2> carloop;

void setup() {
  CANChannel can(CAN_D1_D2);
  //can.addFilter(0, 0, CAN_FILTER_EXTENDED);
  can.begin(500000 , CAN_FILTER_EXTENDED);


void loop() {
CANMessage message;
if (carloop.can().receive(message)) {
 Serial.println("message data: ");


void tester() {

CANMessage message;
  OBDMessage obd;
  unsigned long start = millis();
  unsigned long timeout = 200; // ms
  while(millis() - start < timeout) {
    if (carloop.can().receive(message)) {
if ( >= 0x0814F001 ){
       // Serial.println("Got reply from ECU");

        // Add the data to our OBD message
        bool needsFlowControl = obd.addMessageData(message);

        if (needsFlowControl) {
          // Sending flow control
          CANMessage flowControl = obd.flowControlMessage();
         // Serial.println("Sent flow control");

        // Use the data when the message is complete
        if (obd.complete()) {
          String vin = "";
          // VIN is 17 character and can be left-padded with zeros
          for (int i = obd.size() - 200; i < obd.size(); i++) {
            vin += String((char)[i]);
          if (Particle.connected()) {
            Particle.publish("BCC", vin, PRIVATE);


  Serial.println("NO DATA RECEVIED!!!");
  if (Particle.connected()) {
    Particle.publish("NO DATA RECEVIED!!!", PRIVATE);

@dubb45, Can you link or share that arduino code that does work? Maybe comparing the code may provide some clues.

I have not tried anything with EFF yet.

Another possibility, which I do not think is likely, is that the system firmware of the Photon/Electron/RedbearDuo would need to be updated to support EFF…

yes heres the arduino code sample from the examples. i didn’t touch anything and its pulling data as is.

// CAN Receive Example

#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char msgString[128];                        // Array to store serial string

#define CAN0_INT 2                              // Set INT to pin 2
MCP_CAN CAN0(10);                               // Set CS to pin 10

void setup()
  // Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
  if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
    Serial.println("MCP2515 Initialized Successfully!");
    Serial.println("Error Initializing MCP2515...");
  CAN0.setMode(MCP_NORMAL);                     // Set operation mode to normal so the MCP2515 sends acks to received data.

  pinMode(CAN0_INT, INPUT);                            // Configuring pin for /INT input
  Serial.println("MCP2515 Library Receive Example...");

void loop()
  if(!digitalRead(CAN0_INT))                         // If CAN0_INT pin is low, read receive buffer
    CAN0.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
    if((rxId & 0x80000000) == 0x80000000)     // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);
    if((rxId & 0x40000000) == 0x40000000){    // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
    } else {
      for(byte i = 0; i<len; i++){
        sprintf(msgString, " 0x%.2X", rxBuf[i]);


and that would explain why i cant see any data and my autel maxisys can see it fine. i know its ISO 15765-4 CAN (29 bit ID, 500 kbit/s) i can even use a cheap bluetooth elm327 to comminicate and pull info.

i guess i passed this up on the particle docs


Filter which messages will be added to the receive queue.
can.addFilter(id, mask);
can.addFilter(id, mask, type);By default all messages are received. When filters are added, only messages matching the filters will be received. Others will be discarded.Parameters:
id: the id pattern to match
mask: the mask pattern to match
type (optional): CAN_FILTER_STANDARD (default) or CAN_FILTER_EXTENDED
Returns: boolean true if the filter was added, false if there are too many filters (14 filters max).

im going to try and see if anything comes up using the “extended” filter.