@@ -31,7 +31,8 @@ Highlights
3131 microphone ** (MP34DT06JTR), and **VL53L1CB ** time‑of‑flight ranger
3232 (up to ~4 m).
3333* **Wi‑Fi b/g/n ** (2.4 GHz) + **Bluetooth LE 5.1 ** via the Murata
34- 1DX (CYW4343W) module — uses the supplied **U.FL antenna **.
34+ 1DX (CYW4343W) module — connects to the supplied antenna via an
35+ on‑board **U.FL connector **.
3536* **High‑speed USB ** (480 Mb/s) over **Micro USB ** through an
3637 external ULPI PHY (USB3320C).
3738* **13 user I/O pins ** on the Arduino edge headers — four digital
@@ -174,7 +175,7 @@ Recovery and debug pins
174175 reset.
175176
176177The Nicla Vision uses Arduino's standard **double‑tap reset ** to
177- enter the STM32H747 ROM bootloader — quickly press the reset button
178+ enter Arduino's bootloader — quickly press the reset button
178179twice and the board enumerates as a DFU device. OpenMV IDE uses this
179180mode to reflash the firmware.
180181
@@ -185,7 +186,7 @@ adapter:
185186
186187* **P1 / P2 ** — internal **PMIC ** I²C bus on PF0 (SDA) and PF1
187188 (SCL). This is ``machine.I2C(2) `` on the Nicla Vision and carries
188- the PMIC, fuel gauge, ToF, and crypto element traffic.
189+ the PMIC, fuel gauge, and ToF traffic.
189190* **P3 ** — TMS / SWDIO (PA13)
190191* **P4 ** — TCK / SWCLK (PA14)
191192* **P5 ** — NRST
@@ -234,8 +235,52 @@ The GC2145 is driven through the :doc:`/library/omv.csi` module::
234235 while True:
235236 img = cam.snapshot()
236237
237- The sensor is connected by a small flex cable to a connector on the
238- back of the board.
238+ When you ask for a small framesize the GC2145 driver crops a
239+ proportionally small readout window from the sensor — by default
240+ the readout-to-output downscale ratio is capped at 3x to keep the
241+ frame rate up. `csi.IOCTL_SET_FOV_WIDE ` raises that cap to 5x,
242+ which means the driver pulls from a wider area of the sensor when
243+ streaming small resolutions. The result is a noticeably wider field
244+ of view at small framesizes, at the cost of some throughput::
245+
246+ cam.ioctl(csi.IOCTL_SET_FOV_WIDE, True)
247+ cam.ioctl(csi.IOCTL_GET_FOV_WIDE) # returns the current setting
248+
249+ M4 core
250+ ~~~~~~~
251+
252+ The Cortex‑M4 core is exposed through :doc: `openamp </library/openamp >`
253+ for inter‑processor communication. The OpenMV firmware runs on the
254+ M7 only; the M4 has no MicroPython runtime of its own, so using it
255+ means building a separate C firmware image and loading it from the
256+ filesystem via :class: `openamp.RemoteProc `.
257+ Pre‑built example firmware that implements a virtual UART endpoint
258+ is available in the
259+ `openamp_vuart <https://github.com/iabdalkader/openamp_vuart >`_
260+ repository — follow its README to build ``vuart.elf ``::
261+
262+ import openamp
263+ import time
264+
265+ def ept_recv_callback(src_addr, data):
266+ print("Received:", data.decode())
267+
268+ ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
269+
270+ rproc = openamp.RemoteProc("vuart.elf")
271+ rproc.start()
272+
273+ count = 0
274+ while True:
275+ if ept.is_ready():
276+ ept.send("Hello World %d!" % count, timeout=1000)
277+ count += 1
278+ time.sleep_ms(1000)
279+
280+ In practice this support is best treated as a demonstration of the
281+ openamp interface rather than a working dual‑core platform — the
282+ M4 cannot be reset independently of the M7, so stopping the M4
283+ forces a full system reboot.
239284
240285Microphone
241286~~~~~~~~~~
@@ -258,6 +303,9 @@ example, a simple loudness detector::
258303 audio.init(channels=1, frequency=16000, gain_db=24)
259304 audio.start_streaming(loudness)
260305
306+ while True:
307+ pass
308+
261309IMU
262310~~~
263311
@@ -438,7 +486,7 @@ Wi‑Fi
438486
439487The on‑board Murata 1DX (CYW4343W) is exposed via
440488:doc: `/library/network ` as a station interface. Connect the supplied
441- ** U.FL antenna** to the `` J6 `` connector before bringing up the
489+ antenna to the on‑board ** U.FL connector** before bringing up the
442490radio::
443491
444492 import network, time
@@ -716,7 +764,7 @@ Firmware update (DFU)
716764~~~~~~~~~~~~~~~~~~~~~
717765
718766The Nicla Vision uses Arduino's standard **double‑tap reset ** to
719- enter the STM32H747 ROM bootloader. Quickly press the reset button
767+ enter Arduino's bootloader. Quickly press the reset button
720768twice — the board re‑enumerates over USB as a DFU device and OpenMV
721769IDE can flash a new firmware image.
722770
@@ -768,7 +816,25 @@ resetting the camera** so the host flushes its cached writes.
768816 created or modified by code running on the camera will not show
769817 up until the host re‑mounts the drive. If both the OS and the
770818 camera write the same filesystem at the same time, the OS will
771- win and overwrite changes made by the camera.
819+ win and overwrite changes made by the camera. Use the SD card for
820+ any data the script writes back, and remount before reading those
821+ files from the host.
822+
823+ .. note ::
824+
825+ The user RGB LED's **red ** channel may briefly light up while the
826+ host is reading from or writing to the USB mass‑storage drive —
827+ this is a firmware‑driven activity indicator, not a fault.
828+
829+ Storage sizes
830+ ~~~~~~~~~~~~~
831+
832+ The Nicla Vision ships with:
833+
834+ * ``/flash `` — **11 MB ** FAT filesystem, read/write.
835+ * ``/rom `` — **4 MB ** read-only memory-mapped ROMFS, used to
836+ ship scripts and ML models that benefit from zero-copy mmap
837+ access.
772838
773839Hard‑fault indicator
774840~~~~~~~~~~~~~~~~~~~~
0 commit comments