Revert Jaguar to old firmware (CAN not working)

Hi,
We’ve been trying to get a Black Jaguar to work with CAN and updated it to the latest firmware. It connects to the cRIO (and BDC-COMM), however, it does not actually send power to the motor, despite calling setX(1). Additionlly, we tried running it with PWM to see if maybe it was the Jaguar; the PWM worked with the other Jaguars, but not with the one with the latest firmware. We’re wondering if we’ve bricked the Jaguar or something, and so we wanted to try updating a second jaguar to see if that worked. However, if we did brick the first one, we don’t want to brick a second one.

So, does anyone have the link to where we could find the old firmware, in case it doesn’t work and we need to revert to the older firmware to make it work at all. Additionally, if anyone knows what the problem with the first Jaguar might be, that would be even better. Thanks in advance.

We’ve tried two Jaguars now; both are compiling fine in code and are being sent values, but they aren’t passing any power to the motors.

Code for the DriveTrain class if anyone has any idea what the problem might be.

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package edu.wpi.first.wpilibj.templates.subsystems;

import edu.wpi.first.wpilibj.CANJaguar;
import edu.wpi.first.wpilibj.can.CANTimeoutException;
import edu.wpi.first.wpilibj.command.Subsystem;
import edu.wpi.first.wpilibj.templates.RobotMap;
import edu.wpi.first.wpilibj.templates.commands.Drive;

/**
*

  • @author Omega
    */
    public class DriveTrain extends Subsystem {
    // Put methods for controlling this subsystem
    // here. Call these from Commands.
    CANJaguar flj;
    CANJaguar frj;
    CANJaguar rlj;
    CANJaguar rrj;

    public void initDefaultCommand() {
    //Set the default command for a subsystem here.
    //setDefaultCommand(new MySpecialCommand());
    setDefaultCommand(new Drive());
    }

    public void drive(double ly, double ry, double lx, double rx)
    {
    //flj.setX(ly + lx);
    //frj.setX(ry - rx);b
    //rlj.setX(ly - lx);
    try{
    System.out.println("drive is executing " + ry);
    rrj.setX(ry);// + rx);
    }catch(Exception e){e.printStackTrace();}
    }

    public DriveTrain() //throws CANTimeoutException
    {

     try{
     //flj = new CANJaguar(RobotMap.flm, CANJaguar.ControlMode.kSpeed);
     //frj = new CANJaguar(RobotMap.frm, CANJaguar.ControlMode.kSpeed);
     //rlj =` new CANJaguar(RobotMap.rlm, CANJaguar.ControlMode.kSpeed);
     rrj = new CANJaguar(RobotMap.rlm, CANJaguar.ControlMode.kSpeed);
     
     //flj.configEncoderCodesPerRev(200);
     //frj.configEncoderCodesPerRev(200);
     //rlj.configEncoderCodesPerRev(200);
     rrj.configEncoderCodesPerRev(200);
     
     //flj.setSpeedReference(CANJaguar.SpeedReference.kNone);
     //frj.setSpeedReference(CANJaguar.SpeedReference.kNone);
     //rlj.setSpeedReference(CANJaguar.SpeedReference.kNone);
     rrj.setSpeedReference(CANJaguar.SpeedReference.kNone);
     
     //flj.setPID(0.4, 0, 1);
     //frj.setPID(0.4, 0, 1);
     //rlj.setPID(0.4, 0, 1);
     rrj.setPID(0.4, 0, 1);
     
     //flj.enableControl();
     //frj.enableControl();
     //rlj.enableControl();
     rrj.enableControl();
     }catch(Exception e){e.printStackTrace();}
    

    }
    }

Stuff is commented out for simplification (we’re just trying to get one working first).

I am not familiar with the C++ framework, as my team uses LabView, but I’m fairly certain that the Jaguar firmware has little to do with your issue, assuming the latest version you refer to is the FIRST-specific v107. The four digit firmware versions will not work, as they lack the command acknowledgement and FIRST token handshake required for the safety system.

CAN timeouts have to do with not receiving acknowledgement from the Jaguars. The source of the problem is usually a physical break in the CAN bus, or the loss of termination. Sometimes the culprit is in software, like loops taking longer than 100ms to execute. How often are you calling this command?

I assume that you have assigned the jaguars their own ID’s, and that these are consistent with your setup code. If you have two assigned the same number, they may cause issues with collisions on the bus.

It may help to know what experience your team has with CAN, and what physical method you are using to send the CAN commands (2CAN or serial jaguar bridge). Sometimes issues like improperly made cables cause issues.

I’m pretty sure you can’t use speed control without setting a speed reference. If you just want open loop, you should be setting it to PercentVBus.