Bus Pirate/zh-hans

From DP

Revision as of 09:58, 13 January 2012 by Ian (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation , search

Bus Pirate使用指南

Contents

name="__RefHeading__241_1881773865" 目录

[#__RefHeading__241_1881773865 目录][#__RefHeading__241_1881773865 2]

[#__RefHeading__243_1881773865 一、连接][#__RefHeading__243_1881773865 4]

[#__RefHeading__245_1881773865 二、基本命令][#__RefHeading__245_1881773865 6]

[#__RefHeading__247_1881773865 1. 设置命令][#__RefHeading__247_1881773865 6]

[#__RefHeading__249_1881773865 (1). m 模式设置][#__RefHeading__249_1881773865 6]

[#__RefHeading__251_1881773865 (2). i 版本信息(在模式中也可以用 ][#__RefHeading__251_1881773865 i 来查看信息)][#__RefHeading__251_1881773865 7]

[#__RefHeading__253_1881773865 (3). b 设置串口波特率][#__RefHeading__253_1881773865 7]

[#__RefHeading__255_1881773865 (4). ~ 自检][#__RefHeading__255_1881773865 7]

[#__RefHeading__257_1881773865 (5). # 重启][#__RefHeading__257_1881773865 7]

[#__RefHeading__259_1881773865 (6). $ 转至][#__RefHeading__259_1881773865 Bootloader,升级时候需要][#__RefHeading__259_1881773865 8]

[#__RefHeading__261_1881773865 (7). c/C 切换][#__RefHeading__261_1881773865 AUX][#__RefHeading__261_1881773865 CS/TMS引脚控制][#__RefHeading__261_1881773865 8]

[#__RefHeading__263_1881773865 (8). l/L 设置][#__RefHeading__263_1881773865 MSB/LSB优先级][#__RefHeading__263_1881773865 8]

[#__RefHeading__265_1881773865 (9). O 设置显示模式][#__RefHeading__265_1881773865 8]

[#__RefHeading__267_1881773865 2. 公共命令][#__RefHeading__267_1881773865 9]

[#__RefHeading__269_1881773865 (10). w/W 电源设置][#__RefHeading__269_1881773865 9]

[#__RefHeading__271_1881773865 (11). v 查看电源设置结果][#__RefHeading__271_1881773865 9]

[#__RefHeading__273_1881773865 (12). p/P 上拉电阻的开关控制][#__RefHeading__273_1881773865 10]

[#__RefHeading__275_1881773865 (13). f AUX引脚进行频率测量][#__RefHeading__275_1881773865 11]

[#__RefHeading__277_1881773865 (14). g AUX引脚的信号发生器][#__RefHeading__277_1881773865 /PWM发生器][#__RefHeading__277_1881773865 11]

[#__RefHeading__279_1881773865 (15). S 伺服电机角度][#__RefHeading__279_1881773865 11]

[#__RefHeading__281_1881773865 (16). =X ][#__RefHeading__281_1881773865 X][#__RefHeading__281_1881773865 16进制][#__RefHeading__281_1881773865 /10进制][#__RefHeading__281_1881773865 /2进制显示][#__RefHeading__281_1881773865 12]

[#__RefHeading__283_1881773865 (17). |X 对数据][#__RefHeading__283_1881773865 X取反][#__RefHeading__283_1881773865 12]

[#__RefHeading__285_1881773865 (18). s BASIC脚本接口][#__RefHeading__285_1881773865 12]

[#__RefHeading__287_1881773865 (19). d/D ADC引脚使用探针测量电压][#__RefHeading__287_1881773865 (单次测量][#__RefHeading__287_1881773865 /持续监测][#__RefHeading__287_1881773865 ) 12]

[#__RefHeading__289_1881773865 (20). a/A/@ 控制][#__RefHeading__289_1881773865 AUX引脚状态][#__RefHeading__289_1881773865 (低电平][#__RefHeading__289_1881773865 /高电平][#__RefHeading__289_1881773865 /测量][#__RefHeading__289_1881773865 ) 13]

[#__RefHeading__291_1881773865 3. 交互命令][#__RefHeading__291_1881773865 13]

[#__RefHeading__293_1881773865 (21). [/{ 总线启动][#__RefHeading__293_1881773865 13]

[#__RefHeading__295_1881773865 (22).]/} 总线停止][#__RefHeading__295_1881773865 13]

[#__RefHeading__297_1881773865 (23). r 读取一个字节的数据][#__RefHeading__297_1881773865 14]

[#__RefHeading__299_1881773865 (24). 0xa1/35/0b01 将数据写入总线][#__RefHeading__299_1881773865 14]

[#__RefHeading__301_1881773865 (25). “abc” 将字符串的][#__RefHeading__301_1881773865 ASCII码写入总线][#__RefHeading__301_1881773865 14]

[#__RefHeading__303_1881773865 (26). 空格][#__RefHeading__303_1881773865 /, 数字需要用空格和逗号隔开][#__RefHeading__303_1881773865 15]

[#__RefHeading__305_1881773865 (27). &/% 延时][#__RefHeading__305_1881773865 1us/ms 15]

[#__RefHeading__307_1881773865 (28). : 重复命令][#__RefHeading__307_1881773865 15]

[#__RefHeading__309_1881773865 (29). ; ][#__RefHeading__309_1881773865 /写数据][#__RefHeading__309_1881773865 (的一部分</font>][#__RefHeading__309_1881773865 16]

[#__RefHeading__311_1881773865 4. 位操作命令][#__RefHeading__311_1881773865 16]

[#__RefHeading__313_1881773865 (30). ^ 发送一个周期的时钟信号][#__RefHeading__313_1881773865 16]

[#__RefHeading__315_1881773865 (31). /][#__RefHeading__315_1881773865 \ 控制时钟信号的高][#__RefHeading__315_1881773865 (/)][#__RefHeading__315_1881773865 (\)电平][#__RefHeading__315_1881773865 16]

[#__RefHeading__317_1881773865 (32). –][#__RefHeading__317_1881773865 _ 控制数据位的高低电平][#__RefHeading__317_1881773865 17]

[#__RefHeading__319_1881773865 (33). ! 读取一个时钟周期的数据][#__RefHeading__319_1881773865 17]

[#__RefHeading__321_1881773865 5. 宏命令][#__RefHeading__321_1881773865 17]

[#__RefHeading__323_1881773865 (34). (0) 显示当前总线模式下的宏列表][#__RefHeading__323_1881773865 17]

[#__RefHeading__325_1881773865 (35). (#) 执行宏][#__RefHeading__325_1881773865 18]

[#__RefHeading__327_1881773865 (36). 设置自定义宏][#__RefHeading__327_1881773865 18]

[#__RefHeading__329_1881773865 (37). 显示自定义宏的列表][#__RefHeading__329_1881773865 18]

[#__RefHeading__331_1881773865 (38). <#> 执行自定义宏][#__RefHeading__331_1881773865 18]

[#__RefHeading__333_1881773865 三、基本应用][#__RefHeading__333_1881773865 19]

[#__RefHeading__335_1881773865 1. 总线模式][#__RefHeading__335_1881773865 19]

[#__RefHeading__337_1881773865 (1). 1-WIRE 单总线][#__RefHeading__337_1881773865 19]

[#__RefHeading__339_1881773865 (2). UART 通用异步串行数据总线][#__RefHeading__339_1881773865 19]

[#__RefHeading__341_1881773865 (3). I2C 两线式串行总线][#__RefHeading__341_1881773865 21]

[#__RefHeading__343_1881773865 (4). SPI 串行外围设备接口总线][#__RefHeading__343_1881773865 23]

[#__RefHeading__345_1881773865 (5). 2WIRE 通用双总线][#__RefHeading__345_1881773865 25]

[#__RefHeading__347_1881773865 (6). 3WIRE 通用三总线][#__RefHeading__347_1881773865 25]

[#__RefHeading__349_1881773865 2. 其他应用][#__RefHeading__349_1881773865 26]

[#__RefHeading__351_1881773865 (7). LCD 液晶测试][#__RefHeading__351_1881773865 26]

[#__RefHeading__353_1881773865 (8). DIO 自由控制模式][#__RefHeading__353_1881773865 26]

[#__RefHeading__355_1881773865 四、基本示例][#__RefHeading__355_1881773865 27]

[#__RefHeading__357_1881773865 1. 总线模式][#__RefHeading__357_1881773865 27]

[#__RefHeading__359_1881773865 (1). 读写][#__RefHeading__359_1881773865 24C02(EEPROM) 27]

name="__RefHeading__243_1881773865"一、连接

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

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

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

IO定义:

{| cellspacing="0" cellpadding="7" border="1"

|- | 引脚名 | 引脚作用 |- | bgcolor="#efd3d2" | MOSI | bgcolor="#efd3d2" | 主要数据输出引脚, 数据输出引脚(SPI, JTAG), 串行数据 (1-Wire, I2C, KB), 发送(UART) |- | CLK | 时钟信号(I2C, SPI, JTAG, 键盘) |- | bgcolor="#efd3d2" | MISO | bgcolor="#efd3d2" | 主要数据输入引脚, 数据输入引脚(SPI, JTAG) ,接收 (UART) |- | CS* | 片选(SPI), TMS (JTAG) |- | bgcolor="#efd3d2" | AUX | bgcolor="#efd3d2" | 辅助IO, 频率检测, 脉宽调制器 |- | ADC | 电压检测 (最大值6V) |- | bgcolor="#efd3d2" | Vpu | bgcolor="#efd3d2" | 板载上拉电阻的上拉电压 (0-5V). |- | +3.3v | +3.3V开关可控电源 |- | bgcolor="#efd3d2" | +5.0v | bgcolor="#efd3d2" | +5V开关可控电源 |- | GND | |}

name="__RefHeading__245_1881773865"二、基本命令

name="__RefHeading__247_1881773865"1 设置命令

name="__RefHeading__249_1881773865" (1). m 模式设置

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

name="__RefHeading__251_1881773865" (2). i 版本信息(在模式中也可以用 i 来查看信息)

name="__RefHeading__253_1881773865" (3). b 设置串口波特率

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

name="__RefHeading__255_1881773865" (4). ~ 自检

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

name="__RefHeading__257_1881773865" (5). # 重启

name="__RefHeading__259_1881773865" (6). $ 转至Bootloader,升级时候需要

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

name="__RefHeading__261_1881773865" (7). c/C 切换AUXCS/TMS引脚控制

切换a/A/@AUXCS/TMS引脚的控制。

name="__RefHeading__263_1881773865" (8). l/L 设置MSB/LSB优先级

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

name="__RefHeading__265_1881773865" (9). O 设置显示模式

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

name="__RefHeading__267_1881773865"2. 公共命令

name="__RefHeading__269_1881773865" (10). w/W 电源设置

用来控制3.3V5V两个引脚的供电,但供电电流最大只有150mA

注意:5V是由USB口供电,实际电压可能稍低于5V

name="__RefHeading__271_1881773865" (11). v 查看电源设置结果

命令v可以查看Bus所有引脚的状态。

第一行是引脚标号,与PCB图上的丝印一致。

第二行是在当前模式下引脚功能,其中电源引脚(3.3v, 5.0v), ADC, VpuAUX在所有模式下都有用,其他引脚在不同模式下功能不同,在单总线模式下,只有一个数据线OWD

第三行显示各引脚IO状态。I代表输入,O代表输出,P代表电源。

第四行显示各引脚电平状态。模拟电压值直接显示,数字信号用H表示高电平,L表示低电平。

name="__RefHeading__273_1881773865" (12). p/P 上拉电阻的开关控制

控制上拉(下拉)电阻时候,只有在Vpu引脚有电压输入的时候才能通过控制四双向模拟开关芯片CD4066来控制开启。

4066芯片控制410K电阻对MOSI, CLOCK, MISOCS四个引脚进行上拉或者下拉。

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

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

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

name="__RefHeading__275_1881773865" (13). f AUX引脚进行频率测量

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

name="__RefHeading__277_1881773865" (14). g AUX引脚的信号发生器/PWM发生器

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

name="__RefHeading__279_1881773865" (15). S 伺服电机角度

用来控制伺服电机的转动角度,使用S或者g命令来停止角度控制。

注意:绝大多数的伺服电机都是Bus无法驱动的,需要使用外部电源来供电。

name="__RefHeading__281_1881773865" (16). =X X16进制/10进制/2进制显示

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

name="__RefHeading__283_1881773865" (17). |X 对数据X取反

对数据按位取反,并以16进制/10进制/2进制形式显示出来。

name="__RefHeading__285_1881773865" (18). s BASIC脚本接口

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

name="__RefHeading__287_1881773865" (19). d/D ADC引脚使用探针测量电压(单次测量/持续监测)

小写d命令用来从ADC引脚测量电压。

大写D命令是持续测量,按任何键终止。

注意:Bus量程是0-6V,最大能到6.6V,但不稳定会出错。

name="__RefHeading__289_1881773865" (20). a/A/@ 控制AUX引脚状态(低电平/高电平/测量)

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

使用c/C命令切换后也可以控制CS引脚。

name="__RefHeading__291_1881773865"3. 交互命令

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

name="__RefHeading__293_1881773865" (21). [/{ 总线启动

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

name="__RefHeading__295_1881773865" (22). ]/} 总线停止

这个命令用来终止总线。

name="__RefHeading__297_1881773865" (23). r 读取一个字节的数据

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

name="__RefHeading__299_1881773865" (24). 0xa1/35/0b01 将数据写入总线

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

name="__RefHeading__301_1881773865" (25). “abc” 将字符串的ASCII码写入总线

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

name="__RefHeading__303_1881773865" (26). 空格/, 数字需要用空格和逗号隔开

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

name="__RefHeading__305_1881773865" (27). &/% 延时1us/ms

&命令延时1us%命令延时1ms,使用重复命令:实现长时间的延时。

name="__RefHeading__307_1881773865" (28). : 重复命令

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

name="__RefHeading__309_1881773865" (29). ; /写数据(的一部分

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

name="__RefHeading__311_1881773865"4. 位操作命令

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

name="__RefHeading__313_1881773865" (30). ^ 发送一个周期的时钟信号

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

name="__RefHeading__315_1881773865" (31). /\ 控制时钟信号的高(/)(\)电平

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

name="__RefHeading__317_1881773865" (32). –_ 控制数据位的高低电平

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

name="__RefHeading__319_1881773865" (33). ! 读取一个时钟周期的数据

发送一个周期的时钟信号并读取总线上的一位数据。

在双向数据总线(单总线或者双总线)上,执行命令后,数据引脚被作为高阻态输入接口。

name="__RefHeading__321_1881773865"5. 宏命令

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

name="__RefHeading__323_1881773865" (34). (0) 显示当前总线模式下的宏列表

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

name="__RefHeading__325_1881773865" (35). (#) 执行宏

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

name="__RefHeading__327_1881773865" (36). 设置自定义宏

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

name="__RefHeading__329_1881773865" (37). 显示自定义宏的列表

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

name="__RefHeading__331_1881773865" (38). <#> 执行自定义宏

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

name="__RefHeading__333_1881773865"三、基本应用

name="__RefHeading__335_1881773865"1. 总线模式

name="__RefHeading__337_1881773865" (1). 1-WIRE 单总线

总线: 1-Wire

连接: OWD(MOSI)GND

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

上拉电阻: 通常2K-10K,如果需要使用信号线供电,则使用小于2K的上拉电阻

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

单总线使用单条信号线,大多数的设备也需要连接电源和地,但也有一些设备可以直接通过信号线供电而不需要单独的供电电源。

单总线的重置命令[/{可以检测总线是否异常,如何没有设备响应Bus将电平拉低的信号,会显示:

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

命令”-”和”_”用来设置数据状态位,并在下一个时钟信号时候使用”-^”

命令(0)可以查看宏,(0xf0)查找总线设备。

1-Wire宏:

0. 宏列表

51. 读取ROM(0x33),对于单设备总线

85. 比较ROM(0x55),遵循64位地址

204. 跳过ROM(0xCC),遵循命令

236. 带警报的搜索(0xEC)

240. 搜索ROM(0xF0)

name="__RefHeading__339_1881773865" (2). UART 通用异步串行数据总线

总线: UART,MIDI

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

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

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

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

虽然UARTPC串口的电平(-13V+13V)不同,但逻辑时序兼容。

需要设置有:波特率、数据校验、停止位、接收间隔、输出电平

UART的数据读取和Bus的其他模式不同,因为数据到达的时间不确定,需要做特殊处理。UART模式会显示帧错误和奇偶校验错误,并且会自动清理缓冲区溢出。

帧错误标志”-f”,奇偶校验错误标志”-p”,当读取UART数据的时候,如果出现类似”READ: -p -f 0×40”这种标志,就表明有错误,出现这种错误的原因是发射端波特率设置不对应。

Bus4字节的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桥模式,增加了CTSRTS控制信号,CTS对应于CS引脚(PIC单片机的输入是从外部通过FTDIUSB转串口芯片输入的)RTS对应于CLK引脚(PIC单片机的输出是FTDI芯片输出的拷贝)

注意:BusPC的连接和UART桥不是同样速度的,除非使用b命令设置了,否则USB端速率会是默认的115200bps,如果PC上位机程序设置串口速率不对应,就会造成输入混乱,因为Bus默认PC输入速率是115200bps。假如你想使用PC上位机程序设置的速率,则需要先使用b命令将Bus的速率调整为相同的波特率。

(2)UART实时监控会显示没有经过格式化的原始数据,使用任何按键退出监控模式。这种模式适用于一些变种格式的终端输出。这个宏类似宏(1)但没有数据传输能力,它能用任何键退出。此模式对于监控在其他模式下会引起的缓冲区溢出错误的高速UART输入很有用。

MIDI是电子乐器的缩写,它得到接口是一个设置为312500bps/8/b/1的标准串口。MIDI是一个环形网络,每个节点都有输入输出接口,每个节点都会把信息传给环内的下一个节点,并且输入和输出都是光电隔离的,基本信号是5V,5mA的,详细情况请查询相关资料。

UART连接图:

name="__RefHeading__341_1881773865" (3). I2C 两线式串行总线

总线: I2C

连接: SDA(MOSI)SCL(CLK)GND

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

上拉电阻: 通常2K-10K

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

I2C总线是一种通用的两线式低速总线接口。

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

如果没有上拉电阻,使用地址扫描器会有警告。

I2C宏:

0. 宏列表

1. 7位地址搜索

2. 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的正常语法:

监听到的数据在用户模式中通常以16进制显示,使用任何键退出。

注意:监听输出使用了一个4096字节的环形缓冲区,监听到的数据会依次存入环形缓冲区,并在UART空闲的时候输入到PC机中,只要注意UART速率和显示模式,就能避免数据丢失的问题。

下面是一个读写DS1307时钟芯片RAM的例子:

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

写命令和读命令没有什么不同。下面是一个使用重复命令进行批量读取的例子:

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

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

I2C连接图:

name="__RefHeading__343_1881773865" (4). SPI 串行外围设备接口总线

总线: SPI

连接: MOSIMISOCLKCSGND

输出形式: 普通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引脚电平状态进行过滤,从MOSIMISO引脚监听到的数据都会以16进制显示出来,其中MISO引脚的数据显示在()当中。

注意:监听器使用了一个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模式设置的一些参数,但这是个没有使用者反馈信息的测试功能。

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

SPI连接图:

name="__RefHeading__345_1881773865" (5). 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连接图:

name="__RefHeading__347_1881773865" (6). 3WIRE 通用三总线

总线: 3Wire(比如三线SPI)

连接: MOSIMISOCLKCSGND

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

上拉电阻: 漏极开路必需加上拉电阻,通常2K-10K

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

原始三总线协议,类似SPI,但也是逐位控制引脚的。

需要设置:速度、CS片选、输出电平

3Wire连接图:

name="__RefHeading__349_1881773865"2. 其他应用

name="__RefHeading__351_1881773865" (7). 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. 写测试字符串

name="__RefHeading__353_1881773865" (8). DIO 自由控制模式

此模式给用户100%的控制权限,使用命令控制Bus的所有IO引脚。

使用和二进制bitbang模式相同命令来控制每个引脚的状态和变化。

name="__RefHeading__355_1881773865"四、基本示例

name="__RefHeading__357_1881773865"1. 总线模式

name="__RefHeading__359_1881773865" (1). 读写24C02(EEPROM)

解释下:

首先使用宏(1)查看硬件地址,我上面接了两个I2C总线器件,其中24C02的写地址是0xAE,读地址是0xAF

写数据指令:[0xae 0 1 2 3]

起始信号->器件写地址->从存储地址0开始写->写数据1->写数据2->写数据3->终止信号

I2C总线写数据的时序就是这样,当然,器件地址根据情况写,存储地址可以边,写入的数据可以是单个也可以是多个,多个则是依次写入。

读数据指令:[0xae 0]&[0xaf r:3]

起始信号->器件写地址->从存储地址0开始读->终止信号->延时->起始信号->器件读地址->3个字节数据->终止信号

I2C协议读数据也需要按照读时序进行操作,地址和读取的字节数可调。