Any way to use DMA to transfer data to SD Card in ESP8266
So, sorry for late response, i figured it out. Because it took lots of time for me and it might be a prevalent issue, i think it worth to contribute my experience for further similar issues.
As mentioned buffering can do the job, here are some constraints that should be satisfied to have right buffering mechanism;

Writing to SD card SHOULD NOT be handled in the Timer ISR, but store ADC data into a buffer, aka int[] which is normally kept in SRAM (Your Timer ISR should be as short and fast as needed)

Handle reading from buffer to SD outside of Timer ISR in, for example in loop().

priority of ISR should be more than loop(), and it is so by default.

It's a good practice to divide your buffer into chunk of 512 or 1024. for example 2 chunks of 1024 Bytes making your buffer. you check for &quot;filled&quot; flag to be set in the loop() and when this happens call SDFile.write(..) for corresponding filled chunk and then reset the flag.


By conforming to these constraints you enjoy these benefits:

you can be sure that no ADC on time sampling missed because of sluggish SD write process.

by buffering and pilling data and then storing, you have chance to avoid byte wise write to SD, which is  really inefficient. and instead handle write in chunks of 512 or 1024 bytes. which is equal to sector size of SDs. so you have faster SD write process too.


This way you can easily handle voice recording up to 16 ksps even without using DMA.
I have added the code to my github, in this repository; https://github.com/A-R-S-D/WAVRecorder