Read/ Write on MicroSD

I have a problems on J120 / TX1 to write on SD/USB (exfat format):

  • 4MB/S in MicroUSB slot. And write 4 MB/s on USB2.
  • 2.5MB/S on MicroSD Samsung EVO 256Go , U3 HSC I and F3 tools .

In this link , we read answers :
https://devtalk.nvidia.com/default/topic/949550/jetson-tx1/sd-card-limitations-/post/4992357/#4992357

I think we can write/read for 10MB/s with HSC I , U1.

i can write 2 x FHD camera with 18Mbits/s and one 4K 60Mbit/s .

Have see this features. Is this a normal operating flow?

@Syd
Sorry, not really understand your question. Could you have more detail information.

i try to write on MicroSD ( slot) , but few times that write to 2.5 MBytes/s .

Question is know if it work to 10MByes/S like UHS I U1 or not ?

Hi Syd,

List our internal test result for you reference:

MicroSD Card-DD-Read (512K)(MBps▲)    83.64
MicroSD Card-DD-Write (512K)(MBps▲)   68.56

Test MicroSD Card: Sandisk 16GB Micro SDHC UHS-I card

Not sure if this one is related. Please also take a look.
https://devtalk.nvidia.com/default/topic/1031139

I have testing MicroSD with Ext4 format and Fuse (exfat) …
with ext4 , writting into 6MB/s on TX1 and ~29MB/s on TX2.

may be an issue with SDHC drivers and Fuse format.

Have you checked this node “/sys/kernel/debug/mmc2/ios”? Is the speed class correct?

Testing on new TX1/ R24.2.3 and Exfat MicroSD.

without MicroSD :

ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/ios
clock:		0 Hz
vdd:		0 (invalid)
bus mode:	1 (open drain)
chip select:	0 (don't care)
power mode:	0 (off)
bus width:	0 (1 bits)
timing spec:	0 (legacy)
signal voltage:	0 (3.30 V)
ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/speed
0

I pluggs :

  • Scandisk 64GB , U3 1 :
ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/ios
clock:		208000000 Hz
vdd:		17 (2.9 ~ 3.0 V)
bus mode:	2 (push-pull)
chip select:	0 (don't care)
power mode:	2 (on)
bus width:	2 (4 bits)
timing spec:	6 (sd uhs SDR104)
signal voltage:	0 (1.80 V)
ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/speed
3
ubuntu@tegra-ubuntu:~$ f3write --end-at=1 /media/ubuntu/09EA-54C1/
Removing old file 1.h2w ...
Free space: 29.15 GB
Creating file 1.h2w ... 13.04% -- 5.97 MB/s -- 2:29
  • Samsung Evo 256GB , U3 I
ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/ios
clock:		208000000 Hz
vdd:		17 (2.9 ~ 3.0 V)
bus mode:	2 (push-pull)
chip select:	0 (don't care)
power mode:	2 (on)
bus width:	2 (4 bits)
timing spec:	6 (sd uhs SDR104)
signal voltage:	0 (1.80 V)
ubuntu@tegra-ubuntu:~$ sudo cat /sys/kernel/debug/mmc2/speed
3
ubuntu@tegra-ubuntu:~$ f3write --end-at=1 /media/ubuntu/718B-169F/
Removing old file 1.h2w ...
Free space: 120.84 GB
Creating file 1.h2w ... 15.62% -- 8.00 MB/s -- 1:48

Docs for Samsung card :
https://www.samsung.com/ie/memory-storage/evo-plus-microsd-card-with-sd-adapter-100/MB-MC256GAEU/

So, how Samsung can annonce a Micro SDXC UHS-I with write speed up to 90MB/s ?

there are only 8.00 MB/s on TX1/r24.2.3 … and less on TX1 r24.2.1.

I didn’t know if there are a “/sys/kernel/debug/mmc2/ios” issue. i used simple rootfs for TX1 and vanilla r24.2.3Linux_for_Tegra .

Syd,

How about trying to write this sd card on host pc first? If your card is able to r/w on desired speed on host, the issue would be on tegra and we may need further check.

Good idea !

i’m testing with Samsung 256 GB EVO PLUS MicroSD card on ubuntu 16.04 and I7.

Format Exfat (fuse) :

internal SD card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/718B-169F/
Removing old file 1.h2w ...
Free space: 120.09 GB
Creating file 1.h2w ... OK!                        
Free space: 119.09 GB
Average writing speed: 3.29 MB/s

USB2 MicroSD Card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/3489-57FB/
Free space: 238.46 GB
Creating file 1.h2w ... OK!                        
Free space: 237.46 GB
Average writing speed: 5.57 MB/s

USB 3 MicroSD Card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/718B-169F/
Removing old file 1.h2w ...
Free space: 120.09 GB
Creating file 1.h2w ... OK!                        
Free space: 119.09 GB
Average writing speed: 7.87 MB/s

Format EXT4 :

internal SD card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/bc91b752-4672-4c83-b632-5c7d8fa4692a/
Free space: 234.54 GB
Creating file 1.h2w ... OK!                        
Free space: 233.54 GB
Average writing speed: 7.50 MB/s

USB2 MicroSD Card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/bc91b752-4672-4c83-b632-5c7d8fa4692a/
Free space: 234.54 GB
Creating file 1.h2w ... OK!                         
Free space: 233.54 GB
Average writing speed: 14.83 MB/s

USB3 MicroSD Card reader

syd@prime:~/usr/workspaces/workspace_projects$ f3write --end-at=1 /media/syd/bc91b752-4672-4c83-b632-5c7d8fa4692a/
Free space: 234.54 GB
Creating file 1.h2w ... OK!                        
Free space: 233.54 GB
Average writing speed: 30.31 MB/s

thus , there is a loss of writing speed with the MicroSD in exfat type.
I think this loss is generalized on the USB keys and SSD sous linux.

In the future, I will privilege the use of the ext4 type in order to optimize the 4K captures.

Of course, with Average writing speed: 30.31 MB/s, we are far from the capabilities announced by Samsung. :-)

I back with strong issu

I’m testing with f3write … but, i’m see that we must rebuilf f3write on TX(1).

After compile , tests are than better old tests.

We can write files or records 50Go video (40Mbits/s) in ExFat with Gstreamer ( with shell and in gst api ) with USB2 port.

But, when we used av_write_packet and av_interleaved_write_frame from the ffmpeg api (for h264/mp4).

we testing the time to write : more than 100ms to write a h264 buffer ( frome NvVideoEncoder) on 10 fps video . so, the application have more buffers than this can write .
Many times, there are more 5 second to write (av_interleaved_write_frame) and the process have status “PROCESS STATE CODES D” (uninterruptible sleep) like that’s wait to write in usb key …

This problems is on 1To or 2To usb key. that’s work on USB 16Go (from quality) and MicroSD ( on reader ).

How can i optimize Exfat/fuse writing ? Why that’s work on Gstreamer ?

Please file a new topic for it. Thanks.

Hello,

Thank you for your subgestion.

i’m testing to write with some methods :

  • std::ofstream write well 40Mbits/s in h264 file (without muxing)
  • av_write_frame has to poor performance in h264/mp4 muxing.

With Minimp4 sample , i build a “h264 to mp4” function ( source https://github.com/lieff/minimp4 ).

For the process status :“PROCESS STATE CODES D” is good between my application and /sbin/mount.exfat process.

We keep minimp4 like better method.
I will not open new topic between library and limited ressource on usb2.