Skip to content

Instantly share code, notes, and snippets.

@yoggy
Last active February 5, 2023 10:17
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yoggy/2f2ffc198cc154539506b8755f42dce8 to your computer and use it in GitHub Desktop.
Save yoggy/2f2ffc198cc154539506b8755f42dce8 to your computer and use it in GitHub Desktop.
何かと便利なBusPirateの使い方メモ

何かと便利なBusPirateの使い方メモ.md

(随時更新中)

https://c1.staticflickr.com/5/4580/37568889365_4e6c0aea82_n.jpg

何かと便利なUSB接続のデジタルI/Oツール。 I2C, SPI, UART, 1-WIREなどに対応。ADCもついてるので簡易的な電圧測定にも使える。

ヘルプ

HiZ>?
General                                 Protocol interaction
---------------------------------------------------------------------------
?       This help                       (0)     List current macros
=X/|X   Converts X/reverse 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/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
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               .       Bits to read/write e.g. 0x55.2
w/W     PSU (off/ON)            <x>/<x= >/<0>   Usermacro x/assign x/list all

購入直後はなにはともあれセルフテスト

次のように配線する

  • http://dangerousprototypes.com/docs/images/thumb/3/34/Bpv3v2go-pinout.png/600px-Bpv3v2go-pinout.png
  • 3.3V(赤)→ADC(黄色)、5V(オレンジ)→VPU(緑)

配線したら、HiZモードでコマンド~を入力してセルフテストを実行する

HiZ>~  ← セルフテストの実行開始
Disconnect any devices
Connect (Vpu to +5V) and (ADC to +3.3V)
Space to continue ← 3.3V(赤)→ADC(黄色)、5V(オレンジ)→VPU(緑)が接続されていることを確認してスペースを押す
Ctrl
AUX OK
MODE LED OK
PULLUP H OK
PULLUP L OK
VREG OK
ADC and supply
5V(5.00) OK
VPU(5.01) OK
3.3V(3.31) OK
ADC(3.34) OK
Bus high
MOSI OK
CLK OK
MISO OK
CS OK
Bus Hi-Z 0
MOSI OK
CLK OK
MISO OK
CS OK
Bus Hi-Z 1
MOSI OK
CLK OK
MISO OK
CS OK
MODE and VREG LEDs should be on!
Any key to exit
Found 0 errors.   ← セルフテストOK!
HiZ>

ピンアサイン

コマンドvで、現在の電圧値と、専用ケーブルの色とピンアサインの割り当てが表示される。

HiZ>v
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)  ← ここにピン番号と色が表示されている
GND     3.3V    5.0V    ADC     VPU     AUX     CLK     MOSI    CS      MISO
P       P       P       I       I       I       I       I       I       I
GND     0.00V   0.00V   0.00V   0.00V   L       L       L       L       L

http://dangerousprototypes.com/docs/images/b/be/Bp-cable-color-hk.png

電源供給 (コマンドw/W)

コマンドWで電源供給開始(3.3V/5V)。コマンドwで電源供給停止。

HiZ>v ← コマンドvで電圧確認
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     CLK     MOSI    CS      MISO
P       P       P       I       I       I       I       I       I       I
GND     0.00V   0.00V   0.00V   0.00V   L       L       L       L       L
        ↑電源が供給されていない

HiZ>W ← 電源供給開始
Command not used in this mode

HiZ>v ← コマンドvで電圧確認
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     CLK     MOSI    CS      MISO
P       P       P       I       I       I       I       I       I       I
GND     0.00V   0.00V   0.00V   0.00V   L       L       L       L       L
        ↑電源が供給されている状態

I2C

コマンドmでモードをI2Cに変更。コマンドvでピンアサインを確認。

HiZ>m  ← モード切替
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. LCD
9. DIO
x. exit(without change)

(1)>4  ← I2Cを選択
Set speed:
 1. ~5KHz
 2. ~50KHz
 3. ~100KHz
 4. ~400KHz

(1)>3 ← 適当に~100KHzを選択
Ready

I2C>v ← コマンドvで現在のピンアサインを確認
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     SCL     SDA     -       -       ← I2Cの場合、SDA,SCLのピンを使用する
P       P       P       I       I       I       I       I       I       I
GND     0.00V   0.00V   0.00V   0.00V   L       L       L       L       L

I2Cで使う場合は、あらかじめ、VPU(Vpullup pin、緑)に3.3Vもしくは5Vを接続して、プルアップ時の電圧を供給しておくこと。 これを忘れると、コマンドPを実行した際に"no voltage on Vpullup pin"の警告が表示される。

プルアップの設定は次の通り。

I2C>W  ← 電源供給開始
Power supplies ON
I2C>P  ← プルアップ有効
Pull-up resistors ON
I2C>v  ← 現在のピンアサイン・電圧を表示
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     SCL     SDA     -       -
P       P       P       I       I       I       I       I       I       I
GND     3.34V   5.00V   0.00V   5.01V   L       H       H       H       H
                                ↑ ここに3.3Vもしくは5Vの電圧が供給されていることを確認する   

I2Cの場合、マクロが2つ用意されている。

I2C>(0)
0.Macro menu
1.7bit address search
2.I2C sniffer

ここでは24LC64(I2Cで読み書きできるEEPROM)を使ってみる。

  • http://akizukidenshi.com/img/goods/C/I-00194.jpg

マクロ1を実行して、アドレススキャンを行う。以下は24LC64が接続されている状態

I2C>(1)
Searching I2C address space. Found devices at:
0xA0(0x50 W) 0xA1(0x50 R)

※24LC64はwrite用のアドレス(0xA0)とread用のアドレス(0xA1)の2つが見える
  24LC64のA0~A2はすべてGNDに接続した状態

24LC64は次のコマンドを受け付ける。

ポインタにアドレスを設定する
    [0xA0, 上位アドレス, 下位アドレス]
    
    ※24LC64は内部にポインタを持っていて、書き込み時・読み込み時に自動的にインクリメントされる

1バイト書き込み
    [0xA0, 上位アドレス, 下位アドレス, データ]
    
    ※書き込みを行うとポインタのアドレスが自動的にインクリメントされる

複数バイト書き込み 
    [0xA0, 上位アドレス, 下位アドレス, データ1, データ2, ....]
    
    ※書き込みを行うとポインタのアドレスが自動的にインクリメントされる

読み込み
    [0xA1, リード実行]
    
    ※現在ポインタに設定されているアドレスからデータを読み出す
    ※連続してリードを実行すると、連続したアドレスに格納されている内容を読み出すことができる

以下はBus Pirateを使ってEEPROMに対してデータの読み書きを行う例。

I2C>[0xa0 0x00 0x00 0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77] ← アドレス0x0000から8バイト書き込む
I2C START BIT
WRITE: 0xA0 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
WRITE: 0x11 ACK
WRITE: 0x22 ACK
WRITE: 0x33 ACK
WRITE: 0x44 ACK
WRITE: 0x55 ACK
WRITE: 0x66 ACK
WRITE: 0x77 ACK
I2C STOP BIT

I2C>[0xa0 0x00 0x00]  ← ポインタを0x0000に戻す
I2C START BIT
WRITE: 0xA0 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
I2C STOP BIT

I2C>[0xa1 rrrrrrrr]  ← 0xA1から8バイトreadする
I2C START BIT
WRITE: 0xA1 ACK
READ: 0x00
READ:  ACK 0x11
READ:  ACK 0x22
READ:  ACK 0x33
READ:  ACK 0x44
READ:  ACK 0x55
READ:  ACK 0x66
READ:  ACK 0x77  ← 書き込んだデータが順に表示される
NACK
I2C STOP BIT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment