问答题
阅读以下关于嵌入式系统I2C总线接口电路的技术说明,根据要求回答问题1至问题 4。
【说明】
I2C总线是一种多主控器总线,对多个IC器件具有控制总线的能力。采用串行I2C总线技术设计接口电路,可节约嵌入式系统微处理器的I/O端口。图6-17给出了一种实现了键盘、时钟和实时参数存储三个功能模块的应用电路。图6-17中仅应用I2C总线构成单主控器的系统。此时时钟线SCL仅由微处理器驱动,因此可以用微处理器的一根I/O线作为SCL信号线,将其设置为输出方式,由软件控制产生串行时钟信号;用微处理器的另一根I/O线作为I2C总线的串行数据线,由软件控制在时钟的低电平期间读取或输出数据。
在图6-17中采用ATMEL公司的E2PROM AT24C64(IC8)实现了系统初始化数据、仪表系数、用户设置的参数或某些重要的实时数据参数的存储。DS1302时钟芯片可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5 V。8位并行I/O口扩展器件PCF8574具有口输出锁存功能,可直接驱动大电流LED管,同时还带有一个中断请求输出端INT(漏极开路方式)。在图6-17中,将PCF8574器件的8位准双向口外挂了一个4×4键盘矩阵。
问答题
【问题1】
电阻R36、R37在图6-17电路中有何作用。请在100字以内简要说明。
【正确答案】
【答案解析】R36、R37分别是I2C串行总线上双向的数据线SDA与时钟线SCL的上拉电阻
这是一道要求读者掌握I2C串行总线接口电路中各个部件作用的电路分析题。本题的解答思路如下:
①I2C串行总线有两根信号线:一根是双向的数据线SDA;另一根是时钟线SCL。总线上受控器件的串行数据线SDA都接到总线的SDA线上,各受控器件的时钟线SCL接到总线的SCL上。
②在图6-17所示的电路中,电阻R36、R37的阻值为10 kΩ,分别接在AT24C64、 DS1302、PCF8574芯片的时钟线SCL和数据线SDA上。
③由于I2C总线接口均采用漏极开路(Open-drain)或集电极开路(Open-collector)的方式来完成线与(Wired AND)功能,因此需在数据线SDA、时钟线SCL上接人上拉电阻。可见R36、R37分别是I2C串行总线上双向的数据线SDA与时钟线SCL的上拉电阻。
④另外,设计I2C总线接口电路时需要注意,总线的驱动能力以所连接器件的负载电容量不超过400 pF为宜。
问答题
【问题2】
图6-18给出了I2C总线开始条件与停止条件的时序图。通常I2C总线的开始条件、停止条件总是由{{U}} (1) {{/U}}产生。在开始条件产生后,总线被认为处于{{U}} (2) {{/U}},在完成数据传输产生停止条件后,总线被认为处于空闲状态。在时钟信号的高电子期间,SDA传输线上的电平必须稳定,只有在SCL传输线上的时钟信号为{{U}} (3) {{/U}},数据线上的高低电子才允许发生变化,此时传送的数据才有效。每一个写到SDA传输线上的数据字节必须为8位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个{{U}} (4) {{/U}},传输字节时最高位在前。
【正确答案】
【答案解析】(1)主器件 (2)忙状态
(3)低电平 (4)应答位ACK
这是一道要求读者阅读I2C总线开始条件与停止条件的时序图,并理解I2C总线数据有效性,数据字节格式的综合分析题。本题的解答思路如下:
①每一个I2C总线器件都通过惟一的地址进行识别,根据其特性,可作为发送器或接收器工作。
②由于连接到I2C总线上的器件各不相同(如有CMOS器件、NMOS器件、TTL器件等),逻辑。或逻辑1的电平会根据电源电压的高低发生变化,因此,每传输一个位就产生一个时钟脉冲。
③在图6-18所示的时序图中,I2C总线的开始条件是指当SCL为高电平时,SDA产生由高电平到低电平的跳变。停止条件是指当SCL为高电平时,SDA产生由低电平到高电子的跳变。
④开始和停止条件总是由主器件产生。在开始条件产生后,总线被认为处于忙状态,在完成数据传输产生停止条件后,总线被认为处于空闲状态。因此(1)空缺处应填入“主器件”,(2)空缺处应填入“忙状态”。
⑤I2C总线数据有效性是指在时钟信号的高电平期间,SDA传输线上的电平必须稳定,只有在SCL传输线上的时钟信号为低电平时,数据线上的高低电子才允许发生变化。因此(3)空缺处应填入“低电子”。
⑥I2C总线数据字节的格式规定,每一个写到SDA传输线上的数据字节必须为8位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个应答位ACK(见图6-18),传输字节时最高位在前(MSB-first)。如果接收器因为执行其他功能(如中断服务)而不能接收剩余的数据字节时,接收器就保持时钟线SCL为低电平强制发送器进入等待状态,只有当接收器准备接收其他字节并释放SCL传输线时,数据传输才会继续进行。可见,(4)空缺处应填入“应答位ACK”。
问答题
【问题3】
I2C总线的寻址过程是在{{U}} (5) {{/U}}后发送第1个字节,该字节地址决定主控器选择哪一个从器件,还可以通过{{U}} (6) {{/U}}方式同时寻址所有的I2C器件,但当某个I2C器件不需要进行数据传输时,将忽略该寻址方式而不作任何应答。如果某个I2C器件需要获取数据,则将发出{{U}} (7) {{/U}}信号并作为一个{{U}} (8) {{/U}}。
【正确答案】
【答案解析】(5)开始条件 (6)广播寻址
(7)应答 (8)从接收器
这是一道要求读者掌握I2C总线寻址的综合分析题。本题的解答思路源于图6-18所给出的I2C总线开始条件与停止条件的时序图。
①试题关键信息“该字节地址决定主控器选择哪一个从器件”中,“该字节地址”是指图6-18中开始条件之后的“Address”。因此可推理出(5)空缺处应填入“开始条件”。
②I2C总线还可以通过“广播”寻址方式同时寻址所有的IC器件。当使用广播寻址时,理论上所有的IC器件都应该返回应答信号,但当某个IC器件不需要进行数据传输时,将忽略广播寻址而不作任何应答。广播寻址的第二个字节决定其后的操作。可见(6)空缺处应填入“广播寻址”。
③如果某个I2C器件需要获取数据,则将发出应答信号并作为一个从接收器。因此 (7)、(8)空缺处应分别填入“应答”、“从接收器”。
问答题 【问题4】 以下是利用MCS-51系列单片机汇编语言实现模拟I2C总线接收N个字节数据的程序段(RDNBYTE),请将汇编程序代码中(9)~(13)空缺处的内容填写完整。表6-21所示为MCS-51系列单片机部分汇编指令及寄存器说明。 {{B}}表6-21 MCS-51 系列单片机部分汇编指令及寄存器说明{{/B}}
指令 功能 寄存器 功能
MOV 数据传送指令 A 累加器
INC 加1指令 R1 寄存器
JB 转移指令,直接寻址位为1时转移 R3 寄存器
DJNZ 转移指令,寄存器/直接寻址单元减1,结果不为零时转移 F0 用户标志位
SJMP 相对短转移
LCALL 长调用指令
RET 子程序返回指令
程序中已定义了标号为START的启动位子程序、标号为STOP的停止位子程序、标号为MACK的发送应答位子程序、标号为MNACK的发送非应答位子程序、标号为 CACK的应答位检查子程序、标号为WRBYT的向VSDA线上发送1个数据字节的子程序、标号为RDBYT的从VSDA线上读取1个数据字节的子程序。调用RDNBYTE程序的归一化操作命令是 MOV SLA,#SLAR MOV NUMBYTE,#N LCALL RDNBYT 【汇编程序代码】 VSDA EQU P1.6 ;虚拟I2C总线数据线 VSCL EQU P1.5 ;虚拟I2C总线时钟线 SLA EQU 50H ;寻址字节存放单元 NUMBYTE EQU 51H ;传送字节数存放单元 MTD EQU 30H ;发送数据缓冲区 MRD EQU 40H ;接收数据缓冲区 SLAW0 EQU 0AOH ;写AT24C64(器件地址为0AOH) SLAR0 EQU 0A1H ;读24C64 SLAW1 EQU 40H ;写PCF8574(器件地址为040H) SLAR1 EQU 41H ;读PCF8574 ;模拟I2C总线接收N个字节数据 RDNBYTE:MOV R3,NUMBYTE LCALL START ;发送启动位 MOV A,SLA ;发送寻址字节(读) {{U}}(9) {{/U}} {{U}}(10) {{/U}} JB F0,RDNBYTE RDN: MOV R1,#MRD RDN1: {{U}}(11) {{/U}} MOV @R1,A DJNZ R3,ACK ;N个字节读完否?未完转 {{U}}(12) {{/U}} LCALL STOP ;发送停止位 RET ACK: {{U}} (13) {{/U}} INC R1 SJMP RDN1 ;转读下一个字节数据 (9)~(13)空缺处供选择的答案
A.LCALL START B.LCALL MACK
C.LCALL CACK D.LCALL RDBYT
E.LCALL WRBYT F.LCALL MNACK G.LCALL STOP
【正确答案】
【答案解析】