Az elektronikával foglalkozva sokszor belefut az ember olyan problémába, hogy egy-egy chipet, modult vagy egyebet tesztelni kellene. Ilyenkor legegyszerűbb megoldásként egy Arduino után kaptam, ahol a megfelelő library megléte esetén néhány programsorral könnyen tesztelhető egy SPI, I2C vagy egyéb eszköz. Természetesen van ennél egyszerűbb és jobb megoldás, ez pedig az open-source Bus Pirate.
Az Ian Lesnet (Dangerous Prototypes) által tervezett Bus Pirate egy scriptezhető, általános interfész, amely a legtöbb soros protokollt támogatja. A nagyszerűsége leginkább az egyszerű használatából fakad. Nem kell programozgatni egy mezei teszthez, a Bus Pirate modullal egy soros terminálon keresztül lehet kommunkálni, így egyszerű, parancssoros felületet kínál a támogatott interfészek és protokollok könnyű eléréséhez.
Támogatott protokollok:
- 1 wire, 2 wire, 3 wire
- I2C
- SPI
- JTAG
- UART
- scriptezhetó bináris módok
- stb.
Nagyon-nagyon kényelmessé teszi egy eszköz tesztelését, felderítését, hogy megfelelő vezetékezés után azonnal elérhető az eszköz parancssorból. Az OpenOCD támogatás sem jön rosszul, ha elflashelt routert, NAS-t vagy egyebet kell életre lehelni. A Bus Pirate mindezeken kívül még néhány egyéb funkcióval is bír, pillanatok alatt egyszerű oszcilloszkóppá, logikai analizátorrá, frekvenciamérővé vagy AVR programozóvá varázsolható.
Bus Pirate v4
A Bus Pirate alapvetően két verzióban létezik, a v3 és a v4 is aktív fejlesztés alatt áll. A v3.x verzióban még külön FTDI chip felel az USB kapcsolatért, illetve az alkalmazott Pic24 kisebb flasht és kevesebb RAM memóriát kínál. A v3,x verzióhoz több firmware van, mert a kissé szűkös hely nem teszi lehetővé minden funkció egy firmwarebe integrálását. A v3.x verziót kicsit teszteltebbnek, kiforrottabbnak mondják néhányan, illetve ehhez van egy XSVF player firmware is. A v3.x mellett szól az is, hogy az építése kicsit könnyebb, mert nem TQFP, hanem SSOP tokozású Pic24 chipet tartalmaz. Ennek ellenére én a v4.0 mellett döntöttem. Természetesen a v3 és v4 verzió is megvásárolható készen, de én inkább építem, mert szeretek ezzel bíbelődni.
Bus Pirate v4 építése
A v4.0 utánépítése nem nagy ördöngösség, de a v3.x-hez képest azért több alkatrészből áll. A NYÁK hozzám az OSHPark-tól jött (és pihent sok hetet a fiókban), mert nemrég elég kedvező árú akció volt náluk. Itt megjegyezném, hogy a v3.x NYÁK ingyenesen (csak szállítási díjért) is elérhető volt, nekem ez egyelőre még időhiány miatt a fiókban pihen (remélem nem sokáig). A 64 pines TQFP tokozású Pic24 chiphez szokás szerint jó folyasztószer kell. Ian nem tudom mennyi idő alatt rakja össze ezt, mert csak timelapse videót tett ki a Youtube csatornájára, de nekem kb. 2 óra volt mindent beforrasztanom. Igaz, én meglehetősen alapos (értsd: baromi lassú) vagyok…
Az ellenállások között van három háló-ellenállás is, azaz 4-4 ellenállás egy tokban. Ezeket szerintem picit vacakabb beforrasztani, mint 4 különálló ellenállást volna, de azért nem halálos. Az USB csatlakozónál viszont kicsit alul méretezte Ian a pad-eket, egy picivel hosszabb pad jelentősen megkönnyítené a beforrasztást.
Miután minden a helyére került alaposan megfürdettem a panelt, és itt még naivan azt hittem, hogy túl is vagyok a dolog nehezén.
Bus Pirate v4 programozása
A Bus Pirate egy bootloadert használ, így később PIC programozó nélkül is frissíthető a firmware rajta. Csakhogy ezt a bootloadert bele kell tölteni. Azt hittem, hogy ez semmiség, MPLAB letölt, aztán 2 perc lesz. Szokás szerint tévedtem. A gépem ugyanis újra lett telepítve az előző PIC faragás óta, és egy 64 bites Windows 10 került rá. Nagy gondom nincs vele, de néha-néha egy nem támogatott vagy inkompatibilis hardver miatt azért a falat kaparom tőle. Az AVR inkább az én asztalom, így eddig nem is futottam bele az MPLAB Pickit3 csapdájába.
Első meglepetés volt, hogy MPLAB már nincs, illetve nem támogatott. Az utód MPLAB X névre hallgat, és a legkisebb baja, hogy felépítésében csöppet sem hasonlít az előző verzióra. Közel másfél órát küzdöttem vele, mert az eredeti Pickit3 programozóval érdemben nem áll szóba. A Windows látja a programozót, az MPLAB X is, de kommunikálni nem tud vele. Sírnak erre ezren, de hivatalos megoldás nincs rá. Fórumozók által írt megoldásból van kb. 30, csak nálam épp egyik sem működött. Végül másfél óra után leszedtem a Microchip archívumból egy régi MPLAB (v8.92) csomagot, és csodák csodájára azonnal ment minden. Elképzelhető, hogy az MPLAB 8 firmware frissítése után már menne az MPLAB X alól is a Pickit3, de ezt nekem már semmi kedvem nem volt kipróbálni.
A bootloader a helyére került, majd feltöltöttem rá a legutolsó firmwaret is. A felprogramozás ezzel több időt vett el az életemből, mint a halom 0603-as alkatrész beforrasztása. A legújabb OS-en a legújabb gyártói szoftver nem működik rendesen. Nevetséges ez kicsit, nem?
Bus Pirate v4 gyorsteszt
Egy köröm még volt a sikeres self-test előtt, de arról én tehettem. Legközelebb a hálóellenállást is végigmérem, és akkor majd nem kell a panel közepéről kioperálnom a hibás 4x10k háló-ellenállást (RN2) forrólevegős állomással. A négyből az egyik tag ugyanis nem 10k, hanem csak 3k volt. Nem tudom miképpen. A hibás ellenállás az egyik feszültségosztó része volt, emiatt a Pic24 az egyik ADC porton alacsonyabb feszültséget mért, így a self-test az 5 voltos ágon hibát jelzett. Az ellenállás cseréje megoldotta a problémát.
A Putty remekül használható Bus Pirate terminálként is, a backspace normális működéséhez viszont itt a Control-H beállítása szükséges (Settings => Terminal => Keyboard => The backspace key). Elsőként egy BH1750 modult néztem meg, amely egy egyszerű I2C buszos fénymérő, és amelynek most a Bus Pirate adta a 3,3V tápot is.
A beépített help jól használható:
HiZ>? General Protocol interaction --------------------------------------------------------------------------- ? This help (0) List current macros =X/|X Converts X/reverse X (x) Macro x ~ Selftest [ Start o Set output type ] Stop $ Jump to bootloader { Start with read &/% Delay 1 us/ms } Stop a/A/@ AUXPIN (low/HI/READ) "abc" Send string b Set baudrate 123 Send integer value c/C/k/K AUX assignment (A0/CS/A1/A2) 0x123 Send hex value d/D Measure ADC (once/CONT.) 0b110 Send binary value f Measure frequency r Read g/S Generate PWM/Servo / CLK hi h Commandhistory \ CLK lo i Versioninfo/statusinfo ^ CLK tick l/L Bitorder (msb/LSB) - DAT hi m Change mode _ DAT lo e Set Pullup Method . DAT read p/P Pullup resistors (off/ON) ! Bit read s Script engine : Repeat e.g. r:10 v Show volts/states ; Bits to read/write e.g. 0x55;2 w/W PSU (off/ON) <x>/<x= >/<0> Usermacro x/assign x/list all
Firmware infók lekérése:
HiZ>i Bus Pirate v4 Firmware v6.2-beta1 r1981 DEVID:0x1019 REVID:0x0004 (24FJ256GB106 UNK) http://dangerousprototypes.com
I2C módba lépés:
HiZ>m 1. HiZ 2. 1-WIRE 3. UART 4. I2C 5. SPI 6. 2WIRE 7. 3WIRE 8. KEYB 9. LCD 10. PIC 11. DIO x. exit(without change) (1)>4 I2C mode: 1. Software 2. Hardware (1)>2 Set speed: 1. 100KHz 2. 400KHz 3. 1MHz (1)>1 Ready
A felhúzóellenállás beállítása és a táp bekapcsolása:
I2C>e Select Vpu (Pullup) Source: 1) External (or None) 2) Onboard 3.3v 3) Onboard 5.0v (1)>2 3.3V on-board pullup voltage enabled I2C>WP POWER SUPPLIES ON Pull-up resistors ON
A pinstátusz lekérdezése:
I2C>v Pinstates: #12 #11 #10 #09 #08 #07 #06 #05 #04 #03 #02 #01 GND 5.0V 3.3V VPU ADC AUX2 AUX1 AUX - - SCL SDA P P P I I I I I I I I I GND 4.93V 3.31V 3.13V 0.00V H L L H H H H
I2C eszközök keresése az 1-es makróval:
I2C>(1) Searching I2C address space. Found devices at: 0x46(0x23 W) 0x47(0x23 R)
A BH1750 címe tehát 0x23, így bekapcsolható a folyamatos fénymérés:
I2C>[0x46 0x10] I2C START BIT WRITE: 0x46 ACK WRITE: 0x10 ACK I2C STOP BIT
A mérés eredményének lekérdezése:
I2C>[0x47 r:2] I2C START BIT WRITE: 0x47 ACK READ: 0x00 ACK 0x15 NACK I2C STOP BIT I2C>
Az eredmény 21 lx, azaz elég sötétben van a szenzor.
Ismételt lekérdezés, közben egy zseblámpával a szenzorra világítva:
I2C>[0x47 r:2] I2C START BIT WRITE: 0x47 ACK READ: 0x02 ACK 0x5D NACK I2C STOP BIT
Itt már 605 lx a kapott eredmény, tehát a szenzor szépen teszi a dolgát. Első tesztnek nekem elég is volt ennyi.
A fentiekből látható, hogy 1 percbe sem került egy I2C buszos eszköz tesztelése. Ennél jobb, egyszerűbb módot elképzelni sem tudok a teszteléshez vagy reverse enginering feladatokhoz. Sejtem, hogy hamar a kedvenc eszközömmé fog válni a Bus Pirate. Kihagyhatatlan!
Linkek:
http://dangerousprototypes.com/docs/Bus_Pirate
http://www.microchip.com/development-tools/downloads-archive
http://www.chiark.greenend.org.uk/~sgtatham/putty/