BUS PIRATE FIRMWARE update (V.0C), JTAG and much more

Download: buspirate.v0c.zip

A few weeks ago we wrote about our Bus Pirate universal serial interface tool. We used the recent holiday to add some new features, like a JTAG programmer, macros, frequency measurement, and more. A major code reorganization makes everything simpler to read and update.

Check out the a demonstration of the new features below. We’re compiling a roadmap and wish list, so share your ideas in the comments. You can also see how we used the Bus Pirate to read a smart card and test-drive an I2C crystal oscillator.

New protocols

I2C>m <–setup mode 1. HiZ <– high impedance pins (safe mode) 2. 1-WIRE <– not ready for this release 3. UART 4. I2C 5. SPI 6. JTAG <– interface and programmer 7. RAW2WIRE 8. RAW3WIRE MODE>1
900 mode SET
HiZ>

This firmware release lists three new protocols.

Hi-Z makes all pins high impedance/input, a safe state that won’t damage an attached circuit. To be safe, the Bus Pirate now starts in this mode.

1-Wire is listed, but we couldn’t include it in this release because we still don’t have any parts to test with our library. This is just a placeholder for now, but it will be added as soon as we get a 1-Wire part to test.

We wrote a simplified JTAG interface that includes a XSVF player for programming JTAG device chains.

**We included a hardware I2C library, but according to the device errata there’s a bug in the 24FJ64GA002 rev3 I2C module. This will work with a different chip (e.g. a 28pin dsPIC33).

Connection table

PIN

1-Wire

I2C*

SPI**

RS232

JTAG

B9

SDA

SDA

Mózi

TDI

B8

SCL

CLK

TCK

B7

MISO

RX

TDO

B6

CS

TX

TMS

B5

Aux

Aux

Aux

Aux

Aux

Talaj

Gnd

Gnd

Gnd

Gnd

Gnd

*also raw 2 wire. **also raw 3 wire.

The new modes connect to the Bus Pirate as described in the table.

New features and settings

Frequency measurement

HiZ>F <– do a frequency count 9xx FREQ count ON AUX: 22199552Hz (22MHz) HiZ>

As seen in the DS1077 demonstration, we added a frequency counter to the Bus Pirate’s AUX pin.  ‘F’ steps frequency, maximum of about 50MHz.

Assign axillary control

HiZ>c <– menu c AUX PIN 1. AUX (DEFAULT) 2. CS/TMS MODE>1 <– set AUX control mode 9xx AUX: DEFAULT setting (AUX PIN) HiZ>

Sometimes we need to control the chip select (CS) /JTAG state device (TMS) pins manually. ‘c’ toggles the pin control between the axillary pin and the chip select pin.

Set terminal speed

HiZ>b <– menu b Set serial port speed: (bps) 1. 300 … 9. 115200 SPEED>9 <– set speed Adjust your terminal and press space to continue HiZ>

‘b’ adjusts the PC-side serial port speed.

Macros

A new syntax addition, ‘(#)’, triggers protocol dependent macros.

JTAG>(0) <–macro 0 0.Macro menu 1.Reset chain 2.Probe chain 3.XSVF player JTAG>

In any mode, use the macro (0) to display a menu of available macros.

I2C address search

I2C>(1) <–scan I2C addresses macro xxx searching 7bit I2C address space. Found devices at: 0xB0 0xB1 <–DS1077 responds to write and read address I2C>

The I2C library includes a macro to automatically search the I2C address range for devices. helpful when you work with an unknown chip.

Raw2wire smart card ISO 7813-3 ATR

RAW2WIRE>(1)<–ATR and decode macro ISO 7813-3 ATR 950 AUX LOW 951 AUX HIGH 4xx RAW2WIRE 0x01 CLOCK TICKS 950 AUX LOW ISO 7813-3 reply: 0xA2 0x13 0x10 0x91<–ATR bytes Protocol: 2 wire <–decoded ATR data Read type: to end<– Data units: 256 <– Data unit length: 8 bits <– RAW2WIRE>

Macro 1 resets and identifies a smart card. For much more about the ISO7813-3 ATR, see how we used the Bus Pirate to read a smart card.

JTAG

JTAG is a debugging and programming interface for all kinds of electronics. The raw hardware interface can be accessed with the Bus Pirate’s raw 3 wire library, but we added a few features to make it much easier.

JTAG has different modes where data entry does different things. Modes are navigated with the JTAG TMS signal; there are a bunch of JTAG modes, called states.The Bus Pirate’s JTAG library is just the raw 3 wire library, enhanced to help with JTAG state changes.

We only implemented the JTAG states we need to get data in and out of a JTAG device chain: reset, idle, data register, and instruction register. Macro (1) issues a JTAG chain reset, and initializes the chain to the idle state. { puts the JTAG chain in data register mode. [ puts the chain in instruction register mode. ] or } return the chain to the idle state. The Bus Pirate has an internal state device tracker that is smart enough to manage the chain without explicitly returning the chain to idle; in other words, you don’t have to close your tags. The state device tracker reports every state change to help debug problems.

JTAG>[0xfe {rrrr} <– same as [0xfe]{rrrr} xxx JTAGSM: already IDLE xxx JTAGSM: IDLE->Instruction Register (DELAYED ONE bit FOR TMS)
610 JTAG ready TO write IR <– JTAG chain instruction register 620 JTAG WRITE: 0xFE <– request ID xxx JTAGSM: (WROTe késleltetett bit) ir-> tétlen <-back to alaple XXX JTAGSM: IDLE-> Adatregisztráció <-Idle az adatregiszterhez 611 jtag kész olvasni / írni dr 630 jtag olvasható: 0x93 <-device id 630 jtag olvasható: 0x40 630 jtag olvasható: 0x60 630 jtag olvasható: 0x59 XXX JTAGSM: DR-> Idle <-back to Idle 640 jtag üresjárat Jtag>

Itt van egy rövid kölcsönhatás egy XILINX XC9572 CPLD-vel. Az utasításregiszterre megyünk ([), és küldjük el az eszközazonosító kérelem parancsot (0xfe). Then, we go the the data register( { ), read four bytes (rrrr, or r:4 shorthand), and return to idle ( } ).

Mi a késleltetett bit?

JTAG requires that the last data bit written to the instruction register be entered at the same time as the state change. Mivel a busz kalóznak nincs módja előrejelzése, amikor ténylegesen megváltoztatjuk az államokat, késlelteti az utolsó bájtok utolsó bitét, amíg a három dolog egyike történik:

Lépjen ki az A},] vagy {Command segítségével

Írjon egy másik byte értéket

Egy olvasási parancs

A függőben lévő bitek nem törlődnek bites műveletek (mint például! Vagy ^). Tegye ezeket az utolsó bájt írása előtt, vagy módosítsa a kódot. Nem hajtottuk végre a függőben lévő írásokat az adatregiszterre, de valószínűleg szükség van rá. Lehet, hogy végre kell hajtania ezt, ha írja az adatregisztert, hanem csak olvassa el, mint mi.

Jtag makrók

Jtag> (1) <-macro 1 xxx jtagsm: reset XXX JTAGSM: RESET-> IDLE
Jtag>

A JTAG makró (1) visszaállítja a JTAG láncot, majd előrehaladja az üresjáratnak.

Jtag> (2) <-macro 2 xxx jtag init lánc xxx jtagsm: reset XXX JTAGSM: RESET-> IDLE
XXX JTAGSM: Idle-> Útmutató regiszter (késleltetett egy bit a TMS-hez)
xxx jtagsm: ir-> tétlen
XXX JTAGSM: Idle-> Adatregisztráció
xxx jtagsm: dr-> tétlen
xxx jtagsm: reset
XXX JTAGSM: RESET-> IDLE
XXX JTAGSM: Idle-> Adatregisztráció
XXX JTAG Láncjelentés: <-start jelentés 0x01 eszköz (ek) # 0x01: 0x93 0x40 0x60 0x59 <-device IDS xxx jtagsm: dr-> tétlen
Jtag>

Makró (2) Visszaállítja a láncot, számolja az eszközöket, és jelentette az összes eszközazonosítót.

Jtag> (3) <-macro 3 6xx jtag xsvf lejátszó XXX XON / XOFF Flow Control szükséges <-required! XXX Nyomja meg a Z gombot a folytatáshoz <- Nyomja meg a z gombot xxx kezdődik az xsvf benyújtása <- küldje el a fájlt 6 × 0 xsvf ok <- Eredmény vagy hiba A számítógép az xoff után max 0x05 bájtot ábrázolt (ez rendben van) 6xx Nyomja meg a Z 5-szer gombot a folytatáshoz <- Folytatás Jtag>

A MACRO 3 egy XSVF lejátszó / programozó, a XILINX kóddal. Az XSVF az SVF byte formátumú, a Xilinx (PDF) által leírtak szerint. Az XSVF fájlokat bármely láncra lehet összeállítani a megfelelő generikus JTAG definíciós fájlokkal, akár nem xilinx eszközökkel. Sikeresen használtuk a Hercules és Tera kifejezés bináris transzferjét, hogy XSVF fájlokat küldjenek a programozónak.

JTAG in some cases pauses longer than it takes the PC to transfer a byte of data, so we implemented XON/XOFF software flow control for the XSVF player. A terminálnak Xon / Xoff Flow Control módban kell lennie, mielőtt elküldi az XSVF fájlt, vagy a programozó sikertelen lesz. even with software flow control, a modern PC has already send several bytes through the layers of operating system before it receives the flow control signals. Ezzel foglalkozunk azzal, hogy ezeket a bájtokat felzárkózik, mielőtt továbblépnénk, ezt a “dribbled” bájtok maximális számának jelentik.

Ha hiba van a feltöltésben, akkor a PC valószínűleg továbbra is a bámult bámult a busz kalózon. A hibaüzenetek megjelenítéséhez, és kerülni kell a szemetet a terminálon, az XSVF lejátszó öt kisbetűs z-t vár, mielőtt visszatér a kéréshez. Ezt a szekvenciát választottuk, mert soha nem fog megjelenni egy XSVF fájlban.

* Ne feledje, hogy az XSVF-lejátszó nem tartja tiszteletben a JTAG Hi-Z PIN beállítást. Elment, ez meghiúsul. Legyen óvatos keverési feszültségek puffer nélkül.

Jobb kódszerkezet

A 0b és a 0c firmware közötti legjelentősebb különbség a kódszerkezet súlyos javulása. A busz kalóz számos inkarnációban létezett, mielőtt a kezdeti cikkhez csomagoltuk volna. A V.0C összehangolja a kódkönyvtárakat, és egyszerűbbé teszi az új protokollok hozzáadását.

A testreszabott protokoll hozzáadása

A busz kalózkódja kezeli a felhasználói felületet, és két változót ad az aktív protokoll könyvtárba. Az első változó egy parancs, például cmd_read, cmd_readbulk vagy cmd_write. A teljes parancskészlet a Base.h. A második változó választható érték. Egy egyszerű CMD_READ parancs elhalad az értéket, az ömlesztett olvasási parancs átadja az olvasási bájtok számát, az írási parancs átadja az értéket, hogy a buszra írjon, stb. buszos akciókra.

Három különböző technikát alkalmaztunk, hogy összekapcsoljuk a parancsokat a buszos akciókhoz. Az egyszerű kód közvetlenül egy hatalmas kapcsoló nyilatkozatba léphet, mint a SPI.C. A külső könyvtárak egyetlen összekötő funkciót használnak, mint például az i2c.c és az M_I2C_1.C. much more complicated protocols use the switch statement to call functions included in the library (raw2wire.c, raw3wire.c, jtag.c UART.c). Az IO terminál hasznos funkciói szerepelnek a Base.h / C-ben.

A hatalmas kódjavítás miatt most csak enyhén zavaró, hogy új protokollt regisztráljon a busz kalózával:

base.h – hozzon létre egy dA protokoll efiníciója. Az utolsó bejegyzés jelenleg “#define raw3wire 7”, így a következő bejegyzés lehet “#define mycustomwire 8”.

Buspirate.c – Tartalmaz egy fejléc fájlt, amely hozzáférést biztosít a feldolgozási funkcióhoz. Menübejegyzés hozzáadása a Char * Mode [] = változó listában. A menü bejegyzésének ugyanolyan helyzetben kell lennie a listán, mint a bázis.h-ben megadott szám. Ha a MyCustomwire a 8. szám, akkor az üzemmódváltozó nyolc bejegyzése legyen. Végül adjunk hozzá egy további kapcsolót a BPProcess () függvényhez, amely hívja a testreszabott könyvtár feldolgozási rutint, ha az üzemmód “MyCustomwire” -ra van állítva.

Tegye tovább: egy nap egy nap kívánságlistát

Összeállítottuk a visszajelzést, amelyet három kívánságlistára jutottunk: protokollok, funkciók és makrók.

Protokollok

1-vezeték, felsorolással (* készen áll, amint van alkatrészünk tesztelni)

OBD-II (köszönöm [Shadyman])

TUD

MIDI (Wikipedia)

DMX512-A

Irda, RC5x stb.

Egyes protokollok külső adóvevőt igényelnek.

Jellemzők

Impulzusszélesség modulátor, frekvencia generátor

“Várja meg a megszakítás parancsáig

A frekvencia mérése konvertálása a beviteli perifériához

Hagyja a frekvencia mérését bármely PIN-kódon

Jelentés az aktuális konfigurációs beállításokról és a PIN-államokról.

Integer ismételt értékek ömlesztett olvasás, órajelek, késések stb.

CRC generátor

Makrók

Átlátszó UART híd

SD kártya inicializálás, meta adat kivonat és dump

EEPROM program / dump (I2C / SPI)

Nokia 6100 LCD inicializálás, vezérlés

NMEA GPS adat dekóder

Van valami, amit hozzáadhat a listához?

Firmware Letöltés: Buspirate.v0c.zip

Leave a Reply

Your email address will not be published. Required fields are marked *