A sealed logging card is a thickness problem before it is an electronics problem. Every subsystem sits downstream of one decision: how the millimetres get handed out.
Take 2.4 mm as the target, allocate it the obvious way — cell stacked above the board — and watch the budget go negative before the last line.
| Layer | Thickness | Running total |
|---|---|---|
| Front label film | 0.10 mm | 0.10 |
| Top shell wall | 0.25 mm | 0.35 |
| Component clearance over the board | 0.45 mm | 0.80 |
| PCB | 0.40 mm | 1.20 |
| Coin cell | 1.60 mm | 2.80 |
| Bottom shell wall | 0.25 mm | 3.05 |
An overrun of 0.65 mm on a 2.4 mm target. Every line except the cell is an allocation, illustrative rather than measured. The CR2016 cell datasheet gives 20.0 mm diameter, 1.6 mm maximum height and 90 mAh. Its CR2032 sibling stands 3.2 mm on its own and carries 225 mAh.
A 2.4 mm card cannot stack a coin cell on top of its PCB. A CR2016 stands 1.6 mm tall and a CR2032 stands 3.2 mm. The board and two shell walls have already spent most of the envelope. The cell drops into a window cut through the board instead, and thickness becomes cell height plus two walls.
Re-allocate and the arithmetic closes. Film 0.10, top shell 0.25, a 1.60 mm plane holding board and cell together, bottom shell 0.25. That is 2.20 mm nominal, with 0.20 mm unallocated — and that 0.20 mm still has to cover the cell contacts, any bonding layer, PCB-thickness and moulding tolerances, and the bow every thin shell carries. Treat it as the whole remaining budget, not as margin. Everything below this point is a consequence of that plane.
Start at the seal
IEC 60529 classifies enclosures under a defined laboratory test, which is a narrower thing than a deployment. Second characteristic numeral 7 covers temporary immersion between 0.15 m and 1 m. The ANSI/IEC 60529 text also names what the IP Code leaves out: corrosion, moisture produced by condensation, and explosive atmospheres.
A card leaving a 4 °C chiller for a humid dock meets condensation daily. That is the load case the classification never covered.
The seal settles serviceability too. A continuous seam leaves no battery door and no external test point. Read-out goes wireless, and one cell covers the service life.
Subsystem map on a single board
Six things compete for one plane. Radio SoC, temperature sensor, light sensor, non-volatile storage, cell window, antenna keep-out.
Two of them are large, fixed early and hostile to each other. The cell window and the antenna take opposite short edges, because any other arrangement eats the middle of the board.
The antenna claims a corner and the space around it
Nordic's published nRF52 PCB design guidelines describe a reference monopole about 23 mm long. That antenna "needs a minimum of 5 mm clearance to the ground plane". Exact geometry belongs to the specific antenna; the order of magnitude sets the floor.
Nothing conductive may enter that clearance, and a coin cell is a metal disc.
Component brief — radio and antenna keep-out. A 2.4 GHz PCB monopole needs a ground-free region beside it. Published Nordic guidance puts its reference monopole at about 23 mm, with at least 5 mm of clearance. A coin cell inside that region detunes it. The cell window therefore takes one short edge and the antenna the other.
Package height enters the same argument, and the cutout plane is what sets the limit. Nordic lists the nRF54L15 in a CSP47 at 0.42 mm height, with QFN options for that family at 0.85 mm. On a 1.60 mm plane carrying a 0.40 mm board, 1.20 mm remains, split between the two faces by wherever the board sits within the cell's height — so a QFN can fit geometrically, at the cost of most of one side's share, and then competes with the cell contacts and the shell's inner bow. The CSP leaves that argument unopened. The package decision is a mechanical decision wearing an electrical label.
Coupling the sensor to the load, not to the board
Sensor datasheets describe a die under stated test conditions; a card inherits that number only through its thermal path. The TMP117 datasheet quotes ±0.1 °C maximum from −20 °C to 50 °C. The same part widens to ±0.2 °C maximum from −40 °C to 100 °C. Sensirion's STS40 and STS41 quote a typical 0.2 °C across −40 to +125 °C.
Those two "±0.2 °C class" claims describe different things. One is a maximum over a defined band, the other a typical over a wider one. A card inherits neither automatically.
Component brief — sensor thermal coupling and self-heating. A card's accuracy is the die specification plus its thermal path. TI notes that low power consumption limits self-heating. It also says the package thermal pad should stay unsoldered for best accuracy. Sensirion notes that response time depends on substrate conductivity and on how the part is designed in.
Three moves follow. Route slots around the sensor so the board stops carrying heat from the SoC. Stop the copper pour short of the sensor pads. Thin the shell wall above the part. A slower response is the price of a number that means something.
The routed slots and the thinned wall decide the card's accuracy far more than the last decimal place on a sensor datasheet.
An opening detector needs a window, and a window is a seam
An ambient-light sensor on the same board turns a light-level threshold into a carton-opening event. TI's OPT4001 shows the scale. Its PicoStar package measures 0.84 × 1.05 × 0.226 mm. A SOT-5X3 variant measures 2.1 × 1.9 × 0.6 mm and adds an interrupt pin.
The useful detail: the datasheet covers operation underneath dark glass, with strong infrared rejection. A tinted or thinned shell section can therefore carry the optical path, and the seam stays continuous. An aperture would not.
Current is the other constraint. The datasheet quiescent figure is 2 µA, against a stated nRF54L15 sleep floor of 0.7 µA.
SoC sleep, lowest stated mode 0.70 uA (nRF54L15 class)
Temperature sensor, shutdown 0.15 uA (TMP117 typical)
Ambient light sensor, standby 2.00 uA (OPT4001)
Idle floor ~2.85 uA before a sample or an advertisement
On that budget the opening detector outweighs the radio and the temperature sensor combined at rest. Polling it on a slow cadence may well beat leaving it armed, though that comparison needs the polling energy and any switch leakage in it before it can be trusted. How much the whole choice is worth needs the full duty cycle — advertising, sampling, writes — and the usable capacity at the lane's actual temperature; as a bound, 90 mAh against a 2.85 µA floor alone is roughly 1,300 days before a single advertisement is sent.
How many days does 100,000 samples buy?
Keep timestamps out of the record; derive them from a session header plus a fixed interval. Drop the sequence number for the same reason — position in the log already carries it, and an 8-bit counter would wrap every 256 samples anyway. That leaves four bytes for temperature, a quantised light level and flags.
# Illustrative budget. Values below the line are design allocations,
# not datasheet numbers.
RECORD_BYTES = 4 # 2 B temperature @ 0.01 degC LSB, 1 B light (quantised), 1 B flags
# sequence and timestamp are both derived from record position
SAMPLES_MAX = 100_000
LOG_BYTES = RECORD_BYTES * SAMPLES_MAX # 400,000 B (~391 KiB)
NVM_TOTAL_BYTES = 1_500_000 # nRF54L15 class: 1.5 MB non-volatile memory
APP_BYTES = 400_000 # firmware, keys, calibration record, wear headroom
LOG_BUDGET = NVM_TOTAL_BYTES - APP_BYTES # 1,100,000 B
assert LOG_BYTES < LOG_BUDGET
The log shares non-volatile memory with the application. Nordic lists 1.5 MB on the nRF54L15 and 1 MB on the nRF54L10. One log turns a comfortable fit into a tight one across two parts in one family. An external flash die removes that pressure and spends height instead.
Interval sets the duration
| Sampling interval | 100,000 records cover | Records per 24 h |
|---|---|---|
| 30 s | 34.7 days | 2,880 |
| 1 min | 69.4 days | 1,440 |
| 5 min | 347.2 days | 288 |
| 10 min | 694.4 days | 144 |
| 15 min | 1,041.7 days | 96 |
Component brief — storage and power budget. Four bytes per record puts 100,000 samples at roughly 391 KiB. That fits alongside firmware in a 1.5 MB part and crowds a 1 MB one. Interval sets duration: 34.7 days at 30 s, 69.4 days at one minute, 347.2 days at five. On this card the binding limit is almost always the cell rather than the memory depth.
Cell capacity carries one condition. The CR2016 figure of 90 mAh applies to a 0.1 mA continuous drain. The rated range runs −30 °C to +85 °C. A logger draws microamps between samples and milliamps in radio bursts. Doing that at the cold end of the rated range is a different operating point.
What leaves the card
The card stores records. Rendering a PDF or CSV consignment report happens on the phone or gateway that reads it. That moves traceability into the read-out chain. Whatever the card refuses to store cannot appear in the report.
# device_id,firmware,cal_ref,cal_date,interval_s,session_start_utc
# seq and t_offset_s are derived on export from record position and interval_s;
# light_level is the stored 0-255 quantised value, not lux
# 0A1B2C3D4E5F,1.4.2,BATH-REF-07,2026-02-11,300,2026-06-04T08:00:00Z
seq,t_offset_s,temp_c,light_level,flags
1,0,4.02,0,0x00
2,300,4.05,0,0x00
3,600,7.81,182,0x02
The radio side has moved too. The Bluetooth Core 6.0 features include Decision-Based Advertising Filtering. A scanner can use a primary-channel packet to decide whether to scan the secondary channels. Monitoring Advertisers reports when a device of interest moves in and out of range. Both cut the reader's work rather than the card's.
Channel Sounding is a different proposition. The same page describes it as secure fine ranging, more accurate than the path-loss method. Nordic lists support for it on the nRF54L family. The open question is not the silicon but whether a 90 mAh cell can pay for it.
Failure surfaces, in the order they appear
Bending comes first. A rigid board inside a flexible shell concentrates strain at the board edge and the cell contacts. A card living between cartons gets flexed whether the specification allows it or not.
Seam ageing comes second. An IP classification is a type test on new samples. Repeated cycling between chiller and dock is a fatigue input that test does not model.
Component brief — seal, window and bending. Three mechanical failures dominate this class. Strain at the board edge from flexing. Seam fatigue from repeated thermal cycling. Clouding of the optical window. None of them show up in a functional read-out. A card that still reports can be a card that has stopped being sealed.
Sensor drift comes third and is the quietest. A card whose calibration has walked reports confidently and wrongly, which is the more expensive of the two failure modes: a dead card gets replaced, a drifted one gets believed.
Reuse is a service operation with an owner
Treat reuse as a service operation with a bench behind it. Three states need checking before a returned card goes out again, and none of them is a property of the housing.
Calibration status: verified against a reference, with a date and a recorded deviation. Seal integrity: a new sample's IP class does not describe a returned unit with unknown handling behind it. Cell condition: a lithium-manganese primary holds a nearly flat terminal voltage across most of its discharge. Voltage alone says little about what remains.
Whoever takes the returns owns those three checks, with a bench, a pass criterion and a serial-level record. Where that owner goes unnamed, the second shipment runs on the first shipment's evidence.
Design constraints register
| Constraint | What it forbids | What it forces |
|---|---|---|
| 2.4 mm envelope | a coin cell stacked above the board; QFN-height packages | the cell in a board cutout; CSP-height silicon |
| Continuous seal, no service opening | battery doors, connectors, external test points | wireless read-out; one cell for the service life |
| Antenna clearance region | copper, cell metal or sensor pads inside the keep-out | cell window and antenna at opposite short edges |
| Accuracy claimed at the card, not the die | a thermal pad tied into the ground pour | routed slots, an unsoldered pad, a stated response time |
| Optical path for the opening detector | an aperture through the shell | a tinted or locally thinned shell section |
| Detector standby above SoC sleep | leaving the detector permanently armed | a polling cadence set against the cell |
| Non-volatile memory shared with firmware | a timestamp inside every record | session header plus fixed interval, and a wear budget |
| Reuse across shipments | reading a new sample's IP class onto a returned unit | a named owner for calibration, seal and cell checks |
This article was written with AI assistance for research and drafting.


Top comments (0)