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:
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.dtborzv2n-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 withmake dtbs.
Requirements
Base DTB built with symbols (
-@) so U-Boot can resolve the overlay's references (&i2c1,&pinctrl,&v_3_3). In-tree this needsDTC_FLAGS_<base> := -@and a fullmake dtbs— a singlemake <vendor>/<board>.dtbdoes 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)
Without the overlay, none of the J6 sensors show up (the base dtb has no nodes for them). If U-Boot prints failed on fdt_overlay_apply … '__symbols__', the base dtb wasn't built with -@ — rebuild it with make dtbs.
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.
Not detected (0x44 absent)? The chip isn't ACKing. Confirm it's populated on the card, then check the SDA/VDD solder joints — with power off, verify continuity from the OPT4001 SDA pin to a known-good bus SDA point (e.g. the HDC3022 SDA). An open/cold joint (SDA floating near 0 V while the bus works for other devices) is a board/assembly fault, not software.
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.dtbofor J17;imx8mp-solidsense-aiot-addon-flash-card.dtboon 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)
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 ≈ 4× 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.
Eye safety: IR is invisible but can be intense at high current. Do not stare into the emitters, and keep the flash/torch current within the rated limit.
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.
This is the default on production units. SolidRun provisions the GC02S1 with SIM polling mode during manufacturing, so boards ship with this as the default SIM-detection mode (no card-detect line required). The steps below are only needed to (re)apply it on a module that isn't already configured.
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
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