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核,可以节约成本,提高系统的适用范围和可靠性,具有很高的参考设计价值和工程实用价值。
新款AirPods耳机将支持全新的蓝牙5.0有望在今年年底发布
传感器的选用方式
关于内网、外网、宽带、带宽、流量、网速之间的区别与联系
EMC滤波知多少
如何提升介质厚度匹准度来满足阻抗设计要求
利用CPLD器件和微处理器实现I2C总线控制器的应用方案
中国联通宣布在六城启动一号双终端业务,穿戴设备无需SIM卡
如何实现PCB过孔设计?
鸿蒙os系统有什么特点
长虹CN-9机型的电容通病
现代汽车将在2024年开始为苹果生产汽车
200KV直流高压发生器技术详情
脑机接口真的能否实现?
2021年半导体行业的涨价浪潮不可避免
卡尔曼滤波简介
通过仿真加速基于服务器的系统架构合规性测试
CS5261Type-c转HDMI替代AG9310方案
信步科技SV1-38516P规格
美逼出华为鸿蒙系统 任正非央视专访称打持久战
ADI推出业界首款完全差分衰减精密放大器 AD8475