Month: February 2023

U-Blox NEO-6M from LILYGO TBeam LoRa GPS is not fake

I was thinking that GPS module NEO-6M from Lilygo board ( was fake, but it seems original:

NuttShell (NSH) NuttX-12.0.0
nsh> cu
$GPTXT,01,01,02,u-blox ag -*50
$GPTXT,01,01,02,HW  UBX-G60xx  00040007 FF7FFFFFp*53
$GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59

More info about fake vs original here:

ESP32 WiFi failing because SPI Flash partition is not mounted

I was facing a strange issue trying to get ESP32 SoftAP working on NuttX RTOS:

ERROR: Failed to initialize SPI Flash
Creating an WiFi HotStop
dhcpd_openlistener: ERROR: socket failed: 19
dhcpd_run: ERROR: Failed to create socket
wpa_driver_wext_set_key_ext: ERROR: ioctl[SIOCSIWENCODEEXT]: 25
ERROR: Process command (psk) failed.
telnetd [6:100]

NuttShell (NSH) NuttX-11.0.0

After some time I realized that the ESP32 driver was failing because the /mnt/esp32/wifi was not mounted only because the SPI Flash partition was not formatted (I’m using the SmartFS).

After formatting it:

nsh> mksmartfs /dev/smart1

The ESP32 WiFi and SoftAP worked as expected!

Getting started to CUDA

I installed CUDA support on my computer following these steps:

Let’s see more info about my GPU:

$ /usr/local/cuda-12.0/extras/demo_suite/deviceQuery
/usr/local/cuda-12.0/extras/demo_suite/deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA GeForce RTX 3050 Ti Laptop GPU"
  CUDA Driver Version / Runtime Version          12.0 / 12.0
  CUDA Capability Major/Minor version number:    8.6
  Total amount of global memory:                 3904 MBytes (4094164992 bytes)
  (20) Multiprocessors, (128) CUDA Cores/MP:     2560 CUDA Cores
  GPU Max Clock rate:                            1185 MHz (1.18 GHz)
  Memory Clock rate:                             5501 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 2097152 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 12.0, CUDA Runtime Version = 12.0, NumDevs = 1, Device0 = NVIDIA GeForce RTX 3050 Ti Laptop GPU
Result = PASS

Then I tested it compiling my first application, as explained here:

Very easy! Now I’m ready to crush some data! 😉