ESP32S3 FSPI & HSPI Help

Hello, I am new to ESP32S3 I am currently having issues using both HSPI and FSPI at the same time for my board. I am trying to use both SPI busses simultaneously I am able to get one working but not the other. Any advice would be much appreciated I am currently using this as a reference.

( ESP32 SPI Communication: Pins, Multiple SPI, Peripherals (Arduino) | Random Nerd Tutorials)

HSPI Code

#define ADF_MOSI   2   // Master Out Slave In
#define ADF_MISO   12  // Master In Slave Out
#define ADF_SCLK   4   // Serial Clock
#define ADF_CS     13  // Chip Select
#define ADF_LE     3   // Latch Enable
#define ADF_CE     1   // Chip Enable
#define ADF_LD     5   // Lock Detect

// Timing Constants
#define LE_PULSE_WIDTH 1  // 1µs LE pulse

SPIClass adf_spi(HSPI);  // Use HSPI for ADF4351

// ADF4351 Register Configuration
const uint32_t ADF4351_Registers[6] = {
  0x00400000,  // Register 0
  0x8008011,   // Register 1
  0x004E42,    // Register 2 (VCO calibration)
  0x0004B3,    // Register 3
  0x0DC80FC,   // Register 4
  0x0580005    // Register 5
};

void initializeADF4351() {
  // Configure SPI
  adf_spi.begin(ADF_SCLK, ADF_MISO, ADF_MOSI, ADF_CS);
  pinMode(ADF_CS, OUTPUT);
  digitalWrite(ADF_CS, HIGH);  // Start inactive
  
  // Configure control pins
  pinMode(ADF_LE, OUTPUT);
  pinMode(ADF_CE, OUTPUT);
  digitalWrite(ADF_LE, HIGH);
  digitalWrite(ADF_CE, LOW);   // Enable chip
  
  // Configure Lock Detect
  pinMode(ADF_LD, INPUT);
  
  Serial.println("ADF4351 Initialized");
}

void writeADFRegister(uint32_t regValue) {
  // Debug output
  Serial.printf("Writing Register: 0x%08X\n", regValue);
  
  // Split into bytes (MSB first)
  uint8_t bytes[4];
  bytes[0] = (regValue >> 24) & 0xFF;
  bytes[1] = (regValue >> 16) & 0xFF;
  bytes[2] = (regValue >> 8)  & 0xFF;
  bytes[3] = regValue & 0xFF;
  
  // SPI Transaction
  adf_spi.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  digitalWrite(ADF_CS, LOW);
  
  for (int i = 0; i < 4; i++) {
    adf_spi.transfer(bytes[i]);
    Serial.printf("  Byte %d: 0x%02X\n", i, bytes[i]);
    delayMicroseconds(5);  // Small delay between bytes
  }
  
  digitalWrite(ADF_CS, HIGH);
  adf_spi.endTransaction();
  
  // Latch data
  digitalWrite(ADF_LE, LOW);
  delayMicroseconds(LE_PULSE_WIDTH);
  digitalWrite(ADF_LE, HIGH);
  Serial.println("  Data Latched");
}

void programAllRegisters() {
  Serial.println("\nProgramming ADF4351 Registers:");
  for (int i = 5; i >= 0; i--) {  // Reverse order (5->0)
    writeADFRegister(ADF4351_Registers[i]);
    delay(10);  // Short delay between registers
  }
}

void setup() {
  Serial.begin(115200);
  while (!Serial);  // Wait for Serial Monitor
  
  initializeADF4351();
  programAllRegisters();
  
  Serial.println("ADF4351 System Ready");
}

void loop() {
  // Check PLL lock state
  bool isLocked = digitalRead(ADF_LD);
  
  // Reprogram registers if unlocked
  if (!isLocked) {
    Serial.println("PLL Unlocked - Reprogramming");
    programAllRegisters();
  }
  
  delay(1000);
}

FSPI Code

#include "Display_ST7789.h"

SPIClass LCDspi(FSPI);
#define SPI_WRITE(_dat)         LCDspi.transfer(_dat)
#define SPI_WRITE_Word(_dat)    LCDspi.transfer16(_dat)
void SPI_Init()
{
  LCDspi.begin(EXAMPLE_PIN_NUM_SCLK,EXAMPLE_PIN_NUM_MISO,EXAMPLE_PIN_NUM_MOSI); 
}

void LCD_WriteCommand(uint8_t Cmd)  
{ 
  LCDspi.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);  
  digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, LOW); 
  SPI_WRITE(Cmd);
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);  
  LCDspi.endTransaction();
}
void LCD_WriteData(uint8_t Data) 
{ 
  LCDspi.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);  
  digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);  
  SPI_WRITE(Data);  
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);  
  LCDspi.endTransaction();
}    
void LCD_WriteData_Word(uint16_t Data)
{
  LCDspi.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);  
  digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH); 
  SPI_WRITE_Word(Data);
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);  
  LCDspi.endTransaction();
}   
void LCD_WriteData_nbyte(uint8_t* SetData,uint8_t* ReadData,uint32_t Size) 
{ 
  LCDspi.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);  
  digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);  
  LCDspi.transferBytes(SetData, ReadData, Size);
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);  
  LCDspi.endTransaction();
} 

void LCD_Reset(void)
{
  digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);       
  delay(50);
  digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, LOW); 
  delay(50);
  digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, HIGH); 
  delay(50);
}
void LCD_Init(void)
{
  pinMode(EXAMPLE_PIN_NUM_LCD_CS, OUTPUT);
  pinMode(EXAMPLE_PIN_NUM_LCD_DC, OUTPUT);
  pinMode(EXAMPLE_PIN_NUM_LCD_RST, OUTPUT); 
  Backlight_Init();
  SPI_Init();

  LCD_Reset();
  //************* Start Initial Sequence **********// 
  LCD_WriteCommand(0x11);
  delay(120);
  LCD_WriteCommand(0x36);
  if (HORIZONTAL)
      LCD_WriteData(0x00);
  else
      LCD_WriteData(0x70);

  LCD_WriteCommand(0x3A);
  LCD_WriteData(0x05);

  LCD_WriteCommand(0xB0);
  LCD_WriteData(0x00);
  LCD_WriteData(0xE8);
  
  LCD_WriteCommand(0xB2);
  LCD_WriteData(0x0C);
  LCD_WriteData(0x0C);
  LCD_WriteData(0x00);
  LCD_WriteData(0x33);
  LCD_WriteData(0x33);

  LCD_WriteCommand(0xB7);
  LCD_WriteData(0x35);

  LCD_WriteCommand(0xBB);
  LCD_WriteData(0x35);

  LCD_WriteCommand(0xC0);
  LCD_WriteData(0x2C);

  LCD_WriteCommand(0xC2);
  LCD_WriteData(0x01);

  LCD_WriteCommand(0xC3);
  LCD_WriteData(0x13);

  LCD_WriteCommand(0xC4);
  LCD_WriteData(0x20);

  LCD_WriteCommand(0xC6);
  LCD_WriteData(0x0F);

  LCD_WriteCommand(0xD0);
  LCD_WriteData(0xA4);
  LCD_WriteData(0xA1);

  LCD_WriteCommand(0xD6);
  LCD_WriteData(0xA1);

  LCD_WriteCommand(0xE0);
  LCD_WriteData(0xF0);
  LCD_WriteData(0x00);
  LCD_WriteData(0x04);
  LCD_WriteData(0x04);
  LCD_WriteData(0x04);
  LCD_WriteData(0x05);
  LCD_WriteData(0x29);
  LCD_WriteData(0x33);
  LCD_WriteData(0x3E);
  LCD_WriteData(0x38);
  LCD_WriteData(0x12);
  LCD_WriteData(0x12);
  LCD_WriteData(0x28);
  LCD_WriteData(0x30);

  LCD_WriteCommand(0xE1);
  LCD_WriteData(0xF0);
  LCD_WriteData(0x07);
  LCD_WriteData(0x0A);
  LCD_WriteData(0x0D);
  LCD_WriteData(0x0B);
  LCD_WriteData(0x07);
  LCD_WriteData(0x28);
  LCD_WriteData(0x33);
  LCD_WriteData(0x3E);
  LCD_WriteData(0x36);
  LCD_WriteData(0x14);
  LCD_WriteData(0x14);
  LCD_WriteData(0x29);
  LCD_WriteData(0x32);

  LCD_WriteCommand(0x21);

  LCD_WriteCommand(0x11);
  delay(120);
  LCD_WriteCommand(0x29); 
}
/******************************************************************************
function: Set the cursor position
parameter :
    Xstart:   Start uint16_t x coordinate
    Ystart:   Start uint16_t y coordinate
    Xend  :   End uint16_t coordinates
    Yend  :   End uint16_t coordinatesen
******************************************************************************/
void LCD_SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t  Yend)
{ 
  if (HORIZONTAL) {
    // set the X coordinates
    LCD_WriteCommand(0x2A);
    LCD_WriteData(Xstart >> 8);
    LCD_WriteData(Xstart + Offset_X);
    LCD_WriteData(Xend >> 8);
    LCD_WriteData(Xend + Offset_X);
    
    // set the Y coordinates
    LCD_WriteCommand(0x2B);
    LCD_WriteData(Ystart >> 8);
    LCD_WriteData(Ystart + Offset_Y);
    LCD_WriteData(Yend >> 8);
    LCD_WriteData(Yend + Offset_Y);
  }
  else {
    // set the X coordinates
    LCD_WriteCommand(0x2A);
    LCD_WriteData(Ystart >> 8);
    LCD_WriteData(Ystart + Offset_Y);
    LCD_WriteData(Yend >> 8);
    LCD_WriteData(Yend + Offset_Y);
    // set the Y coordinates
    LCD_WriteCommand(0x2B);
    LCD_WriteData(Xstart >> 8);
    LCD_WriteData(Xstart + Offset_X);
    LCD_WriteData(Xend >> 8);
    LCD_WriteData(Xend + Offset_X);
  }
  LCD_WriteCommand(0x2C);
}
/******************************************************************************
function: Refresh the image in an area
parameter :
    Xstart:   Start uint16_t x coordinate
    Ystart:   Start uint16_t y coordinate
    Xend  :   End uint16_t coordinates
    Yend  :   End uint16_t coordinates
    color :   Set the color
******************************************************************************/
void LCD_addWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend,uint16_t* color)
{             
  uint16_t Show_Width = Xend - Xstart + 1;
  uint16_t Show_Height = Yend - Ystart + 1;
  uint32_t numBytes = Show_Width * Show_Height * sizeof(uint16_t);
  uint8_t Read_D[numBytes];
  LCD_SetCursor(Xstart, Ystart, Xend, Yend);
  LCD_WriteData_nbyte((uint8_t*)color, Read_D, numBytes);        
}
// backlight
void Backlight_Init(void)
{
  ledcAttach(EXAMPLE_PIN_NUM_BK_LIGHT, Frequency, Resolution);    
  ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, 100);                      
}

void Set_Backlight(uint8_t Light)                        //
{

  if(Light > 100 || Light < 0)
    printf("Set Backlight parameters in the range of 0 to 100 \r\n");
  else{
    uint32_t Backlight = Light*10;
    ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, Backlight);
  }
}

The regular Arduino SPI object is pre-defined on FSPI for ESP32S3. Just use that rather than instantiating another object on FSPI.

the FSPI Code is default from the drivers

I am currently having an issue where I am getting the correct spi signals on the pins using an LA. But I am getting a static screen what could be the cause of this I was thinking that by setting the ADF on HSPI and the LCD on FSPI that there would not be any conflicts...