1 / 56

项目七、 I 2 C 总线扩展

项目七、 I 2 C 总线扩展. 项目七、 I 2 C 总线扩展 任务. AT24C 系列存储器读写操作. 能力目标 1、了解 I 2 C 总线原理 2、能采用 I 2 C 技术对 AT24C 系列存储器读写操作 学习内容 1、 I 2 C 总线原理 2、 AT24C 系列存储器读写操作. 一、任务要求

lynsey
Download Presentation

项目七、 I 2 C 总线扩展

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 项目七、I2C总线扩展

  2. 项目七、I2C总线扩展任务. AT24C系列存储器读写操作 能力目标 1、了解I2C总线原理 2、能采用I2C技术对AT24C系列存储器读写操作 学习内容 1、I2C总线原理 2、AT24C系列存储器读写操作

  3. 一、任务要求 要求先对2401C执行写操作,将AT89C51内部数据存储器中30H~3FH中的数据写入2401C中从30H开始的16个连续存储单元中,再执行读操作,读取2401C中30H~3FH中的数据,并将数据存储到AT89C51内部存储器中从40H开始的16个连续存储单元中。 KEY1充当外部中断0源,当按下KEY1时,单片机完成用I2C总线写AT2402,KEY2充当外部中断1源,当按下KEY2时,单片机完成用I2C总线读AT2402。

  4. 二、任务分析 1、根据要求整个程序由主程序和中断0和中断1三段程序组成。 2、AT2401是一个带有总线结构的存储器,要对AT2401进行读或写,必须按照AT2402的读 写时序编写开始信号子程序、停止信号子程序、发送一个字节子程序、接收一个应答位子程序、发送一个接收应答位子程序、发送一个非接收应答位子程序。

  5. 三、学习知识 1、I2C总线结构 I2C串行总线只有二根信号线,一根是双向的数据线SDA,另一根是双向的时钟线SCL。 图7-1 I2C主/从系统结构图

  6. 在信息的传输过程中,I2C总线上发送数据的设备称为发送器,而接收数据的设备称为接收器。能够初始发送、产生时钟、起始信号、停止信号的设备称为主机或主控制器;而被主机寻址的设备称为从机。 I2C总线上的每个芯片(例如微控制器、LCD驱动器、存储器或键盘接口)都有唯一的地址,就像电话机一样都有各自唯一的号码,只有被选址的芯片即从机才和主机(例如单片机)通信,就像电话机只有在被拨通各自的号码时才能通话。

  7. 2、I2C总线协议 (1)主机—从机和接收器—发送器 主机—从机、接收器—发送器这些关系不是持久的,只由当时数据传输的方向决定。例如在如下的传输数据的过程中: 1)微控制器 A 要发送信息到微控制器B 微控制器 A(主机)寻址微控制器 B(从机) 微控制器 A(主机—发送器)发送数据到微控制器 B(从机—接收器) 微控制器 A终止传输

  8. 2) 如果微控制器 A 想从微控制器 B 接收信息 微控制器 A(主机)寻址微控制器 B(从机) 微控制器 A(主机—接收器)从微控制器B(从机—发送器)接收数据 微控制器 A终止传输

  9. (2)I2C总线位的传输 I2C总线为同步传输总线,总线数据与时钟完全同步。I2C总线规定时钟线SCL上一个时钟周期只能传送一位数据。当时钟SCL线为高电平时,对应数据线SDA线上的电平即为有效数据位(高电平为1,低电平为0);在数据传送开始后,SCL为高电平的时候,SDA的数据必须保持稳定,只有当SCL为低电平的时候,才允许SDA上的数据改变。当SCL发出重复的时钟脉冲时,每次为高电平时,SDA线上对应的电平就是一位一位传送的数据,其中最先传输的是字节的最高位数据,其时序如图7-2所示。

  10. 图7-2 I2C总线上SDA和SCL的时序关系

  11. (3)起始条件和停止条件 起始条件:当SCL线为高电平时,SDA线由高到低的转换。出现起始信号以后,总线被认为“忙”。 停止条件:当SCL为线高电平时,SDA线由低到高的转换。出现停止信号后,总线被认为“空闲”。 也就是SCL和SDA都保持高电平,总线就是空闲的。 在连续读写时,如收到—-个“停止条件”。则所有读写操作将终止,芯片将进入等待模式。起始条件和停止条件—般由主机产生。

  12. (4)应答信号 接收数据的芯片在接收到8位数据后,向发送数据的芯片发出特定的低电平脉冲,表示已收到数据。应答位的时钟脉冲也由主机产生。发送器在应答时钟脉冲高电平期间,将SDA线拉为高电平,即释放SDA线,转由接收器控制。接收器在应答时钟脉冲的高电平期间必须拉低SDA线,以使之为稳定的低电平作为有效应答,如图7-4所示。若接收器不能拉低SDA线,则为非应答信号。

  13. 图7-4 I2C总线上的应答 发送器向接收器发出一个字节的数据后,等待接收器发出一个应答信号,发送器接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为接收器出现故障。

  14. (5)数据字节的传送 发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制,但每个字节后必须跟—个应答位,数据传输的顺序是首先传输数据的最高位MSB,然后在每一个SCL线的时钟周期内,传送一位数据,在8个SCL时钟周期后,SDA线上完成一个字节的数据传送。在传输时,若SCL线为高电平,SDA线上电平需保持稳定不变,只有SCL为低电平时,SDA线上的电平才能改变。否则,若SCL线为高电平,而SDA线上的电平由高跳变到低,则为起始信号;由低跳变到高,则为停止信号。

  15. SDA线上完成一个字节的数据传送后,在第9个SCL时钟周期,接收器需发出一个应答信号,即在SCL线为高电平时,将SDA线拉低,以使之为稳定的低电平作为有效应答,表明正确收到了发送器发送的数据。

  16. 图7-5 I2C总线上数据的传送

  17. (6)一帧完整数据的传送 一次典型的I2C总线数据传输包括一个起始条件(START)、一个地址字节(位7-1:7位从机地址;位0:R/W方向位)、一个或多个字节的数据和一个停止条件(STOP)。每个地址字节和每个数据字节后面都必须用SCL高电平期间的SDA低电平(见图7-6)来应答(ACKNOWLEDGE简写为ACK)。如果在数据传输了一段时间后,接收器件不能接收更多的数据字节,接收器件将发出一个“非应答”(NACK)信号,这用SCL高电平期间的SDA高电平表示,发送器件读到“非应答”信号后终止传输。

  18. 方向位占据地址字节的最低位。方向位被设置为逻辑1表示这是一个“读”(READ)操作,即主机接收从机发送的数据;方向位为逻辑0表示这是一个“写”(WRITE)操作,即从机接收主机发送的数据。所有的数据传输都由主器件启动,可以寻址一个或多个目标从机。 图7-6 I2C总线上完整数据的传送

  19. 3、I2C总线的传送格式 (1)主发送从接收 图7-7 典型的主发送从接收时序

  20. (2)从发送主接收 图7-8 典型的主接收从发送时序

  21. 1 0 1 0 A2 A1 A0 R/W 4、AT24CXX (1)管脚配置和功能 表7-4 AT24C02的地址定义 最高位 7位从机地址 最低位 D7 D6 D5 D4 D3 D2 D1 D0

  22. SCL :串行时钟 SDA :串行数据/地址 A0、A1、A2:器件地址输入端 WP:写保护 如果WP管脚连接到Vcc,所有的内容都被写保护,只能读而不能写。

  23. (2)AT24C02的读写操作 1)字节写 在字节写模式下,主机发送起始信号和从机地址信息,R/W位置零。在从机产生应答信号后,主机发送AT24C02的内部字节地址,该地址表明一个字节的数据要写入AT24C02的哪一个字节。主机在收到从机的另一个应答信号后,再发送数据到AT24C02内部字节地址表明的存储单元。AT24C02再次应答,并在主机产生停止信号后开始内部数据的擦写。在内部擦写过程中,AT24C02不再应答主机的任何请求。字节写时序如图7-10所示。

  24. 图7-10 字节写时序

  25. 2)页写 用页写AT24C02可以一次写入8个字节的数据。页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号。主机被允许再发送7个额外的字节,每发送一个字节数据后,AT24C02产生一个应答信号,并将内部字节地址自动加1。如果写到此页的最后一个字节,即发送完8个字节数据后,主机继续发送数据,数据将从该页的首地址写入,先前写入的数据将被覆盖,造成数据丢失。

  26. 图7-11 页写时序

  27. AT24C02的读操作 AT24C02的读操作可分为立即地址读、选择性读和连续读。 1)立即地址读 图7-12 立即地址读时序

  28. 2)选择性读 图7-13 选择性读时序

  29. 3)连续读 图7-14 连续读时序

  30. 四、任务实施 1、硬件设计 图7-15 单片机和AT2401CI2C总线硬件接线原理图

  31. 中断入口 I2C开始信号 发送控制字、从器件地址 无 应答信号 有 发从器件片内地址 应答信号 无 有 发送数据 无 应答信号 有 发送结束 否 是 停止信号 返回 2、软件设计 具体流程图如图7-16所示。 中断0(写入AT2401CI2C数据)

  32. 中断入口 I2C开始信号 发送从器件地址 无 应答信号 有 发从器件片内地址 无 应答信号 有 开始信号 发送控制字 无 应答信号 有 接收数据 发应答位 否 最后一个字节 是 发非应答 停止信号 返回 中断1(读出AT2401CI2C数据)

  33. ACK BIT 10H ;应答标志位 SLA DATA 50H ;器件地址字 SUBA DATA 51H ;器件子地址 NUMBYTE DATA 52H ;读/写字节数 SDA BI T P1.5 SCL BIT P1.4 ;I2C总线定义 MTD EQU 30H ;发送数据缓存区首地址(30H-3FH) MRD EQU 40H ;接收数据缓存区首地址(40H-4FH) ORG 0000H AJMP MAIN ORG 0003H LJMP WRITE ORG 0013H LJMP READ 主程序:

  34. MAIN: MOV R4,#0F0H ;延时,等待其它芯片复位完成 DJNZ R4,$ MOV A,#0 ;依次将30H~3FH设为00H~0FH MOV R0,#30H S1: MOV @R0,A INC R0 INC A CJNE R0,#04H,S1 SETB PX1 ;将中断1(读数据)设为高优先级 SETB EX0 SETB EX1 SETB EA L1: NOP JMP L1

  35. WRITE: MOV SLA,#0A0H ;24C01C地址字,写操作 MOV SUBA,#30H ;目标地址 MOV NUMBYTE,#16 ;字节数 LCALL IWRNBYTE ;写数据 RETI 中断0:(写入AT2401CI2C数据)

  36. READ: MOV SLA,#0A0H ;24C01C地址字,伪写入操作 MOV SUBA,#30H ;目标地址 MOV NUMBYTE,#16 ;字节数 LCALL IRDNBYTE ;写数据 RETI 中断1:(读出AT2401CI2C数据)

  37. START: SETB SDA ;发送起始条件数据信号 NOP ;起始条件建立时间大于4.7us SETB SCL ;发送起始条件的时钟信号 NOP NOP NOP NOP NOP ;起始条件锁定时间大于4.7us CLR SDA ;发送起始信号 NOP NOP NOP NOP ;起始条件锁定时间大于4.7us CLR SCL ;钳住I2C总线,准备发送或接收数据 NOP RET ;名称:STRRT ;描述:启动I2C总线子程序—发送I2C总线起始条件

  38. STOP: CLR SDA ;发送停止条件的数据信号 NOP NOP SETB SCL ;发送停止条件的时钟信号 NOP NOP NOP NOP NOP ;起始条件建立时间大于4.7us SETB SDA ;发送I2C总线停止信号 NOP NOP NOP NOP NOP ;延迟时间大于4.7us RET ;名称:STOP ;描述:停止I2C总线子程序—发送I2C总线停止条件

  39. MACK: CLR SDA ;将SDA置0 NOP NOP SETB SCL NOP NOP NOP NOP NOP ;保持数据时间,大于4.7us CLR SCL NOP NOP RET ;名称:MACK ;描述:发送应答信号子程序

  40. MNACK: SETB SDA ;将SDA置1 NOP NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL ;保持数据时间,大于4.7us NOP NOP RET ;名称:MNACK ;描述:发送非应答信号子程序

  41. CACK: SETB SDA NOP NOP SETB SCL CLR ACK NOP NOP MOV C,SDA JC CEND SETB ACK ;判断应答位 CEND: NOP CLR SCL NOP RET ;名称:CACK ;描述:检查应答位子程序,返回值:ACK=1时表示有应答

  42. WRBYTE: MOV R0,#08H WLP: RLC A ;取数据位 JC WRI SJMP WRO ;判断数据位 WLP1: DJNZ R0,WLP NOP RET WRI: SETB SDA ;发送1 NOP SETB SCL NOP NOP NOP NOP NOP ;名称:WRBYTE ;描述:发送字节子程序,字节数据放入ACC

  43. CLR SCL SJMP WLP1 WRO: CLR SDA ;发送0 NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1

  44. RDBYTE: MOV R0,#08H RLP: SETB SDA NOP SETB SCL ;时钟线为高,接收数据位 NOP NOP MOV C,SDA ;读取数据位 MOV A,R2 CLR SCL ;将SCL拉低,时间大于4.7us RLC A ;进行数据位的处理 MOV R2,A NOP NOP NOP DJNZ R0,RLP ;未够8位,继续读入 RET ;名称:RDBYTE ;描述:读取字节子程序,读出的数据存放在ACC

  45. MAIN: MOV R4,#0F0H ;延时,等待其它芯片复位完成 DJNZ R4,$ ;发送数据缓存区初始化,将16个连续字节分别赋值为00H到0FH MOV A,#0 MOV R0,#30H S1: MOV @R0,A INC R0 INC A CJNE R0,#40H,S1 ;向24C01C中写数据,数据存放在24C01C中30H开始的16个字节中 MOV SLA,#0A0H ;24C01C地址字,写操作 MOV SUBA,#30H ;目标地址 MOV NUMBYTE,#16 ;字节数

  46. LCALL IWRNBYTE ;写数据 DELAY: MOV R5,#20 D1: MOV R6,#248 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 ;从24C01C中读数据,数据送AT89C51中40H开始的16个字节中 MOV SLA,#0A0H ;24C01C地址字,伪写入操作 MOV SUBA,#30H ;目标地址 MOV NUMBYTE,#16 ;字节数 LCALL IRDNBYTE ;写数据 END

  47. IWRNBYTE: MOV R3,NUMBYTE LCALL START ;启动总线 MOV A,SLA LCALL WRBYTE ;发送器件地址字 LCALL CACK JNB ACK,RETWRN ;无应答则退出 MOV A,SUBA ;指定子地址 LCALL WRBYTE LCALL CACK MOV R1,#MTD ;名称:IWRNBYTE ;描述:向器件指定子地址写N个数据 ;入口参数:器件地址字SLA,子地址SUBA,发送数据缓冲区MTD,发送字节数NUMBYTE

  48. WRDA: MOV A,@R1 LCALL WRBYTE ;开始写入数据 LCALL CACK JNB ACK,IWRNBYTE INC R1 DJNZ R3,WRDA ;判断是否写完 RETWRN: LCALL STOP RET

  49. IRDNBYTE: MOV R3,NUMBYTE LCALL START MOV A,SLA LCALL WRBYTE ;发送器件地址字 LCALL CACK JNB ACK,RETRDN MOV A,SUBA ;指定子地址 LCALL WRBYTE LCALL CACK LCALL START ;重新启动总线 MOV A,SLA INC A ;准备进行读操作 LCALL WRBYTE LCALL CACK ;名称:IRDNBYTE ;描述:从器件指定子地址读取N个数据 ;入口参数:器件地址字SLA,子地址SUBA,接收数据缓存区MRD,接收字节数NUMBYTE

  50. JNB ACK,IRDNBYTE MOV R1,#MRD RON1: LCALL RDBYTE ;读操作开始 MOV @R1,A DJNZ R3,SACK LCALL MNACK ;最后一字节发非应答位 RETRDN: LCALL STOP RET SACK: LCALL MACK INC R1 SJMP RON1 END

More Related