My IPCam is crashing

Just reporting an issue I got on my IPCamera:

[  113.580000] Unhandled fault: external abort on non-linefetch (0x808) at 0xfc000004
[  113.590000] Internal error: : 808 [#1] PREEMPT
[  113.590000] Modules linked in: rt3070sta sslsd sslotg ssludc snd_soc_magus snd_soc_magus_pcm snd_soc_o
[  113.590000] CPU: 0    Not tainted  (2.6.24ssl #200)
[  113.590000] pc : []    lr : []    psr: a0000013
[  113.590000] sp : c0ed7b34  ip : 00000ba4  fp : c0ed7b44
[  113.590000] r10: c0ed7ed0  r9 : c0ed6000  r8 : c0ed6000
[  113.590000] r7 : c0c52000  r6 : 00000000  r5 : 00000000  r4 : c0c52fe4
[  113.590000] r3 : fc000000  r2 : 0000c0e6  r1 : c0c523dc  r0 : 00000002
[  113.590000] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[  113.590000] Control: 0005317f  Table: 51aac000  DAC: 00000015
[  113.590000] Process encoder (pid: 299, stack limit = 0xc0ed6258)
[  113.590000] Stack: (0xc0ed7b34 to 0xc0ed8000)
[  113.590000] 7b20:                                              782c7ee0 c0ed7b58 c0ed7b48 
[  113.590000] 7b40: c0147090 bf005a24 bece8d00 c0ed7b68 c0ed7b5c bf005cbc c014707c c0ed7b8c 
[  113.590000] 7b60: c0ed7b6c c01dd9d8 bf005cb0 0000000a 00000000 c0ed7ed0 bece8d00 bece8d08 
[  113.590000] 7b80: c0ed7ea0 c0ed7b90 c01de194 c01dd9ac c0892140 00000002 c0ed7bb8 c0ed7ba8 
[  113.590000] 7ba0: c0039658 c0039530 c0892140 c0ed7bcc c0ed7bbc c0039fbc c003963c c02dc908 
[  113.590000] 7bc0: 00000003 c02dc908 0000000a 00000000 00000000 00000000 c0ed7c08 c0ed7be8 
[  113.590000] 7be0: c003a678 c003a48c 80000093 00000001 00000001 c095fca4 c095fc98 c0ed7c18 
[  113.590000] 7c00: c0ed7c0c c003c210 c003a5f8 c02cdab0 00000000 00000000 c02cda8c c02cda8c 
[  113.590000] 7c20: c0ed7c58 c0ed7c30 c006bcd8 c006b04c c02cdab0 00000000 00000001 00000000 
[  113.590000] 7c40: c02cda8c 001200d2 00000000 c0ed7c80 c0ed7c5c c006bf28 c003a48c c02cda8c 
[  113.590000] 7c60: c02cdaa4 60000013 c02cda8c c0f6b9b0 00000000 c0ed7cc4 c0ed7c84 c006c1ac 
[  113.590000] 7c80: c003a48c 00000000 00000000 00000000 00000000 c02ce2a4 00000044 c02ce2a4 
[  113.590000] 7ca0: 001200d2 c02ce2a0 00000000 c0f6b9b0 bece8000 c03a3c00 c0ed7d04 c0ed7cc8 
[  113.590000] 7cc0: c006cd5c c006bf54 c02ce2a4 001200d2 c03048c0 00000010 c0d866c8 00000000 
[  113.590000] 7ce0: bece8000 c0ed7d04 c0ed7d04 bece8000 512c605f 512c60ff c0ed7d44 c0ed7d08 
[  113.590000] 7d00: c0076ad0 c003a48c c0e58ba0 00000000 00000000 00000008 c10115e0 c0eaefb0 
[  113.590000] 7d20: c0eac000 515030df c0f6b9b0 bece8000 c10115e0 000003a0 c0ed7d90 c0ed7d48 
[  113.590000] 7d40: c0077a58 c0076550 c0eaefb0 c1011620 515030df c0ed7d7c c0ed6000 c0ed7d80 
[  113.590000] 7d60: c0ed7d6c c0110124 c003a48c 00000008 c03a3c00 c0ed7d90 c0ed7d84 c0059200 
[  113.590000] 7d80: c0110074 c0ed7dcc c0ed7d94 c0026904 c0059200 c02dc908 00000001 00000800 
[  113.590000] 7da0: 0000081f ffffffff c02c41d8 0000081f c0ed7e78 bece8a30 a0000013 40311000 
[  113.590000] 7dc0: c0ed7e74 c0ed7dd0 c002021c c00267a8 c0c63df4 c0ed7df0 c0ed7df8 c0330e00 
[  113.590000] 7de0: c0ed7ee0 c0ed7e10 c0ed7df4 c008274c c01144d0 c0c27868 c0ed7ee0 0000001c 
[  113.590000] 7e00: c1368b34 c0ed7e24 c0ed7e14 c004ab98 c0082738 c0c27868 c0ed7e50 c0ed7e28 
[  113.590000] 7e20: c004af90 c004ab54 c03a3e0c c0ed6000 c0ed7e50 c0ed7e40 c004a9f0 c004a950 
[  113.590000] 7e40: c03a3e0c c0ed7e8c c0ed7e54 c004b0b4 c004a9e4 c0039110 c02dc8c0 c03a3c30 
[  113.590000] 7e60: c0ed7e88 c0ed7e70 c01d8f94 c011075c c0ed7ed0 c02f3000 00008946 00000000 
[  113.590000] 7e80: bece8d08 c02f3000 00000000 c0ed6000 c0ed7ed0 c0ed7f18 c0ed7ea4 c01dc758 
[  113.590000] 7ea0: c01ddb58 c0bf7e60 20000013 c0ed7ed8 c0ed7ebc c0082eb0 c01144d0 c0bf7e60 
[  113.590000] 7ec0: c0ed7f08 c0bf7e60 c0ed7ee8 c0ed7ed8 30687465 00000000 00000000 00000000 
[  113.590000] 7ee0: bece8d00 00000000 00000000 00000000 fffffdfd 00008946 bece8d08 c02f3000 
[  113.590000] 7f00: 00000000 c0ed6000 40311000 c0ed7f38 c0ed7f1c c01ce740 c01dc214 c0357b20 
[  113.590000] 7f20: ffffffe7 bece8d08 00008946 c0ed7f58 c0ed7f3c c0093688 c01ce56c c0357b20 
[  113.590000] 7f40: c0bf7e84 bece8d08 00000014 c0ed7f84 c0ed7f5c c00939ac c009365c c0087bf8 
[  113.590000] 7f60: c003a48c c0357b20 fffffff7 00008946 00000036 c0021064 c0ed7fa4 c0ed7f88 
[  113.590000] 7f80: c0093a0c c00936f0 00000001 00000014 bece8d08 00054b80 00000000 c0ed7fa8 
[  113.590000] 7fa0: c0020ec0 c00939dc 00000014 bece8d08 00000014 00008946 bece8d08 ffffffff 
[  113.590000] 7fc0: 00000014 bece8d08 00054b80 00000001 0000b3f0 00000000 40311000 00000000 
[  113.590000] 7fe0: 00054384 bece8d00 0002425c 402aec04 20000010 00000014 00000000 00000000 
[  113.590000] Backtrace: 
[  113.590000] Function entered at [] from []
[  113.590000] Function entered at [] from []
[  113.590000]  r4:bece8d00
[  113.590000] Function entered at [] from []
[  113.590000] Function entered at [] from []
[  113.590000]  r6:bece8d08 r5:bece8d00 r4:c0ed7ed0
[  113.590000] Function entered at [] from []
[  113.590000] Function entered at [] from []
[  113.590000] Function entered at [] from []
[  113.590000]  r7:00008946 r6:bece8d08 r5:ffffffe7 r4:c0357b20
[  113.590000] Function entered at [] from []
[  113.590000]  r7:00000014 r6:bece8d08 r5:c0bf7e84 r4:c0357b20
[  113.590000] Function entered at [] from []
[  113.590000]  r8:c0021064 r7:00000036 r6:00008946 r5:fffffff7 r4:c0357b20
[  113.590000] Function entered at [] from []
[  113.590000]  r6:00054b80 r5:bece8d08 r4:00000014
[  113.590000] Code: e1822013 e18120bc e5913018 e19120bc (e1c320b4) 
[  113.600000] ---[ end trace 2337af3bc9041353 ]---
Segmentation fault
/ # [  115.010000] Unhandled fault: external abort on non-linefetch (0x808) at 0xfc000004
[  115.010000] Internal error: : 808 [#2] PREEMPT
[  115.010000] Modules linked in: rt3070sta sslsd sslotg ssludc snd_soc_magus snd_soc_magus_pcm snd_soc_o
[  115.010000] CPU: 0    Tainted: G      D  (2.6.24ssl #200)
[  115.010000] pc : []    lr : []    psr: 80000093
[  115.010000] sp : c0fffeb8  ip : c0fffeb8  fp : c0fffed8
[  115.010000] r10: c0c52000  r9 : c02c67f4  r8 : c0c52360
[  115.010000] r7 : 0000016e  r6 : 00000000  r5 : 60000013  r4 : c0c523dc
[  115.010000] r3 : 00000ba4  r2 : 00003090  r1 : fc000000  r0 : 00000000
[  115.010000] Flags: Nzcv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
[  115.010000] Control: 0005317f  Table: 51aac000  DAC: 00000015
[  115.010000] Process encoder (pid: 328, stack limit = 0xc0ffe258)
[  115.010000] Stack: (0xc0fffeb8 to 0xc1000000)
[  115.010000] fea0:                                                       c06bff30 00000000 
[  115.010000] fec0: c0c524ac c0c523dc c0c52f90 c0fffef8 c0fffedc bf002b7c bf0028c8 c02de8e0 
[  115.010000] fee0: c0c52484 c0c523bc c0c523dc c0ffff24 c0fffefc bf006a40 bf002b6c 1ad27480 
[  115.010000] ff00: 00000102 c0ffe000 c02de8e0 c0ffff28 bf0069b8 00000001 c0ffff5c c0ffff28 
[  115.010000] ff20: c0049c88 bf0069c8 c0d86758 c08e7b50 c0ffff3c 00000001 c02de6a4 0000000a 
[  115.010000] ff40: c02de660 00000000 c0ffe000 00000006 c0ffff7c c0ffff60 c00456a8 c0049b0c 
[  115.010000] ff60: c02ca5e0 00000018 c02edf48 00000000 c0ffff8c c0ffff80 c00458b4 c004565c 
[  115.010000] ff80: c0ffffac c0ffff90 c0020048 c0045880 ffffffff be3ff79c ffffffe7 00000001 
[  115.010000] ffa0: 00000000 c0ffffb0 c0020ccc c0020010 fffffffb fffffffa 00000009 0000008f 
[  115.010000] ffc0: fffffffb be3ff79c 00001925 fffffffc 00008366 00000001 00000006 00000000 
[  115.010000] ffe0: fffffff4 be3ff5f4 00000000 0003d668 60000010 ffffffff 00000000 00000000 
[  115.010000] Backtrace: 
[  115.010000] Function entered at [] from []
[  115.010000]  r7:c0c52f90 r6:c0c523dc r5:c0c524ac r4:00000000
[  115.010000] Function entered at [] from []
[  115.010000]  r6:c0c523dc r5:c0c523bc r4:c0c52484
[  115.010000] Function entered at [] from []
[  115.010000] Function entered at [] from []
[  115.010000] Function entered at [] from []
[  115.010000]  r7:00000000 r6:c02edf48 r5:00000018 r4:c02ca5e0
[  115.010000] Function entered at [] from []
[  115.010000] Function entered at [] from []
[  115.010000] Exception stack(0xc0ffffb0 to 0xc0fffff8)
[  115.010000] ffa0:                                     fffffffb fffffffa 00000009 0000008f 
[  115.010000] ffc0: fffffffb be3ff79c 00001925 fffffffc 00008366 00000001 00000006 00000000 
[  115.010000] ffe0: fffffff4 be3ff5f4 00000000 0003d668 60000010 ffffffff                   
[  115.010000]  r7:00000001 r6:ffffffe7 r5:be3ff79c r4:ffffffff
[  115.010000] Code: e5941018 e59f30a0 e1a00006 e18420b3 (e1c120b4) 
[  115.020000] Kernel panic - not syncing: Fatal exception in interrupt

And there are the u-boot configuration:

object$ p  
Unknown command 'p' - try 'help'
object$ pri
bootdelay=1
baudrate=115200
ethaddr=00:02:04:06:08:0a
ipaddr=192.168.3.189
bootfile="uImage"
filesize=153000
bootcmd=bootm 0x10030000
bootargs=mem=20M console=ttyS0,115200 init=/init root=/dev/mtdblock3
stdin=serial
stdout=serial
stderr=serial

Environment size: 244/32764 bytes

Configuring Linux’s serial port to raw mode

I was facing a strange issue when debugging a serial communication from a microcontroller on a Linux machine.

I was using this command to print modem communication:

$ cat /dev/ttyUSB0 | hexdump -v -e '/1 "%02X "' -e '/1 "%c\n"'

41 A
54 T
5A Z
0A 
0A 

The microcontroller was sending “ATZ\r\n” but in the Linux I saw only “ATZ\n\n”, initially I suspected that RTOS NuttX in the microcontroller was converting the “\r” (0x0D) to “\n” (0x0A).

After some low level debug I verified that NuttX was writing “\r” correctly in the serial port’s buffer.

Then I realized the guilt should be the Linux. In fact Linux handles serial port as a TTY interface. It means that Linux will do some post processing of serial data.

Fortunately we can change this behavior configuring the serial port to RAW mode, this way:

$ sudo stty -F /dev/ttyUSB0 raw
$ sudo stty -F /dev/ttyUSB0 -echo -echoe -echok
$ sudo stty -F /dev/ttyUSB0 115200

Now everything goes fine:

$ cat /dev/ttyUSB0 | hexdump -v -e '/1 "%02X "' -e '/1 "%c\n"'

41 A
54 T
5A Z
0D 
0A 

Source: http://www.armadeus.com/wiki/index.php?title=Serial_ports_usage_on_Linux

Using the NuttX’s USB Mass Storage to copy SPI NOR Flash Content

I’m using an 8MiB SPI NOR (Winbond W25Q64) on my board and I was looking for a way to copy its content.

Some readers could recall I used the hexdump and screen to copy small files from NuttX, but it is not an option when you need to copy big files. For instance, I want to copy a more than 5MiB file.

Then I decided to use the NuttX USBMSC driver to export the SPI NOR partition.

The first thing to do is enable the USBMSC driver:

Device Drivers  --->
[*] USB Device Driver Support  --->
--- USB Device Driver Support

[*]   USB Mass storage class device  
(64)    Max packet size for endpoint0  
(2)     Bulk OUT endpoint number
(3)     Bulk IN endpoint number
(4)     The number of write requests that can be in flight
(4)     The number of read requests that can be in flight
(64)    Bulk IN request size
(64)    Bulk OUT request size
(0x584e) Mass storage Vendor ID
(NuttX) Mass storage vendor string
(0x5342) Mass storage Product ID
(Mass Storage) Mass storage product string
(0x399) USB MSC Version Number
[*]     Mass storage removable
(128)   USBMSC SCSI daemon priority
(2048)  USBMSC SCSI daemon stack size

Now we need to enable the USB Mass Storage Commands:

System Libraries and NSH Add-Ons  --->
[*] USB Mass Storage Device Commands  --->

--- USB Mass Storage Device Commands
(1)   Number of LUNs
(0)   LUN1 Minor Device Number
(/dev/smart0p1) LUN1 Device Path

As you can see I changed the default LUN1 (Logic Unit 1) from /dev/mmcsd1 to /dev/smart0p1 since it is my SPI NOR Flash partition.

Also I created a stm32_usbmsc.c file with the “int usbmsc_archinitialize(void)” function just returning 0, since the SPI NOR initialization is done automatically.

After compiling and flashing the nuttx.bin on my board I started the USB Mass Storage with the “msconn” command:

NuttShell (NSH)
nsh> msconn
mcsonn_main: Creating block drivers
mcsonn_main: Configuring with NLUNS=1
mcsonn_main: handle=2000c320
mcsonn_main: Bind LUN=0 to /dev/smart0p1
mcsonn_main: Connected

Immediately I listen the new USB device connected on my Linux, but the device didn’t appear in the Nautilus. Using dmesg I could see what was going on:

[10875.354625] usb 3-4: new full-speed USB device number 6 using xhci_hcd
[10875.484111] usb 3-4: New USB device found, idVendor=584e, idProduct=5342
[10875.484118] usb 3-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[10875.484122] usb 3-4: Product: Mass Storage
[10875.484125] usb 3-4: Manufacturer: NuttX
[10875.484127] usb 3-4: SerialNumber: 0101
[10875.545293] usb-storage 3-4:1.0: USB Mass Storage device detected
[10875.545467] scsi6 : usb-storage 3-4:1.0
[10875.545611] usbcore: registered new interface driver usb-storage
[10876.543778] scsi 6:0:0:0: Direct-Access     NuttX    Mass Storage     0101 PQ: 0 ANSI: 2
[10876.544518] sd 6:0:0:0: Attached scsi generic sg2 type 0
[10876.544848] sd 6:0:0:0: [sdb] 10240 512-byte logical blocks: (5.24 MB/5.00 MiB)
[10876.761447] sd 6:0:0:0: [sdb] Write Protect is off
[10876.761456] sd 6:0:0:0: [sdb] Mode Sense: 0b 00 00 00
[10876.981478] sd 6:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[10877.446426]  sdb: unknown partition table
[10877.881947] sd 6:0:0:0: [sdb] Attached SCSI removable disk

Because the NuttX Mass Storage Partition /dev/smart0p1 is not a FAT partition, but SmartFS, Linux couldn’t recognize it.

No problem, I just need to see the partition content.

Using the dd command I copied the flash partition:

$ sudo dd if=/dev/sdb of=/tmp/smartfs.bin
10240+0 records in
10240+0 records out
5242880 bytes (5.2 MB) copied, 9.58846 s, 547 kB/s

That is all! If you don’t know yet, NuttX Rocks!

Install Nexus Experience ROM on Moto G 2014

I installed the Nexus Experience ROM in the Moto G of a friend of mine.

These are the files I used:

Android6.0.1_NX_R10.0.4_MotoG2014.zip
NX-GAPPS_M_Release1.2_STD.zip
TWRP_2.7.1.1.img

These files (except TMRP) can be downloaded from here.

This version is lighter than stock Motorola version because it is a pure Nexus base system.

More info (Portuguese) : http://www.andremachado.org/artigos/1501/usando-o-android-sem-as-aplicacoes-do-google.html

Firmware update using DFU to STM32F407

This is the way I did the firmware update using DFU on my board:

$ sudo apt-get install dfu-util

$ sudo dfu-util -d 0483:df11 -a 0 -s 0x08000000 -D nuttx.bin
dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x08000000, size = 131916
Download	[=========================] 100%       131916 bytes
Download done.
File downloaded successfully

The STM32 needs BOOT0 at logic level 1 and BOOT1 logic level 0 to enter in DFU mode during Reset/Power-ON.

JLinkExe bad behaviour

It is strange, JLinkExe fails to flash a new STM32F407 board that I just mounted:

$ sudo JLinkExe -if SWD
SEGGER J-Link Commander V4.98e ('?' for help)
Compiled May  5 2015 11:49:39
DLL version V4.98e, compiled May  5 2015 11:49:35
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
S/N: 268006167 
OEM: SEGGER-EDU 
Feature(s): FlashBP, GDB 
VTarget = 3.300V
Info: Found SWD-DP with ID 0x2BA01477
Info: Found Cortex-M4 r0p1, Little endian.
Info: FPUnit: 6 code (BP) slots and 2 literal slots
Info: CoreSight components:
Info: ROMTbl 0 @ E00FF000
Info: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
Info: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT
Info: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB
Info: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM
Info: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB9A1 TPIU
Info: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
Target interface speed: 100 kHz

J-Link>device stm32f407ve
Info: Device "STM32F407VE" selected.
Reconnecting to target...
Info: Found SWD-DP with ID 0x2BA01477
Info: Found SWD-DP with ID 0x2BA01477
Info: Found Cortex-M4 r0p1, Little endian.
Info: FPUnit: 6 code (BP) slots and 2 literal slots
Info: CoreSight components:
Info: ROMTbl 0 @ E00FF000
Info: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
Info: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT
Info: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB
Info: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM
Info: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB9A1 TPIU
Info: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 000BB925 ETM

J-Link>loadbin ./nuttx.bin 0
Halting CPU for downloading file.
Downloading file [./nuttx.bin]...Writing target memory failed.

Using this command it works:

J-Link>exec device stm32f407ve
Info: Device "STM32F407VE" selected.
J-Link>loadbin ./nuttx.bin 0
Info: TotalIRLen = 9, IRPrint = 0x0011
Info: TotalIRLen = 9, IRPrint = 0x0011
Info: Found Cortex-M4 r0p1, Little endian.
Info: FPUnit: 6 code (BP) slots and 2 literal slots
Info: CoreSight components:
Info: ROMTbl 0 @ E00FF000
Info: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
Info: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT
Info: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB
Info: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM
Info: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB9A1 TPIU
Info: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 000BB925 ETM
Halting CPU for downloading file.
Downloading file [./nuttx.bin]...O.K.

I suspect there is something wrong in my board because the above command work fine in the boards that I mounted few weeks ago.

Using SmartFS on NuttX

After fixing many issues and thanks to help of Greg Nutt and Ken Petit (SmartFS author) finally I got SmartFS working on NuttX.

This is the NuttX initialization with FileSystem debug enabled:

ABCDF
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        5120
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        5120
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        2048
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        2048
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        1016
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        1016
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

NuttShell (NSH)
nsh>

Now let see the enabled commands:

nsh> ?
help usage:  help [-v] [<cmd>]

[           dd          hexdump     mkdir       ping        test
?           df          ifconfig    mkfifo      ps          true
break       echo        ifdown      mkrd        pwd         uname
cat         exec        ifup        mksmartfs   rm          umount
cd          exit        kill        mh          rmdir       unset
cp          false       losetup     mount       set         usleep
cmp         free        ls          mv          sh          xd
date        help        mb          mw          sleep

Builtin Apps:
flash_eraseall
pppd
tracker
nsh>

And the created devices:

nsh> ls /dev
/dev:
config
console
null
smart0p1
smart0p2
smart0p3
smart0p4
smart0p5
smart0p6
ttyS0
ttyS1
ttyS2
ttyS3
ttyS4
ttyS5
tun
nsh>

Time to format the smartfs partitions:

nsh> mksmartfs /dev/smart0p1
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        5120
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

nsh> mksmartfs /dev/smart0p2
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        5120
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

nsh> mksmartfs /dev/smart0p3
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        2048
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

nsh> mksmartfs /dev/smart0p4
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        2048
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

nsh> mksmartfs /dev/smart0p5
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        1016
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1

nsh> mksmartfs /dev/smart0p6
smart_scan: SMART Scan
smart_scan:    Erase size:          512
smart_scan:    Erase count:        1016
smart_scan:    Sect/block:            1
smart_scan:    MTD Blk/Sect:          1
nsh>

Finally let to mount it:

nsh> mount -t smartfs /dev/smart0p1 /mnt/
smartfs_mount: SMARTFS:
smartfs_mount:      Sector size:     512
smartfs_mount:      Bytes/sector     507
smartfs_mount:      Num sectors:     5120
smartfs_mount:      Free sectors:    5113
smartfs_mount:      Max filename:    16
smartfs_mount:      RootDirSector:   3
nsh>

Your redemption is drawing near:

nsh> mkdir /mnt/teste

nsh> ls /mnt/
/mnt/:
 teste/

nsh> cd /mnt
nsh> ls -l
/mnt:
 drwxrwxrwx       0 teste/

nsh> df
  Block  Number
  Size   Blocks     Used Available Mounted on
   512     5120        8      5112 /mnt
nsh> 

Does anyone doubt that NuttX rock?!?

Just for your information this is my configuration:

CONFIG_MTD=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SECT512=y
CONFIG_MTD_SECT512_ERASED_STATE=0xff
CONFIG_MTD_PARTITION_NAMES=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_CONFIG=y
CONFIG_MTD_CONFIG_RAM_CONSOLIDATE=y
CONFIG_MTD_CONFIG_ERASEDVALUE=0xff
# MTD Device Drivers
# CONFIG_MTD_NAND is not set

CONFIG_RAMMTD=y
CONFIG_RAMMTD_BLOCKSIZE=512
CONFIG_RAMMTD_ERASESIZE=4096
CONFIG_RAMMTD_ERASESTATE=0xff

CONFIG_MTD_SMART=y
CONFIG_MTD_SMART_SECTOR_SIZE=512
# CONFIG_MTD_SMART_WEAR_LEVEL is not set
# CONFIG_MTD_SMART_CONVERT_WEAR_FORMAT is not set
# CONFIG_MTD_SMART_ENABLE_CRC is not set
# CONFIG_MTD_SMART_MINIMIZE_RAM is not set
# CONFIG_MTD_SMART_SECTOR_ERASE_DEBUG is not set
# CONFIG_MTD_SMART_ALLOC_DEBUG is not set

CONFIG_MTD_W25=y


CONFIG_FS_SMARTFS=y
CONFIG_SMARTFS_ERASEDSTATE=0xff
CONFIG_SMARTFS_MAXNAMLEN=16
# CONFIG_SMARTFS_MULTI_ROOT_DIRS is not set
# CONFIG_SMARTFS_ALIGNED_ACCESS is not set