利用CPLD器件和微处理器实现I2C总线控制器的应用方案

可编程逻辑

1338人已加入

描述

1 引言

I2C总线是PHILIPS公司推出的新一代串行总线,由于其结构简单、灵活,各结点具有独立的电气特性,可实现电路的模块化、标准化而被广泛应用。目前许多MCU都带有I2C总线接口,对没有I2C总线的MCU,可采用软件模拟,有通用软件包可以使用,但功能比较简单。在MCU(以Motorola 68000系列为例)和CPLD电子系统设计中,利用CPLD器件资源,按照I2C总线协议标准模式,设计了功能完善的I2C总线控制器,给出了设计思路和实现方法。

控制器

2 I2C总线控制器的设计与实现

2.1 I2C总线控制器的原理图

I2C总线控制器的设计采用VHDL语言描述,经编译、综合、适配,下载到具体的CPLD目标器件中,即可实现I2C总线控制器功能。其原理图如图一所示,该设计包括MCU接口和I2C总线接口两大部分。

2.2微处理器(MCU)接口逻辑的设计

MCU接口逻辑包括:地址译码/总线接口、状态寄存器(MBSR)、控制寄存器(MBCR)、地址寄存器(MADR)和数据寄存器(MBDR)等组成。I2C总线控制器的微处理器接口支持异步字节数据传输协议,该协议的执行是通过MCU对I2C总线控制器中有关寄存器读写完成的,MCU读写协议如图二所示。

控制器

2.2.1地址译码/总线接口的设计

在I2C总线控制器中对MCU数据读/写协议的执行由MCU总线接口状态机完成,整个状态机包含空闲状态、地址译码状态、数据传输状态和应答状态。当MCU设置读/写操作、输出要访问的I2C控制器中寄存器地址信号,并使地址选通信号有效时,状态机从空闲状态进入地址译码状态。若I2C控制器中寄存器被寻址且数据选通信号有效,状态机从地址译码状态进入数据传输状态:如果是读周期,I2C控制器将被访问的寄存器中数据放置在MCU接口总线上;如果是写周期,I2C控制器将从MCU接口总线取数据锁存到I2C控制器的内部被访问的寄存器中,状态机自动进入应答状态,此时,DTACK信号有效表明,如果是读周期,MCU即可从MCU接口总线读取数据;如果是写周期,数据已锁存到I2C的内部寄存器中。

2.2.2 MCU接口特殊功能寄存器的功能

MCU接口地址线共24根,其中高16位为基址(MBASE),用于确定I2C控制器的地址,低8位为MCU接口中特殊功能寄存器的地址。

1)地址寄存器(MADR):寄存器地址为MBASE+$8Dh,存放I2C控制器工作在从机模式时的从机地址。从机地址占高7位,最低位未用。

2) 控制寄存器(MBCR):寄存器地址为MBASE+$91h,产生控制信号,各位功能如下:

控制器

MEN:I2C控制器使能。该位为1时,控制寄存器的其他各位才有效;MIEN:中断使能;

MSTA:主/从模式转换。当MCU使该位从0变为1,I2C进入主机模式,并产生起始条件;若清0,产生停止条件,并转换为从机模式;

MTX:主机发送/接收模式选择。置1,主机发送,清0,主机接收;

TXAK:传输应答使能。置1,无应答;清0,有应答;

RSTA:重复起始条件。I2C控制器在主机模式,写入1,产生重复起始条件;若总线被其他主机占用,写入1时,读回0。

3)状态寄存器(MBSR):寄存器地址为MBASE+$93h,各位设置与功能如下:

控制器

MCF:数据传送标志位,当一字节数据正在传输时,为0,一字节数据传输结束,置1;

MASS:从机地址寻址标志位。当I2C控制器中地址寄存器的值与I2C总线传输的地址匹配时,置1,否则为0;

MBB:I2C数据总线忙标志位;

MAL:仲裁丢失标志位。当I2C控制器仲裁丢失时,由硬件置1,MCU的软件清0;

SRW:从机读/写标志位。I2C工作于从机模式,主机从I2C控制器读,置1;写,清0;

MIF:中断请求标志位。当MIEN置1,且有中断请求时,该位置1,在MCU的中断服务程序中,由软件清0;

RXAK:接收应答信号标志位。有应答信号接收,置1;无应答信号接收,清0。

4) 数据寄存器(MBDR):寄存器地址为MBASE+$95h,在物理上,数据寄存器映射成两个独立的寄存器,一个用于发送数据,一个用于接收数据,当MCU访问它们时,两个寄存器共用一个地址。

2.3 I2C接口逻辑的设计

I2C接口主要包括:主状态机、起始条件/停止条件/SCL时钟信号的生成、仲裁/起始条件/停止条件的检测、I2C状态寄存器、I2C数据寄存器、地址比较、和I2C标题寄存器模块等组成。

2.3.1仲裁、起始条件/停止条件的检测

I2C控制器在下列情况将发生仲裁丢失:1) I2C控制器在主机模式,在地址或数据发送周期,当主机发送“1”,但在数据线上的采样值“0”;2) I2C控制器在主机接收模式,在数据接收周期的应答位,当主机发送“1”,但在数据线的上采样值“0”;3)当总线忙时,MCU企图产生起始条件;4) I2C控制器在从机模式,MCU企图产生重复起始条件;5) I2C控制器在主机模式,没有产生停止请求,但检测到停止条件。当I2C控制器检测到起始条件时,数据总线忙标志位置1,检测到停止条件时,数据总线忙标志位清0。

2.3.2 SCL、SDA、起始、停止条件的产生

该模块完成如下功能: 1)允许任何主机控制总线,一旦I2C总线控制器控制总线,将产生起始条件;2)产生SCL串行时钟信号,且对SCL进行逐位仲裁,满足时钟同步协议;3)I2C总线控制器在发送模式时从数据寄存器(MBDR)发送数据到SDA数据线上;4)若I2C总线控制器检测到仲裁丢失,将继续产生SCL信号直到丢失仲裁的该字节末尾;5)当有重复起始条件和停止条件请求时,产生重复起始条件和停止条件。

2.3.3 I2C接口主状态机

I2C接口主状态机如图三所示,无论I2C控制器工作于主机还是从机模式,这个状态机都适用。当仲裁丢失或作为从机被寻址时,I2C控制器立即从主机模式转换为从机模式。

在HEADER状态,I2C工作在主机模式时,一方面从数据寄存器(MBDR)发送标题到I2C总线上,另一方面将I2C数据线上的数据逐位接收到标题移位寄存器内,当8位数据全部移入时,进入ACK_HEADER状态。在ACK_HEADER状态,I2C控制器于主机模式,采样SDA的值, 从而决定是否有从机应答,如果从机不应答,进入STOP状态,等待生成停止条件;如果从机有应答,标题移位寄存器中最低位决定I2C控制器是接收还是发送数据,状态转换到RCV_DATA或XMIT_DATA状态。同时,不断地将地址寄存器(MADR)的值与标题移位寄存器的值进行比较,若地址匹配,I2C控制器作为从机被寻址并立即转换为从机模式。状态寄存器(MBSR)中的从机寻址标志位MAAS置位,将TXAK位发送到SDA线上应答当前的主机,同样标题移位寄存器中最低位决定数据传送方向和下一状态。

控制器

3 结语

本文根据I2C总线规范的标准模式,在MCU和CPLD综合应用系统中设计了I2C总线控制器。在实际应用系统中嵌入该IP核,可以节约成本,提高系统的适用范围和可靠性,具有很高的参考设计价值和工程实用价值。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分