Bus Pirate v4, egy elektronikus svájci bicska

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…

Bus Pirate v4.0 PCB
Bus Pirate v4.0 NYÁK még üresen

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.

Bus Pirate v4.0 USB
Bus Pirate v4.0, az USB portnál lehetett volna hosszabb pár pad

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.0 (majdnem) kész
Bus Pirate v4.0 (majdnem) készen

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.

Bus Pirate v4.0 programozás
Bus Pirate v4.0 a Pickit3 programozón

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/