Bus Pirate

Bus Pirate (pcb+kutija+kablovi)


Naleteh pre nekog vremena na Bus Pirate, odličan proizvod za svakoga ko želi da debagira standardne serijske protokole poput I2c, SPI, asinhroni seriski, 1wire i slične. Razvio ga je Ian Lesnet i za divno čudo postavio kao open source projekat (svn je hostovan na google code-u).


Osnovne mogućnosti Bus Pirate-a su

  • 0-5.5V tolerantni pinovi
  • 0-6V analogno digitalni konverter (analog probe)
  • 1Hz – 40MHz frekvencmetar
  • 300Hz do 8MHz generator frekvencije + PWM
  • pull up otpornici na ploči koji idu na “odabrani” napon (postoji izveden pin na koji se dovodi željeni pull up napon)
  • upravljivi 3V3 i 5V izvori struje (moguće napajati druge uređaje)
  • mogućnost pisanja makroa koje će bus pirate da izvrši
  • bootloader (nema potrebe za programatorom)
  • usb konekcija ka računaru
  • 10Hz – 1MHz logic analyzer
  • može da glumi AVR500STKv2 programator
  • avrdude ume da ga koristi nativno da programira AVR mikrokontrolere
  • protokol snifer
  • protokol klijent-server


    Bus Pirate

    Bus Pirate


    • 1-wire
    • I2C
    • SPI
    • JTAG
    • Asinhroni seriski
    • MIDI
    • PC Tastatura (ps2)
    • HD44780 LCD
    • binarni 2wire i 3wire protokol
    • bitbanging kroz skripting

Standardan mod rada sa Bus Pirate-om je kroz serisku konzolu. Direktno kroz menije samog Bus Pirate-a možete pričati sa i2c epromom ili snifati sta priča mikrokontroler sa drugim mikrokontrolerom na SPI magistrali. Ma koliko je konzolni rad sa njim prijatan i brz, vrlo često je zgodno neke stvari videti nacrtane tako da sam ja počeo da pravim neki maleni gui. Za sada (posle oko 1.5h rada) postoji mali app koji ume da priča sa piratom da pokupi neke osnovne podatke sa njega (stanje pinova, vrednost na analognoj sondi, da pusti pwm etc..) čisto za test kako to funkcioniše. Kada uvatim koji minut napraviću i deo za priču sa raznim protokolima ..


Bus Pirate

Bus Pirate


Za zainteresovane, kolega je rešio da napravi kit pošto je dobavka samog bus pirate-a u ove krajeve malo poskupa (poštarina, carina, takse, lopovluk, bezobrazluk i tako to) te da olakša ljudima da do ove extra korisne sprave dođu. Zainteresovani mogu da vide više podataka tamo na forumu.

Primer kako se Bus Pirate koristi (MOSI pin na bp-u je spojen na SDA na i2c eepromu, CLOCK sa bp-a na SCL na i2c epromu, GND su spojeni, 5V je spojen sa bp-a na eeprom i VPU (zelena zicka) je spojena na 5V):

Bus Pirate v3
Firmware v5.1 (rxxx) Bootloader v4.4
DEVID:0x0447 REVID:0x3043 (B5)

http://dangerousprototypes.com

HiZ> ?
General                                 Protocol interaction
---------------------------------------------------------------------------
?       This help                       (0)     List current macros
= X     Converts X                      (x)     Macro x
~       Selftest                        [       Start
#       Reset                           ]       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
c/C     AUX assignment (aux/CS)         0x123
d/D     Measure ADC (once/CONT.)        0b110   Send value
f       Measure frequency               r       Read
g       Generate frequency/PWM          /       CLK hi
h       Commandhistory                  \       CLK lo
i       Versioninfo/statusinfo          ^       CLK tick
l/L     Bitorder (msb/LSB)              -       DAT hi
m       Change mode                     _       DAT lo
o       Set output type                 .       DAT read
p/P     Pullup resistors (off/ON)       !       Bit read
s       Script engine                   :       Repeat e.g. r:10
v       Show volts/states       //<0>   Usermacro x/assign x/list all
w/W     PSU (off/ON)
HiZ> m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
x. exit(without change)

(1)> 4
Set speed:
 1. ~5KHz
 2. ~50KHz
 3. ~100KHz
 4. ~400KHz

(1)> 3
Ready.
I2C> P
Pull-up resistors ON
I2C> W
POWER SUPPLIES ON
I2C> (1)
Searching 7bit I2C address space.
   Found devices at:0xA0(0x50 W) 0xA1(0x50 R) 0xA2(0x51 W) 0xA3(0x51 R)
I2C> [0xA2 2 [ 0xA3 r]
I2C START BIT
WRITE: 0xA2 ACK
WRITE: 0x02 ACK
I2C START BIT
WRITE: 0xA3 ACK
READ: 0xAA
NACK
I2C STOP BIT
I2C> [0xA2 2 77]
I2C START BIT
WRITE: 0xA2 ACK
WRITE: 0x02 ACK
WRITE: 0x4D ACK
I2C STOP BIT
I2C> [0xA2 2 [ 0xA3 r]
I2C START BIT
WRITE: 0xA2 ACK
WRITE: 0x02 ACK
I2C START BIT
WRITE: 0xA3 ACK
READ: 0x4D
NACK
I2C STOP BIT
I2C> [0xA2 2 0x77]
I2C START BIT
WRITE: 0xA2 ACK
WRITE: 0x02 ACK
WRITE: 0x77 ACK
I2C STOP BIT
I2C> [0xA2 2 [ 0xA3 r]
I2C START BIT
WRITE: 0xA2 ACK
WRITE: 0x02 ACK
I2C START BIT
WRITE: 0xA3 ACK
READ: 0x77
NACK
I2C STOP BIT
I2C>
I2C> m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
x. exit(without change)

(1)> 1
Ready.
HiZ>

Dakle, usli smo u i2c bus mod, upalili pull up otpornike, upalili napajanje, pustili skript (1) da pogleda koji sve i2c uredjaji se javljaju, procitali sadrzaj pozicije 2, upisali novu vrednost u poziciju 2, procitali je, upisali novu, procitali i nju, vratili se u “home” mod. Kao sto se da videti iz primera rad je prilicno jednostavan, [ je pocetak bus protokola .. za I2C to je start bit, ] je kraj protokola, u ovom slucaju stop bit, brojka je “slanje”, R je “primanje” .. i to je generalno to :)