Missing ADC data while saving data block in SD card

Hi jremington

I think it is a more general problem but please find attached the code:

#include <SPI.h>
#include <SD.h>
#define FILE_BASE_NAME "DATA"

const int CS_SD = 10;
const int CS_ADC = 9;
unsigned long i;
const uint8_t BASE_NAME_SIZE = sizeof(FILE_BASE_NAME) - 1;
char fileName[] = FILE_BASE_NAME "00.txt";
SPISettings settings1(1000000, MSBFIRST, SPI_MODE0);

void setup() {
  pinMode(CS_ADC, OUTPUT);
  Serial.begin(9600);
  delay(1000);
  while (!Serial) {
    ; // wait to connect
  }
    
  SPI.begin();
  SPI.beginTransaction(settings1);
  Serial.print("Initializing SD card...");

  // card present
  if (!SD.begin(CS_SD)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
  while (SD.exists(fileName)) {
    if (fileName[BASE_NAME_SIZE + 1] != '9') {
      fileName[BASE_NAME_SIZE + 1]++;
    } else if (fileName[BASE_NAME_SIZE] != '9') {
      fileName[BASE_NAME_SIZE + 1] = '0';
      fileName[BASE_NAME_SIZE]++;
    } else {
      Serial.println("Can't create file name");
      return;
    }
  }
  File dataFile = SD.open(fileName, O_CREAT | O_WRITE); // O_READ | O_WRITE | O_CREAT
  if (!dataFile) {
    Serial.println("open failed");
    return;
  }
  //time = micros();
  Serial.println("Start Recording");
  for (i = 0; i < 40000; i++){
    
    digitalWrite(CS_ADC, HIGH);
    uint16_t adc_val_H = SPI.transfer16(0x0110); // dummy transfer
    //delayMicroseconds(8);

     // Write data
     char cstr[5];
     dataFile.write(itoa(-adc_val_H, cstr, 10)); //itoa (int val, char *s, int radix) 

    digitalWrite(CS_ADC, LOW);
    //delayMicroseconds(1);
  }
  dataFile.close();
  SPI.endTransaction();
  Serial.println("Data Saved");
  Serial.println(fileName);
}

void loop() {
}