why there is a limit of 2GB on microSD card and FAT16? Standard Arduino SD library seems to handle well big cards (I’m using 32GB card) and FAT32 with no problems. Is it a hardware or software restriction?

Update: the statement below is outdated. See later discussions in this thread.

This is a limitation imposed by the tinyFAT library:
tinyFAT is a very compact SD card library, produces code that’s considerably smaller and consumes less RAM than the standard Arduino SD library. I’ve tried the Arduino SD library (you may have noticed that the earlier versions of the source code had a macro define to switch between tinyFAT and Arduino SD), but it consumes too much resources that I fear would eat into the other planned features.