IS31FL3742 30x6 LED Driver I2C Comunication and Register issues

So I am trying to use 2 of these LED matrix driver chips to control 16 14-Segment LED displays.
I am Using the Arduino Due for the controller in my project.
My devices are on the second I2C bus so I use Wire1. in place of Wire when working with the chips.
I have been able to do the I2C scan and I do get the 2 device address of 0X30 and 0X32 back.
So I know they are being seen on the I2C Bus.

I have yet to be able to do anything beyond that.
I am trying to just light up the first segment of on of the displays.
I have my code below.

I am thinking I am having a problem writing or setting the registers, as this looks more complex than what I have worked on in the past.
I am thinking that I need to:

start the transmission
Send the Unlock register Address
Send the Unlock Code
End the Transmission

start the transmission
Send the command register Address
Send the function register Address
Send the Configuration register Address
Send the data Byte
End the transmission

Here is what I have for code.

#include <Wire.h>

void setup()
{
  SerialUSB.begin(115200);
  While(!SerialUSB);
  Wire1.begin(); // join i2c bus (address optional for master)
  Wire1.setClock(400000);
  pinMode(28, OUTPUT);      //Theis is the hardware Shutdown pin (go high to enable the chip
  pinMode(30, OUTPUT);      //Theis is the hardware Shutdown pin (go high to enable the chip
  digitalWrite(28, HIGH);   // turn the Chip on
  digitalWrite(30, HIGH);   // turn the Chip on

  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();        // stop transmitting

  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x04));            // Eneter Function Register, Now Configure
  Wire1.write(byte(0x00));            // Eneter Configuration Register
  Wire1.write(byte(B01000001));            // Send Configuation
  Wire1.endTransmission();     // stop transmitting

  // the registers lock after each write so I need to unlock before every write (i think)  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x04));            // Eneter Function Register, Now Configure
  Wire1.write(byte(0x01));            // Eneter Global Current Register
  Wire1.write(byte(B11111111));            // Send Configuation
  Wire1.endTransmission();     // stop transmitting

    
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);     // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x02));            // Eneter LED Scaling
  Wire1.write(byte(0x00));            // Eneter LED1
  Wire1.write(byte(B10000001));            // Send Configuation
  Wire1.endTransmission();     // stop transmitting

    
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x01));            // Eneter LED PWM
  Wire1.write(byte(0x00));            // Eneter LED1
  Wire1.write(byte(B10000001));            // Send Configuation
  Wire1.endTransmission();     // stop transmitting
}


void loop()
{

}

The other idea I had to test the communication was to try and read the product ID off the chip.
But it is not just a request from the chip.
I need to send the register address that I want to receive first.

IS31FL3742 Data Sheet:

Here is the I2C scanner code that is working to give the addresses.

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

Solved

So the Command Register is used to change what Response Register you are going to use.

So when the Command Register is set to 00h then a call to register address 00h will allow the PWM to be set for LED1

when the Command Register is set to 02h then a call to register address 00h will allow the Current to be set for LED1

when the Command Register is set to 04h then a call to register address 00h will allow the Configuration Register to be set.

Here is the code to turn on the first led.

#include <Wire.h>

void setup()
{
  SerialUSB.begin(115200);
  while(!SerialUSB);
  Wire1.begin(); // join i2c bus (address optional for master)
  Wire1.setClock(400000);
  pinMode(28, OUTPUT);      //Theis is the hardware Shutdown pin (go high to enable the chip
  pinMode(30, OUTPUT);      //Theis is the hardware Shutdown pin (go high to enable the chip
  digitalWrite(28, HIGH);   // turn the Chip on
  digitalWrite(30, HIGH);   // turn the Chip on
  
  SerialUSB.print("Start  ");         // print the character
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();        // stop transmitting

  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x04));            // Eneter Function Register, Now Configure
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0x00));            // Eneter Command Register
  Wire1.write(byte(B01000001));            // Send Configuation Register
  Wire1.write(byte(B11111111));            // Send Configuation Global Current MAX
  Wire1.write(byte(B01110111));            // Send Configuation Pull UP/Down Resistors 32K
  Wire1.endTransmission();     // stop transmitting

    
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);     // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x02));            // Eneter LED Scaling
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);     // device address is specified in datasheet
  Wire1.write(byte(0x00));            // Eneter LED1
  Wire1.write(byte(B11111111));       // Send Configuation
  Wire1.endTransmission();     // stop transmitting

    
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFE));            // Unlock Command Register
  Wire1.write(byte(B11000101));       // Unlock
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0xFD));            // Eneter Command Register
  Wire1.write(byte(0x00));            // Eneter LED PWM
  Wire1.endTransmission();     // stop transmitting
  
  Wire1.beginTransmission(0x30);      // device address is specified in datasheet
  Wire1.write(byte(0x00));            // Eneter LED1
  Wire1.write(byte(B11111111));       // Send Configuation
  Wire1.endTransmission();     // stop transmitting
}


void loop()
{

}