NRF24L01+ eredeti / hamisítvány, zajok

Sziasztok!

Elkezdtük használni a Nordic-féle NRF24L01+ áramkört rádiós kommunikációs célokra (bár egyelőre még nem élesben).
Az általa használt 2.4 GHz-es frekvenciasáv a 433 / 866 MHz-es sávoknál rosszabb terjedésű, de kevesebb korlátozás is vonatkozik rá.
Ezt a (2.4 GHz-es) frekvenciasávot nem kifejezetten nagy távolságú adatátvitelre találták ki, de országok szintjén egységesebb szabályozás alá tartozik, emellett egész korrekt távolságon is átvihető marad a jel.

Alapvetően olyan rádiós modult kerestünk, ami rendelkezik megfelelőségi tanúsítványokkal is, hogy ne legyen probléma a rádiós követelmények teljesítése, és egy későbbi bevizsgálás egyszerűbb legyen.
Találtunk is egy RF2401F20 típusú modult, ami rendelkezik tanúsítványokkal, és eredeti NRF24L01+ IC van benne.

Időközben eljutottunk egy kiállításra, ahol a Rohde & Schwarz is jelen volt kiállítóként, és készséges segítséget kaptunk tőlük egy komoly és drága valósidejű spektrumanalizátor (ill. ez inkább EMI teszter) felhasználásával.
Itt némi kétség merült fel bennünk, ugyanis a rádiós kommunikáció kezdetén, felfutáskor jelentkezik egy modulálatlan tranziens, ami megszórja a spektrumot (szimpla ACK válasz esetén is).

Ekkor kezdtünk el jobban utánanézni, miként lehetne kideríteni, melyik NRF eredeti, és melyik kínai hamisítvány (klón).

Egyik támpont, hogy, amikor a kínai lemásolta az IC-t, gyakorlatilag lemásolta az adatlap szerinti viselkedést, ami viszont hibás, így egy feature aktiválásakor egy bizonyos bit inverzben működik az eredeti IC-hez képest. Ezt még nem próbáltam ki, de könnyebb javítani is egy későbbi revízióban.

Másik lehetőség a készenléti áramfelvételüket megmérni. Ez stabilabb indikátornak tűnik, mivel bonyolultabb feladat lenne az áramfelvétel csökkentése, és nem hinném, hogy a kínai fél túl sok energiát fektetne bele - tehát ez hosszabb távon is működő megoldásnak tűnik.
Az eredeti modulok áramfelvétele ~0,5uA körül, a hamis IC-t használó moduloké pedig ~660uA körül volt, tehát szignifikáns különbség van az eredeti és másolat készenléti áramfelvétele között.

Hirtelen felindulásból (még a másik teszt előtt) egy fizikai, "mikroszkópos" próbát is elvégeztünk, gyakorlatilag lecsiszoltuk az IC tetejét és összehasonlítottuk a neten fellelhető mintákkal... így utólag az ezen a teszten átment modulok ugyanazok voltak, amelyek áramfelvétele a későbbi tesztben alacsonyabbnak bizonyult (nyilván ezek másik modulok, de azonos típusúak).

Tehát kiderült, hogy a fenti mérésen részt vett modulok nagy része eredeti volt.

Mivel az IC-t elég sok termékben használják - mi egy Gigabyte egérben találtunk, de régebbi Logitech egerekben is ez van (újabban egy Logitech számára gyártatott, de azonos rádiós protokollt használó IC-t használnak az ún. Unifying ezközeikben) és sok egyéb termékben is benne van -, valószínűsítem, a spektrumanalizátoron látott probléma nem akkora gond, mint azt elsőre gondoltuk.

Jó lenne teljes bizonyossággal tudni, milyen feltételeket kell a rádiós modulnak teljesítenie (és ezeket teljesíti is), bár vélhetően nem véletlen kapta meg a CE / FCC / IC megfelelőséget a fent nevezett modul, és nem véletlen merik használni nevesebb gyártók is.

A történetet kicsit bővebben, képekkel és videókkal illusztrálva feltettem ide, ha esetleg érdekel valakit.

Azért írtam most meg ide is, hátha valaki hasznát veszi még, esetleg van olyan észrevétel, ami megerősít / elbizonytalanít a fentiekben. :)
Ha valakinek van hozzáfűznivalója, esetleg hozzá tud tenni még valamit, annak is örülök.

Hozzászólások

Azért az durva, hogy az eredeti és hamis modulok áramfelvétele között 1000x különbség van (0.5uA vs. 660uA).

Szerk: a 0.5uA-t milyen módban mérted? Mert a gyári spec szerint még power down-nak is kevés (0.9uA), a standby-I meg 26uA.

Igen, eléggé nagy a különbség - még ha elsőre a ~0.5-1mA sem tűnik iszonyatosan soknak (kivéve, ha elemről / akkuról üzemeltetné az ember).

Az is durva volt, hogy szimpla csiszolással sikerült felnyitni az IC-t és megállapítani, melyikkel állunk szemben. :)
(Különösen a koppintást sikerült szépen lecsiszolni, a többi túl durva lett - de még így is felismerhető...)

Szerk.: Ez power down volt, de inkább csak tájékoztató érték, vagyis alapvetően az arány a lényeg.

A mérést, hogyan végeztétek? Hangolt elemen/kimeneten közvetlenül, vagy antennával? Próbáltatok mérni llesztett rezisztív lezárással? Hogyan volt meghajtva a modul? Volt rajta puffer rendesen?
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Szimplán antennán keresztül, nem volt közvetlen a műszer bemenetére illesztve.

A modul egyik esetben egy fejlesztői boardról kapott tápot, volt rajt egy viszonylag nagy puffer is közvetlen a modul tápjánál.
A késleltetést felvittük 50ms-ig biztosan - max. 100 ms-os késleltetést tettem bele a teszt idejére, de már nem emlékszem, felmentünk-e addig, inkább lejjebb vittük...
Ezen a modulon volt erősítő is (a videón ez volt az adó).

Volt ugyanezen a boardon erősítő nélküli IC is, ill. egy másik boardon lévő, erősítő nélküli modullal is azonos jelet kaptunk. (A kontroller előbbi esetben STM32, utóbbi esetben AVR / ATXMEGA volt, a felsőbb szintű library viszont azonos... de megnéztük a vevő modult is, és annak ACK-jain is látszott.)

Ez érdekes. Mindenesetre, jó lenne mérni műterheléssel lezárt modulon is. Az ilyen széles sávú sugárzások mögött rosszul méretezett antenna, rossz tápellátás, vagy a hibás oszcillátor/modulátor megoldás szokott állni. Azért kellemetlen, az ilyen, mert rontja a vétel minőségét.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Ehhez legfőképp' a megfelelő műszer és témán belüli jártasság hiányzik, de jó volna ezt látni ilyen körülmények között is.
Alapvetően modulokat próbáltunk, több típust és típuson belül többet is.
Tehát a rajtuk lévő oszcillátor nem azonos forrásból érkezett... modulációt viszont az NRF24L01+ IC végzi, ez volt a közös pont.

Leginkább azt próbáltuk elkerülni, hogy egy későbbi minősítés gondot okozzon... viszont úgy láttuk, mindegyik modul csinálja és vélhetően az NRF chip működése van a dolog mögött.
Ezt viszont sok termékben használják.

Nagyon kibickedem, de nem lehet valami energiatakarékossági beállításon állítani? Hogy csak hosszabb inaktivitás után áramtalanítsa az adórészt? Mert gondolom azért olyan picike a fogyasztása, mert teljes egészében áramtalanít mindent, ami adott pillanatban nem kell és mikor egy ACK-t küld, akkor gyorsan bekapcsolja. De ha lehetne valami időzítőt állítgatni, akkor mondjuk megadnátok egy olyan időintervallumot, hogy ne minden adás kezdetén kelljen újra bekapcsolni az adót, hanem ha épp sűrűbb a ping-pongozás a rádiócsomagokkal, akkor maradjon bekapcsolva és csak nyugisabb időszakban élesítse az energiatakarékos funkciókat. Esetleg valami RF szűrő + külön RF erősítő, hogy legalább ne legyen olyan széles spektrumú az a zavar? Tudom, fogyasztás és költség szempontból biztos nem érné meg.

Ezek külön adatcsomagok voltak, köztük az NRF Standby-II üzemmódban volt.

Az adatlap Standby-I-nél írja, hogy az áramfelvétel minimalizálása és rövid feléledés a cél, és az oszcillátor csak részben aktív.
Standby-II esetén extra órajel bufferek is aktívak, nagyobb az áramfelvétel, és, ha a TX FIFO-ba adat kerül, rögtön indul a PLL.

A köztes időszakban a PLL-t leállítja; ennek a beállása során keletkezik a videón is látható zaj, amikor még nincs rajt moduláció.

Ezen viszont nem tudok változtatni (külön adatcsomagok esetén).

Valami GPIO vezérelt RF-Switch IC-vel leválasztani az eszközt az antennáról, amikor jön a "döccenés"? Plusz eszköz, meg macerás beidőzíteni, de mégis csak ötlet :) . Vannak kétállásúak, egy ellenállásra irányítanátok a kimenetet a kritikus szakaszban aztán visszakapcsolnátok az antennára. Bár lehet, ez a kapcsolgatás is kelt tranzienseket szépen :)

Azért ez nem igazán kivitelezhető szerintem... egyrészt jelenleg nincs megfelelő műszerünk az ellenőrzésére, másrészt mikroszekundum alatti időzítéssel kellene kapcsolni, harmadrészt egyéb bizonytalanságok is bejönnek, pl. ACK-ot ad a másik által küldött adatra, esetleg hardveres ismétléssel valamely későbbi csomagra küld ACK-ot, vagy több csomagot is ACK-ol, mert maga a válasz nem érkezik meg rendesen.

Vagyis nem tudunk ráidőzíteni arra, pontosan mikor indul az adás.