Spresenseのマイク録音時に発生するエラーについて


SonyのSpresenseにてアナログマイクを用いて録音を行っています。  
コンパイル環境はArduino IDEで、Windows10です。  
使用しているSDカードはSony製MicroSDHCメモリーカードのSR-32UX2Aで32GBです。

192kHzにて録音をしており、数回は録音が行われSDカードにWavファイルが保存されます。  
そのWavファイルについてもPCにて確認を行いましたが、問題なく録音が行われています。

ただ、数回録音すると、  
シリアルモニターに

[code]

    Attension:module[4][0] attension id[1]/code[6] {objects/media_recorder/audio_recorder_sink.cpp L84}
    
[/code]

と表示が出たのち、毎回エラーとなり、録音が行わません。

電源を再投入すれば、また一つ目のファイルから録音していきます。

録音動作そのものが出来ていないわけではないので、プログラムやセンサーの接続的な問題ではないと思うのですが、何が問題なのでしょうか。

SDカードを変更すると、SDカードによっては起動後の最初からこのメッセージが表示され、  
エラーとなってしまい、録音できないことからSDカードに関連した問題かと考えているのですが、対処法も思いつかずにいます。  
※5種類ぐらいSDカードは試してみましたが、どれも遅かれ早かれ同様のエラーが起きているのが現状です。

プログラムは以下に添付いたします。  
プログラム最終部、FileNo += 1の後のsleep(3)は本来不要なのですが、エラーが起きる確率が少し下がったので追加しています。

[code]

    /*
     *  recorder_wav.ino - Recorder example application for WAV(PCM)
     *  Copyright 2018 Sony Semiconductor Solutions Corporation
     *
     *  This library is free software; you can redistribute it and/or
     *  modify it under the terms of the GNU Lesser General Public
     *  License as published by the Free Software Foundation; either
     *  version 2.1 of the License, or (at your option) any later version.
     *
     *  This library is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     *  Lesser General Public License for more details.
     *
     *  You should have received a copy of the GNU Lesser General Public
     *  License along with this library; if not, write to the Free Software
     *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     */
    
    #include <SDHCI.h>
    #include <Audio.h>
    
    // ファイルのナンバリング用
    #include <string.h>
    #include <SoftwareSerial.h>
    
    #include <arch/board/board.h>
    
    SDClass theSD;
    AudioClass *theAudio;
    
    File myFile;
    
    unsigned int FileNo,loop_no;
    String s_fileNo,filename;
    
    bool ErrEnd = false;
    
    /**
     * @brief Audio attention callback
     *
     * When audio internal error occurc, this function will be called back.
     */
    
    static void audio_attention_cb(const ErrorAttentionParam *atprm)
    {
      puts("Attention!");
    
      if (atprm->error_code >= AS_ATTENTION_CODE_WARNING)
        {
          ErrEnd = true;
       }
    }
    
    /**
     * @brief Setup recording of mp3 stream to file
     *
     * Select input device as microphone <br>
     * Initialize filetype to stereo wav with 48 Kb/s sampling rate <br>
     * Open "Sound.wav" file in write mode
     */
    
    /* Sampling rate
     * Set 16000 or 48000
     */
    
    
    static const uint32_t recoding_sampling_rate = 192000;
    
    
    /* Number of input channels
     * Set either 1, 2, or 4.
     */
    
    static const uint8_t  recoding_cannel_number = 1;
    
    /* Audio bit depth
     * Set 16 or 24
     */
    
    static const uint8_t  recoding_bit_length = 24;
    
    /* Recording time[second] */
    
    static const uint32_t recoding_time = 40;
    
    /* Bytes per second */
    
    static const int32_t recoding_byte_per_second = recoding_sampling_rate *
                                                    recoding_cannel_number *
                                                    recoding_bit_length / 8;
    
    /* Total recording size */
    
    static const int32_t recoding_size = recoding_byte_per_second * recoding_time;
    /* 録音時間の調整に4をかけている．
     */
    void setup()
    {
    
      pinMode(LED0, OUTPUT);
      digitalWrite(LED0, LOW);
    
      FileNo =1;
    
    }
    
    void loop() 
    {
      err_t err;
    
    init_WAV_file:
    loop_no=0;
    filename = "Sound";
    filename += FileNo;
    filename += ".wav";
    puts("OK");
    
     theAudio = AudioClass::getInstance();
    
      theAudio->begin(audio_attention_cb);
    
      puts("initialization Audio Library");
    
      /* Select input device as microphone */
      theAudio->setRenderingClockMode(AS_CLKMODE_HIRES);
      theAudio->setRecorderMode(AS_SETRECDR_STS_INPUTDEVICE_MIC);
    
      /* Search for WAVDEC codec in "/mnt/sd0/BIN" directory */
      theAudio->initRecorder(AS_CODECTYPE_WAV,
                             "/mnt/sd0/BIN",
                             AS_SAMPLINGRATE_192000,
                             AS_BITLENGTH_16,
                             AS_CHANNEL_MONO);
      puts("Init Recorder!");
        /* Open file for data write on SD card */
      myFile = theSD.open(filename, FILE_WRITE);
      /* Verify file open */
    
      if (!myFile)
        {
          printf("File open error\n");
          exit(1);
        }
    
      sleep(5);
      theAudio->writeWavHeader(myFile);
      puts("Write Header!");
    
      theAudio->startRecorder();
      puts("Recording Start!");
      digitalWrite(LED0, HIGH);
    
      /* recording end condition */  
      if_sentence:
        if(theAudio->getRecordingSize() > recoding_size)
        // if(loop_no > 200000000)
          {
            theAudio->stopRecorder();
            sleep(1);
            err = theAudio->readFrames(myFile);
            puts("break!");
            goto exitRecording;
          }
    
      /* Read frames to record in file */
      err = theAudio->readFrames(myFile);
    
      if (err != AUDIOLIB_ECODE_OK)
        {
          printf("File End! =%d\n",err);
          theAudio->stopRecorder();
          goto exitRecording;
        }
    
      if (ErrEnd)
        {
          printf("Error End\n");
          theAudio->stopRecorder();
          goto exitRecording;
        }
       /* This sleep is adjusted by the time to write the audio stream file.
         Please adjust in according with the processing contents
         being processed at the same time by Application.
      */
     // usleep(10000);
      usleep(1000);
      loop_no++;
      goto  if_sentence;
      return;
    
    exitRecording:
      theAudio->closeOutputFile(myFile);
      myFile.close();
    
      theAudio->setReadyMode();
      theAudio->end();
    
      puts("End Recording");
      digitalWrite(LED0, LOW);
      FileNo +=1;
      sleep(3);
      goto init_WAV_file;
    
    }
    
[/code]

どなたか御教授ください。  
よろしくお願いします。




自分は、192kHz/24bit/Monoは、記録できました。

  * Team 8GB class10 
  * 東芝 8GB class10 

のどちらでも可能のようです。

1点変更したのは、フォーマットする際に、アロケーションユニットサイズを64キロバイトにしました。  
これで解決できればと思います。

ちなみに、192kHz/24bit/Stereoは、エラーになってしまうようです。

