Bus Pirate/zh-hans

From DP

Jump to: navigation , search
Language: English  • Español • ‪中文(简体)‬


bp-action-2ii

Contents

一、连接

Bus Pirate使用的是FT232芯片进行usb转ttl的通信,安装好驱动之后,PC会将Bus(下面都简称Bus)识别成一个串口,使用串口调试工具,比如串口调试精灵、超级终端、TeraTerm Pro Web打开串口,端口设置为:115200bps, 8/N/1。

连接之后,输入:? 进行验证,如果连接成功,会显示:

Bp-chinese-1translation.jpg

? 是显示帮助说明的,有显示则表明连接成功,可以进行调试了。 IO定义:

Bp-chinese-2translation.jpg

Bp-chinese-3translation.jpg

引脚名 引脚作用

MOSI 主要数据输出引脚, 数据输出引脚(SPI, JTAG), 串行数据 (1-Wire, I2C, KB), 发送(UART)

CLK 时钟信号(I2C, SPI, JTAG, 键盘)

MISO 主要数据输入引脚, 数据输入引脚(SPI, JTAG) ,接收 (UART)

CS* 片选(SPI), TMS (JTAG)

AUX 辅助IO口, 频率检测, 脉宽调制器

ADC 电压检测 (最大值6V)

Vpu 板载上拉电阻的上拉电压 (0-5V).

+3.3v +3.3V开关可控电源

+5.0v +5V开关可控电源

GND 地

Bp-chinese-4translation.jpg

二、基本命令

设置命令

m 模式设置

Bp-chinese-5translation.jpg

选择不同总线模式,默认在Hiz模式,所以引脚为高阻态。

i 版本信息(在模式中也可以用 i 来查看信息)

Bp-chinese-6translation.jpg

b 设置串口波特率

Bp-chinese-7translation.png

第10个选项是设置特殊波特率的,不设置直接回车,再按空格继续进行别的操作

~ 自检

Bp-chinese-8translation.png

用跳线冒跳上+5V和Vpu,以及+3.3V和ADC,按空格继续,自检完成后会显示:

Bp-chinese-9translation.png

# 重启

Bp-chinese-10translation.png

$ 转至Bootloader,升级时候需要

Bp-chinese-11translation.png

Mode灯会亮,这时候关闭终端,就能使用工具升级。

c/C 切换AUX和CS/TMS引脚控制

Bp-chinese-12translation.png

切换a/A/@对AUX和CS/TMS引脚的控制。

l/L 设置MSB/LSB优先级

Bp-chinese-13translation.png

l/L命令决定总线模式下读写字符的优先级:l是最高有效位先读,L是最低有效位先读

O 设置显示模式

Bp-chinese-14translation.png

设置显示模式是十六进制、十进制、二进制还是ASCII码。

公共命令

w/W 电源设置

Bp-chinese-15translation.png

用来控制3.3V和5V两个引脚的供电,但供电电流最大只有150mA。 注意:5V是由USB口供电,实际电压可能稍低于5V。

v 查看电源设置结果

Bp-chinese-16translation.png

命令v可以查看Bus所有引脚的状态。 第一行是引脚标号,与PCB图上的丝印一致。 第二行是在当前模式下引脚功能,其中电源引脚(3.3v, 5.0v), ADC, Vpu和AUX在所有模式下都有用,其他引脚在不同模式下功能不同,在单总线模式下,只有一个数据线OWD。 第三行显示各引脚IO状态。I代表输入,O代表输出,P代表电源。 第四行显示各引脚电平状态。模拟电压值直接显示,数字信号用H表示高电平,L表示低电平

p/P 上拉电阻的开关控制

Bp-chinese-17translation.png

控制上拉(下拉)电阻时候,只有在Vpu引脚有电压输入的时候才能通过控制四双向模拟开关芯片CD4066来控制开启。 4066芯片控制4个10K电阻对MOSI, CLOCK, MISO和CS四个引脚进行上拉或者下拉。

Bp-chinese-18translation.png

注意:只有当Vpu引脚有输入电压的时候才能开启上拉(下拉)电阻,这时候可以用v命令来检查引脚电压。

Bp-chinese-19translation.png

如果出现Waring,请检查Vpu引脚的输入电压,如果直接使用Bus自带的3.3V或者5V电源,需要使用W命令开启供电。

上拉电阻一般用于开漏(open drain)和开集(open collector)的总线形式,当Bus用于一般模式时开启了上拉电阻,会有一 个警告:WARNING: pins not open drain (HiZ)。

f AUX引脚进行频率测量

Bp-chinese-20translation.png

AUX引脚能测量0-40MHz的信号频率,原理是通过1秒的定时计数来计算出频率。只要频率不是太高,Bus都能自动进行设置并测量计算出频率。

g AUX引脚的信号发生器/PWM发生器

Bp-chinese-21translation.png

使用g命令启动信号发生器之后,可以设置频率和占空比。信号发生器可以产生1kHz-4MHz频率范围的信号,再次输入g命令关闭PWM。注意:当频率设置为4M的时候,占空比只有一种,占空比大于50%等同于100%高或者100%低。

S 伺服电机角度

Bp-chinese-22translation.png

用来控制伺服电机的转动角度,使用S或者g命令来停止角度控制。 注意:绝大多数的伺服电机都是Bus无法驱动的,需要使用外部电源来供电。

=X 将X以16进制/10进制/2进制显示

Bp-chinese-23translation.png

基本转换指令,在所有模式下有效。“=”后面输入任何格式数据,都能以16进制/10进制/2进制格式显示出来。如果想改变Bus数据输出格式,见命令O。

|X 对数据X取反

Bp-chinese-24translation.png

s BASIC脚本接口

Bp-chinese-25translation.png

Bus能使用脚本执行某些繁复的操作,详细说明见Bus的脚本说明。

d/D ADC引脚使用探针测量电压(单次测量/持续监测)

Bp-chinese-26translation.png

小写d命令用来从ADC引脚测量电压。 大写D命令是持续测量,按任何键终止。 注意:Bus量程是0-6V,最大能到6.6V,但不稳定会出错。

a/A/@ 控制AUX引脚状态(低电平/高电平/测量)

Bp-chinese-27translation.png

Bus上的一些引脚是可以用命令控制的,大写字母A可以把电平拉高到3.3V(最大电流25mA),小写字母a可以把电平拉低到地(最大电流25mA),@设置引脚为高阻态用来读取IO状态(最大5V)。 使用c/C命令切换后也可以控制CS引脚。

交互命令

这些命令都是控制芯片的总线和交互。每种总线模式都有一些同样的基本函数,比如R命令用来读取一个字节的数据。可以看看每种协议的总线模式。

[/{ 总线启动

Bp-chinese-28translation.png

这个命令用来启动总线,不同模式下功能也不同,启动(I2C总线),片选(SPI总线),重置(单总线),打开(UART串口)。

]/} 总线停止

Bp-chinese-29translation.png

这个命令用来终止总线。

r 读取一个字节的数据

Bp-chinese-30translation.png

r命令用来读取总线上一个字节的数据,也可以用r:1…255命令读取更多的数据。

0xa1/35/0b01 将数据写入总线

Bp-chinese-31translation.png

直接输入16进制/10进制/2进制数据(范围0-255),可以将数据写入总线,x:1…255可以写入多个重复数据。

“abc” 将字符串的ASCII码写入总线

Bp-chinese-32translation.png

将””中间的字符串的ASCII码写入总线。

空格/, 数字需要用空格和逗号隔开

Bp-chinese-33translation.png

顺序执行指令的时候,数字需要用空格或者逗号隔开,非数字的可以不隔开。

&/% 延时1us/ms

Bp-chinese-34translation.png

: 重复命令

Bp-chinese-35translation.png

有些Bus的命令需要重复执行很多次,那么在命令后面加上:指令和重复的次数就可以了,重复次数可以是16进制/10进制/2进制。

; 读/写数据(<16bit)的一部分

Bp-chinese-36translation.png

使用 ; 命令,可以读/写一部分数据,数据位数需小于16位,可以和重复命令:联合使用。

位操作命令

位操作命令只在几个特定的模式下有效。

^ 发送一个周期的时钟信号

Bp-chinese-37translation.png

发送一个周期的时钟信号,可以和:命令联合使用发送1-255个周期的时钟信号。

位操作命令

位操作命令只在几个特定的模式下有效。


^ 发送一个周期的时钟信号

Bp-chinese-38translation.png

发送一个周期的时钟信号,可以和:命令联合使用发送1-255个周期的时钟信号。

/和\ 控制时钟信号的高(/)低(\)电平

Bp-chinese-39translation.png

控制时钟信号的高低电平,可以使用延时。

–和_ 控制数据位的高低电平

Bp-chinese-40translation.png

控制数据信号的高低电平,可以使用延时。

! 读取一个时钟周期的数据

Bp-chinese-41translation.png

发送一个周期的时钟信号并读取总线上的一位数据。 在双向数据总线(单总线或者双总线)上,执行命令后,数据引脚被作为高阻态输入接口。

宏命令

宏可以用来进行复杂的操作,比如扫描I2C总线地址、查询智能卡、检测JTAG接口。宏的形式是以()中添加数字。宏(0)可以显示当前总线模式下可用的宏的列表。

(0) 显示当前总线模式下的宏列表

Bp-chinese-42translation.png

宏(0)可以显示当前模式下可以使用的宏的列表。

(#) 执行宏

Bp-chinese-43translation.png

执行()中数字所代表的宏。

<x=> 设置自定义宏

Bp-chinese-44translation.png

设置最多5条自定义宏,x代表自定义宏的标号,每条宏可以存储32个字符(包括空格)。

<0> 显示自定义宏的列表

Bp-chinese-45translation.png

宏<0>可以显示前面自定义的宏的列表。

<#> 执行自定义宏

Bp-chinese-46translation.png

输入宏标号会显示该宏存储的命令,按回车键执行存储的命令。

三、基本应用

总线模式

1-WIRE 单总线

总线: 1-Wire 连接: OWD(MOSI)和GND 输出形式: 开漏/开集(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 通常2K-10K,如果需要使用信号线供电,则使用小于2K的上拉电阻 最大电压: 5.5V,最好是5V

单总线使用单条信号线,大多数的设备也需要连接电源和地,但也有一些设备可以直接通过信号线供电而不需要单独的供电电源。 单总线的重置命令[/{可以检测总线是否异常,如何没有设备响应Bus将电平拉低的信号,会显示:

Bp-chinese-47translation.png

如果在使用重置命令后,总线电平长期置低,则表示无上拉电阻或者上拉电阻短接,会显示:


Bp-chinese-48translation.png

命令”-”和”_”用来设置数据状态位,并在下一个时钟信号时候使用”-^”。 命令(0)可以查看宏,(0xf0)查找总线设备。 1-Wire宏: 0. 宏列表 51. 读取ROM(0x33),对于单设备总线 85. 比较ROM(0x55),遵循64位地址 204. 跳过ROM(0xCC),遵循命令 236. 带警报的搜索(0xEC) 240. 搜索ROM(0xF0)

UART 通用异步串行数据总线

总线: UART,MIDI

连接: TX(MOSI),RX(MISO)和GND

输出形式: 3.3V输出,或者开漏(加上拉电阻,可以使用p/P命令开启自带的上拉电阻)

上拉电阻: 开漏输出模式必须加上拉电阻,阻值2K-10K。

最大电压: 5.5V,最好是5V

虽然UART和PC串口的电平(-13V到+13V)不同,但逻辑时序兼容。 需要设置有:波特率、数据校验、停止位、接收间隔、输出电平

UART的数据读取和Bus的其他模式不同,因为数据到达的时间不确定,需要做特殊处理。UART模式会显示帧错误和奇偶校验错误,并且会自动清理缓冲区溢出。 帧错误标志”-f”,奇偶校验错误标志”-p”,当读取UART数据的时候,如果出现类似”READ: -p -f 0×40”这种标志,就表明有错误,出现这种错误的原因是发射端波特率设置不对应。 Bus有4字节的UART缓冲区用来保存数据直到使用”r”命令来读取或者使用”["命令开启终端自动显示,当缓冲区数据存满,新的数据会丢失,这就叫缓冲区溢出。 当Bus检测到缓冲区溢出错误,比如”READ: 0x40 *Bytes dropped*”,会自动清除掉,并提醒你丢失数据。当执行”r” ”{” ”[”命令的时候会自动清理掉溢出的数据。当使用”]”命令关闭UART自动显示并且传入了超过5个字节的数据,下一个r命令会清除缓冲区溢出错误并显示”*Bytes dropped*”警告。 为了防止缓冲区问题,Bus减少UART数据通过USB接口传输的数据总量,默认的显示模式将4字节的16进制数据减为单字节的数据。一个更好的方法是使用宏(1)或者(2)来查看一个无格式的UART输出,这是1:1的数据迁移,需要传输速率尽可能高。

UART宏: 0. 宏列表

1. UART桥

2. UART实时监控

3. 可控UART桥


宏(1)UART桥模式会创建一个串口->USB的桥接,此模式会自动清除缓冲区溢出错误,当出现缓冲区溢出错误时MODE灯会自动关闭用来提醒,只有重启命令#能终止此模式。

宏(3)是另一种UART桥模式,增加了CTS和RTS控制信号,CTS对应于CS引脚(PIC单片机的输入是从外部通过FTDI的USB转串口芯片输入的),RTS对应于CLK引脚(PIC单片机的输出是FTDI芯片输出的拷贝)。 注意:Bus与PC的连接和UART桥不是同样速度的,除非使用b命令设置了,否则USB端速率会是默认的115200bps,如果PC上位机程序设置串口速率不对应,就会造成输入混乱,因为Bus默认PC输入速率是115200bps。假如你想使用PC上位机程序设置的速率,则需要先使用b命令将Bus的速率调整为相同的波特率。 宏(2)UART实时监控会显示没有经过格式化的原始数据,使用任何按键退出监控模式。这种模式适用于一些变种格式的终端输出。这个宏类似宏(1)但没有数据传输能力,它能用任何键退出。此模式对于监控在其他模式下会引起的缓冲区溢出错误的高速UART输入很有用。 MIDI是电子乐器的缩写,它得到接口是一个设置为312500bps/8/b/1的标准串口。MIDI是一个环形网络,每个节点都有输入输出接口,每个节点都会把信息传给环内的下一个节点,并且输入和输出都是光电隔离的,基本信号是5V,5mA的,详细情况请查询相关资料。 UART连接图:

I2C 两线式串行总线

总线: I2C 连接: SDA(MOSI)、SCL(CLK)和GND 输出形式: 开漏/开集(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 通常2K-10K 最大电压: 5.5V,最好是5V

I2C总线是一种通用的两线式低速总线接口。 I2C是集电极开路总线,需要上拉电阻把时钟线和数据线拉高并产生数据1,I2C不能输出高电平,只能将电平拉低没如果没有上拉电阻就不能输出1,地址扫描器就是利用了这种错误应答来扫描地址的。

如果没有上拉电阻,使用地址扫描器会有警告。 I2C宏: 0. 宏列表 1. 7位地址搜索

I2C监听

绝大多数的I2C兼容芯片都能在DateSheet中找到I2C地址,但如果你在用一颗没有datesheet的芯片,或者你懒得找datesheet,那么可以用宏(1)。Bus有一个内嵌的地址扫描器,可以通过地址响应检索出所有的I2C地址。这种暴力模式能够很快的检索出任何有应答的芯片的地址,哪怕该芯片是没有任何参考文档。 I2C芯片有7位地址,所以最多能用128个设备通过同样的两条线进行通讯。另外需要一个额外的地址位来确定是写芯片(0)还是读芯片(1)。 比如说我连接一个EEPROM芯片24LC,它七位地址是0101000(16进制是0x50),那么它的写地址是01010000(0xA0),读地址是01010001(0XA1)。宏(1)可以扫描出芯片默认的地址和读写地址,datesheet里一般会给出7位地址,但在逻辑分析仪、监听器或者调试器中,大多辨识为8位数值。 宏(2)I2C总线监听的采样频率为70KHz-100KHz,尽管不能替代逻辑分析仪,但这个功能还是很有用的。 [/] 开始/停止位 +/- ACK/NACK(正确应答信号/否定应答信号) I2C的开始停止位是Bus的正常语法:

Bp-chinese-481translation.png



监听到的数据在用户模式中通常以16进制显示,使用任何键退出。 注意:监听输出使用了一个4096字节的环形缓冲区,监听到的数据会依次存入环形缓冲区,并在UART空闲的时候输入到PC机中,只要注意UART速率和显示模式,就能避免数据丢失的问题。 下面是一个读写DS1307时钟芯片RAM的例子:

Bp-chinese-49translation.png


I2C读取操作Bus的输出必定是ACK或者NACK,这些都是Bus完成的,但你必须知道一点它的工作原理。如果没有后续命令,I2C的程序库是不会在读取数据之后发送ACK/NACK信号的,如果后续命令是开始信号或者终止信号,Bus会发送一个NACK信号,其他任何命令都是发送ACK信号。在终端会输出显示(N)ACK状态。 写命令和读命令没有什么不同。下面是一个使用重复命令进行批量读取的例子:

Bp-chinese-50translation.png


还有一个结论就是:系统的ACK/NACK延时会导致数据读取不完全。

Bp-chinese-51translation.png


这个例子中先进行了一个读取操作([0xd1),然后读取一个字节数据(r),后面Bus不知道下一个命令是读取命令(r)还是终止命令(]),就导致了第九位暂停并显示*(N)ACK PENDING的警告。下一个命令是读取命令(r),于是Bus执行读取命令读取下一个字节数据并显示前一个字节数据,下一个指令仍然待定。而下一个指令是终止命令(]),Bus读取结束并发送NACK指令,最后发送终止状态。 I2C连接图:


Bp-chinese-52translation.png


SPI 串行外围设备接口总线

总线: SPI 连接: MOSI、MISO、CLK、CS和GND 输出形式: 普通3.3V或者集电极开路(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 漏极开路必需加上拉电阻,通常2K-10K 最大电压: 5.5V,最好是5V

需要设置:速度、空闲时钟电平、时钟输出边沿、采样输入相位、片选使能、输出电平。 SPI宏: 0. 宏列表 1. SPI总线监听(CS为低电平时触发) 2. SPI总线监听(无触发条件) 10. 只改变时钟电平为0(低电平) 11. 只改变时钟电平为1(高电平) 12. 只改变时钟边沿为0(上升沿) 13. 只改变时钟边沿为1(下降沿) 14. 只改变采样相位为0(中间) 15. 只改变采样相位为1(末尾)

SPI总线监听频率能到10MHz。具体有你在SPI模式设置决定。 [/] CS片选能/不能 0xXX MOSI读取 (0xXX) MISO读取 SPI总线监听能监听所有数据,或者依据CS引脚电平状态进行过滤,从MOSI和MISO引脚监听到的数据都会以16进制显示出来,其中MISO引脚的数据显示在()当中。 注

Bp-chinese-53translation.png


注意:监听器使用了一个4096字节的环形缓冲区,监听到的数据会依次存入环形缓冲区,并在UART空闲的时候输入到PC机中,只要注意UART速率和显示模式,就能避免数据丢失的问题。 但当一个足够长的数据流突然输入仍然会造成缓冲区溢出,此时MODE灯会熄灭。当MODE灯熄灭,所有的数据都应当废弃——这个问题在以后会改善的。 SPI硬件上有一个4字节的缓冲区,如果此缓冲区在将数据传入环形缓冲区之前被填满,那么终端会显示Can't keep up并迅速的返回SPI。 在监听模式,输出引脚会变成输入引脚。 当SPI监听设置为CS低电平触发时,理论上CS下降沿和该周期最开始的时钟信号最小间隔为120ns,但实际测试中最小间隔为1.275us。当SPI监听设置为无触发条件时,CS线和最开始的数据线需要最少27us-50us的延时间隔。 SPI监听遵循模式设置时的空闲时钟电平和时钟输出边沿,不管采样输入相位。 时钟边沿/时钟电平/采样相位设置宏: 宏10-15能快速改变SPI模式设置的一些参数,但这是个没有使用者反馈信息的测试功能。

Bp-chinese-54translation.png


依次是:速度、时钟电平、时钟边沿、采样相位、输出状态 SPI连接图:

Bp-chinese-55translation.png


2WIRE 通用双总线

总线: 2Wire 连接: SDA(MOSI)、SCL(CLK)和GND 输出形式: 普通3.3V或者集电极开路(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 漏极开路必需加上拉电阻,通常2K-10K 最大电压: 5.5V,最好是5V

原始双总线协议和I2C类似,但它只是逐位控制引脚而没有按位的ACK应答信号,I2C可以算是一种基础的双总线协议。 需要设置:速度、输出电平 2Wire宏: 0. 宏列表 1. 解析ISO7813-3智能卡并解析ATR应答字符串 2. 仅解析ISO7813-3智能卡(使用你自己的ATR命令) 2Wire连接图:

Bp-chinese-56translation.png


3WIRE 通用三总线

总线: 3Wire(比如三线SPI) 连接: MOSI、MISO、CLK、CS和GND 输出形式: 普通3.3V或者集电极开路(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 漏极开路必需加上拉电阻,通常2K-10K 最大电压: 5.5V,最好是5V 原始三总线协议,类似SPI,但也是逐位控制引脚的。 需要设置:速度、CS片选、输出电平 3Wire连接图:

Bp-chinese-57translation.png


其他应用

LCD 液晶测试

总线: LCD 连接: SDA(MOSI)、SCL(CLK)和GND(注意:这是连接到LCD转接板上的引脚) 输出形式: 开漏/开集(加上拉电阻,可以使用p/P命令开启自带的上拉电阻) 上拉电阻: 通常2K-10K 最大电压: 5.5V,最好是5V

LCD宏: 0. 宏列表 1. LCD重置 2. LCD初始化 3. LCD清屏 4. 设置指针方位 6. 写测试数字 7. 写测试字符串

DIO 自由控制模式

此模式给用户100%的控制权限,使用命令控制Bus的所有IO引脚。 使用和二进制bitbang模式相同命令来控制每个引脚的状态和变化。

四、基本示例

总线模式

读写24C02(EEPROM)

Bp-chinese-58translation.png


解释下: 首先使用宏(1)查看硬件地址,我上面接了两个I2C总线器件,其中24C02的写地址是0xAE,读地址是0xAF。 写数据指令:[0xae 0 1 2 3] 起始信号->器件写地址->从存储地址0开始写->写数据1->写数据2->写数据3->终止信号 I2C总线写数据的时序就是这样,当然,器件地址根据情况写,存储地址可以边,写入的数据可以是单个也可以是多个,多个则是依次写入。

读数据指令:[0xae 0]&[0xaf r:3] 起始信号->器件写地址->从存储地址0开始读->终止信号->延时->起始信号->器件读地址->读3个字节数据->终止信号 I2C协议读数据也需要按照读时序进行操作,地址和读取的字节数可调。