For the complete documentation index, see llms.txt. This page is also available as Markdown.

SolidSense AIOT — Tips

Practical tips for the SolidRun SolidSense AIOT carrier — Flash Card (J6) overlay + I²C sensors (HDC3022, OPT4001) and on-board audio (TAC5111 codec, PDM mics, PAM8302 speaker).

Practical notes for the SolidRun SolidSense AIOT carrier: peripherals, how to verify they're up, and how to use them from Linux.

Most of the I²C sensors live on the Flash Card (J6) add-on and are enabled by the *-solidsense-aiot-addon-flash-card device-tree overlay — apply it (see below) when the card is fitted.

The audio subsystem, by contrast, is on the carrier itself: a TAC5111 codec (I²C2 @ 0x50, U11) with two PDM microphones (U13/U14) and a mono speaker path through a PAM8302 amplifier on connector J5 — see the Audio & Microphone section for record/playback examples.

Find the carrier I²C bus

i2cdetect -l        # list adapters
i2cdetect -y 1      # scan it (RZ/V2N carrier = bus 1)

In i2cdetect: UU = address claimed by a kernel driver, a number = device present but unclaimed, -- = nothing.

Flash Card (J6) Overlay

The J6 add-on sensors (HDC3022, OPT4001, LM3645) live in a device-tree overlay applied at boot only when the card is fitted. On RZ/V2N the flash-card overlay is per-connector (it also wires the camera lane), so pick the one matching where the card is fitted:

SoM
Base DTB
Flash-Card Overlay

RZ/V2N (J8)

r9a09g056n48-solidsense-aiot.dtb

rzv2n-solidsense-aiot-addon-flash-card-cam-j8.dtbo

RZ/V2N (J17)

r9a09g056n48-solidsense-aiot.dtb

rzv2n-solidsense-aiot-addon-flash-card-cam-j17.dtbo

i.MX8MP

imx8mp-solidsense-aiot.dtb

imx8mp-solidsense-aiot-addon-flash-card.dtbo

Related CSI camera (IMX678) overlays for RZ/V2N:

  • rzv2n-solidsense-aiot-csi-camera-imx678-j8.dtbo

  • rzv2n-solidsense-aiot-csi-camera-imx678-j17.dtbo


Enable via extlinux.conf — updated examples

Copy the .dtbo to the boot partition next to the base .dtb, then add an FDTOVERLAYS line to your boot entry in /boot/extlinux/extlinux.conf.

RZ/V2N (flash card on J8):

i.MX8MP (flash card):

Multiple overlays = space-separated, applied in order (e.g. flash card on J8 plus the IMX678 camera on J17):

If U-Boot prints failed on fdt_overlay_apply … '__symbols__', the base dtb wasn't built with -@ — rebuild it with make dtbs.

Requirements

  • Base DTB built with symbols (-@) so U-Boot can resolve the overlay's references (&i2c1, &pinctrl, &v_3_3). In-tree this needs DTC_FLAGS_<base> := -@ and a full make dtbs — a single make <vendor>/<board>.dtb does not emit symbols. Verify:

  • U-Boot with overlay support (CONFIG_OF_LIBFDT_OVERLAY=y), using the extlinux/distro-boot path.

Confirm it applied (after boot)

HDC3022 — Temperature & Humidity Sensor

TI HDC3022 on carrier I²C1, address 0x46. Handled by the hdc3020 IIO driver (CONFIG_HDC3020) and read through the IIO subsystem — not raw I²C.

Verify it is detected

If 0x46 shows 46 instead of UU, the chip is present but the driver didn't bind — check dmesg | grep hdc3020. A raw i2cdump 0x46 of all zeros is normal (command/response chip; always read via IIO).

Read temperature and humidity

Values are raw; convert with value = (raw + offset) × scale (milli-units, ÷1000 → °C / %RH):

Continuous read loop

Breathe on the sensor — humidity jumps, temperature drifts up, then both settle. in_*_peak_raw hold the max since power-on; iio_info (libiio) dumps everything with units.

OPT4001 — Ambient Light Sensor

TI OPT4001 on carrier I²C1, address 0x44. Driver opt4001 (CONFIG_OPT4001). The device-tree compatible must match the package: ti,opt4001-sot-5x3 (SOT-5X3) or ti,opt4001-picostar (PicoStar).

Verify it is detected

Read illuminance

The driver reports processed lux directly:

Example on RZ/V2N:

Read loop:

Cover the sensor → lux drops toward 0; shine a light → it rises.

LM3645 — Camera Flash LED

TI LM3645 flash/torch LED driver on carrier I²C1, address 0x65.

Verify it is detected

The Flash Card (J6) carries a TI LM3645 flash driver powering 4× SFH4722 IR emitters. It is exposed through the Linux LED flash class at:

Prerequisites

  • Flash Card fitted on connector J6.

  • Flash Card device-tree overlay applied: rzv2n-solidsense-aiot-addon-flash-card-cam-j8.dtbo (or …-j17.dtbo for J17; imx8mp-solidsense-aiot-addon-flash-card.dtbo on i.MX8MP).

  • Driver loaded (leds-lm3645).

Verify the device is present and bound:

If the module is built as a module and not auto-loaded, run modprobe leds-lm3645.

Torch — continuous IR

Flash — pulsed IR

Current & timing reference (per output)

Mode
Formula
Range

Flash

I = 7.8 mA × code + 7.325 mA

~7 mA … 2 A

Torch

I ≈ 1.4 mA × level + 0.525 mA

~0.5 mA … 360 mA

Timeout

tabulated

10 ms … 400 ms

All four outputs are driven identically, so total emission ≈ the per-output current. Written values are clamped to the device-tree limits (flash-max-microamp, led-max-microamp, flash-max-timeout-us).

Confirming it works

IR light is invisible to the eye. Point a phone or USB camera at the four emitters while running torch/flash — IR appears as a faint violet-white glow on the camera sensor. Phone front cameras usually lack an IR-cut filter and show it best.

Notes

  • Strobe is software/I2C triggered; the hardware STR1/STR2 pins are not used.

  • HWEN is handled automatically by the driver (enable-gpios, pin P72).

  • Camera-synchronized IR (V4L2 flash) is not wired in this driver version.

LTE SIM Card Detection (GC02S1) — Polling-Mode

The SolidSense AIOT uses the Sequans GC02S1 LTE modem with SIM detection in polling mode: the modem detects the USIM electrically, polling at a fixed interval, without using the SIM card-detect (CD) signal. This is the standard SIM configuration for the board.

Configuration

To set the modem to SIM polling mode, send these AT commands in order:

  • AT+CFUN=5 — enter manufacturing mode (required to change hardware config).

  • AT+SQNHWCFG="sim0","enable","10000" — enable SIM polling; the 3rd parameter is the poll interval in milliseconds (10000 = 10 s).

  • AT^RESET — reboot the modem to apply.

  • AT+SQNFACTORYSAVE="OEM" — store the setting as the module default.

Applying from Linux

The modem's AT port enumerates as /dev/ttyACM0. Open it, start a background reader, then send each command with printf:

AT^RESET re-enumerates the modem over USB, so re-open the port before persisting and verifying:

Verify

Allow ~10 s after boot (one poll interval), then:

A +CPIN: READY response with a valid ICCID and IMSI confirms the SIM is detected and working.

One-time setting. AT+SQNHWCFG is stored in non-volatile memory and AT+SQNFACTORYSAVE="OEM" makes it the module default, so it persists across reset and power-cycle. Apply it once per modem; it does not need to be re-run at each boot.

Audio & Microphone

The SolidSense AIOT carries a Texas Instruments TAC5111IRGER audio codec (U11, on I²C2 address 0x50) that provides both a stereo PDM microphone input and a mono speaker output path.

Hardware

Function
Part
Designator
Notes

Audio codec

TAC5111IRGER

U11

I²C2 @ 0x50, I²S on SAI3, S16_LE only

Microphones

MMICT5837-00-012 ×2

U13, U14

PDM digital mics → codec IN1 / IN2

Speaker amp

PAM8302AASCR

Single-channel class-D, driven from codec OUT1; OUT2 grounded

Speaker out

J5 (2×1, 1.27 mm header)

J5

Amplifier output

The codec's OUT1 feeds the PAM8302 amplifier; OUT2 is grounded and unused. Because the PAM8302 is a single-ended-input amp wired with OUT1M as the reference, the OUT1 channel must be driven in pseudo-differential mode with OUTxM as VCOM — plain differential mode produces loud noise. The amplifier /SD (shutdown) enable is on GPIO1_IO12 (active-high) and must be asserted before playback.

⚠️ Only S16_LE is supported (S32_LE is buggy in the driver).

Recording (microphone)

The two MMICT5837 PDM mics map to codec channels IN1/IN2. Set the input mux to PDM, enable the two ASI capture channels, set a sane PDM gain and clock, then record:

Playback (speaker)

Enable the DAC receive channel and route OUT1 through the DAC into the amplifier using the VCOM pseudo-differential configuration:

Last updated