Bus Pirate/zh-hans

From DP

Revision as of 09:59, 13 January 2012 by Ian (Talk | contribs)
Jump to: navigation , search


Bus Pirate使用指南 目录

目录 2

一、连接 4

二、基本命令 6

1. 设置命令 6

     (1). 	  m  模式设置	6
     (2). 	  i   版本信息(在模式中也可以用 	i 来查看信息)	7
     (3). 	  b   设置串口波特率	7
     (4). 	  ~   自检	7
     (5). 	  #   重启	7
     (6). 	  $   转至Bootloader,升级时候需要	8
     (7). 	  c/C  切换AUX和CS/TMS引脚控制	8
     (8). 	  l/L         设置MSB/LSB优先级	8
     (9). 	  O            设置显示模式	8

2. 公共命令 9

     (10). 	  w/W      电源设置	9
     (11). 	  v            查看电源设置结果	9
     (12). 	  p/P        上拉电阻的开关控制	10
     (13). 	   f            AUX引脚进行频率测量	11
     (14). 	   g            AUX引脚的信号发生器/PWM发生器	11
     (15). 	   S            伺服电机角度	11
     (16). 	   =X  将X以16进制/10进制/2进制显示	12
     (17). 	   |X  对数据X取反	12
     (18). 	   s            BASIC脚本接口	12
     (19). 	   d/D  ADC引脚使用探针测量电压(单次测量/持续监测)	12
     (20). 	   a/A/@ 控制AUX引脚状态(低电平/高电平/测量)	13

3. 交互命令 13

     (21). 	   [/{   总线启动	13
     (22). 	   ]/}   总线停止	13
     (23). 	   r   读取一个字节的数据	14
     (24). 	   0xa1/35/0b01  将数据写入总线	14
     (25). 	   “abc”  将字符串的ASCII码写入总线	14
     (26). 	   空格/, 	 数字需要用空格和逗号隔开	15
     (27). 	   &/%  延时1us/ms	15
     (28). 	   :   重复命令	15
     (29). 	   ;   读/写数据(<16bit)的一部分	16

4. 位操作命令 16

     (30). 	   ^   发送一个周期的时钟信号	16
     (31). 	   /和\ 	 控制时钟信号的高(/)低(\)电平	16
     (32). 	   –和_ 	 控制数据位的高低电平	17
     (33). 	   !   读取一个时钟周期的数据	17

5. 宏命令 17

     (34). 	   (0)   显示当前总线模式下的宏列表	17
     (35). 	   (#)  执行宏	18
     (36). 	   <x=>  设置自定义宏	18
     (37). 	   <0>  显示自定义宏的列表	18
     (38). 	   <#>  执行自定义宏	18

三、基本应用 19

1. 总线模式 19

     (1). 	1-WIRE 单总线	19
     (2). 	UART  通用异步串行数据总线	19
     (3). 	I2C   两线式串行总线	21
     (4). 	SPI   串行外围设备接口总线	23
     (5). 	2WIRE  通用双总线	25
     (6). 	3WIRE  通用三总线	25

2. 其他应用 26

     (7). 	LCD  液晶测试	26
     (8). 	DIO  自由控制模式	26

四、基本示例 27

1. 总线模式 27

     (1). 	读写24C02(EEPROM)	27

一、连接

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



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





引脚名

引脚作用

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

二、基本命令

1. 设置命令 (1). m 模式设置


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

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


     (3).   b			设置串口波特率


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



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



     (5).   #			重启


     (6).   $			转至Bootloader,升级时候需要



           	Mode灯会亮,这时候关闭终端,就能使用工具升级。
     (7).   c/C		切换AUX和CS/TMS引脚控制


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

     (8).   l/L         设置MSB/LSB优先级


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

     (9).   O            设置显示模式



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

2. 公共命令

     (10).   w/W      电源设置



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

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

     (11).   v            查看电源设置结果


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

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

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

           	第三行显示各引脚IO状态。I代表输入,O代表输出,P代表电源。
           	第四行显示各引脚电平状态。模拟电压值直接显示,数字信号用H表示高电平,L表示低电平。


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



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

             	4066芯片控制4个10K电阻对MOSI, CLOCK, MISO和CS四个引脚进行上拉或者下拉。




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

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

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

     (13).    f            AUX引脚进行频率测量


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

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


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

     (15).    S            伺服电机角度

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

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

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

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

     (17).    |X		对数据X取反

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

     (18).    s            BASIC脚本接口

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

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

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

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

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

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

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

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

3. 交互命令

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

     (21).    [/{			总线启动


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

     (22).    ]/}			总线停止

这个命令用来终止总线。

     (23).    r			读取一个字节的数据

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

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

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

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

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

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

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

     (27).    &/%		延时1us/ms

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

     (28).    :			重复命令

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

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

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

4. 位操作命令

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

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

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

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

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

     (32).    –和_		控制数据位的高低电平

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

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

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

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

5. 宏命令

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

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

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

     (35).    (#)		执行宏

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

     (36).    <x=>		设置自定义宏

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

     (37).    <0>		显示自定义宏的列表

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

     (38).    <#>		执行自定义宏

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

三、基本应用

1. 总线模式 (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)

     (2).	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连接图:

     (3).	I2C			两线式串行总线
            	总线:		I2C

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

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

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

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

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

I2C是集电极开路总线,需要上拉电阻把时钟线和数据线拉高并产生数据1,I2C不能输出高电平,只能将电平拉低没如果没有上拉电阻就不能输出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连接图:

     (4).	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引脚的数据显示在()当中。

注意:监听器使用了一个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连接图:

     (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连接图:

     (6).	3WIRE		通用三总线
            	总线:		3Wire(比如三线SPI)

连接: MOSI、MISO、CLK、CS和GND

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

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

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

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

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

3Wire连接图:

2. 其他应用

     (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. 写测试字符串

     (8).	DIO		自由控制模式
            	此模式给用户100%的控制权限,使用命令控制Bus的所有IO引脚。

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

四、基本示例

1. 总线模式 (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协议读数据也需要按照读时序进行操作,地址和读取的字节数可调。