标签:
dsp仿真 |
分类: DSP |
I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,是一种具有多端控制能力向串行数据总线系统,用于连接微控制器及其外围设备。
准确的读法应该是I的平方C,即I^2C。以后就简写成I2C模块。
I2C模块通过I2C总线为DSP和其他符合PHILIPS半导体内部集成电路总线规格(PHILIPS半导体I2C总线规范)的设备提供了接口。I2C总线是一种两线制串行总线,与其相连的外部器件可以发送1~8位数据到DSP,或者从DSP接收1~8位数据。通过I2C模块传输或接收到的一个单位的数据可以少于8位。
I2C模块支持任何主/从I2C兼容设备,多个I2C模块连接在总线上实现多个器件间的数据双向传输。
一.I2C模块的主要特征
1.与PHILIPS半导体I2C总线规范兼容(2.1版)
- 支持8位格式数据传送;
- 7位和10位寻址模式,分别最多可以带128个和1024个设备;
- 支持多个主发送器和多个从接收器;
- 支持多个从发送器和多个主接收器;
- 具有主发送/接收和主接收/发送模式;
- 数据传输速率可从10Kbit/s到400Kbit/s
- *支持通用呼叫功能;
- *支持启动字节(START)模式
2.一个16位接收FIFO和一个16位发送FIFO
3.一个可以随时被CPU使用的中断
4.在FIFO模式下可被CPU使用的附加中断
5.有自有数据格式模式
6.不支持以下功能:
- 高速模式
- CBUS-兼容模式
二.I2C模块的性能与功能
I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。I2C模块允许一个或多个支持I2C总线功能的器件连接在同一条总线上。
对于数据通信,I2C模块有一个串行数据引脚SDA和一个串行时钟引脚SCL。这两个引脚在280x器件和连接到I2C总线上的其他器件之间传送信息。SDA和SCL两个引脚均是双向的。它们必须通过上拉电阻接到正电压。当总线空闲时,两个引脚均为高电平。
(1)两种主要的传输模式
- 标准模式:发送n个数值,n是在I2C模块寄存器中所设置的传输数据个数。
- 重复模式:一直发送数据,直到软件产生一个停止条件或一个新的开始条件。
(2)I2C模块的主要组成
I2C模块结构框图如上图,主要包含:
- 一个SDA串行数据引脚和一个SCL串行时钟引脚;
- 数据寄存器和FIFO:暂时保存SDA引脚和CPU之间传递的接收数据和发送数据;
- *控制和状态寄存器;
- 外围总线接口:用于CPU访问I2C模块寄存器和FIFO;
- 时钟同步器:用来使I2C输入时钟(由DSP时钟源产生)和SCL引脚的时钟同步,并且使数据发送器与不同的主机时钟速度同步;
- *预定标器:将输入到I2C模块的时钟进行分频;
- 噪声滤波器:SDA和SCL引脚的;
- *总线仲裁器:用来处理I2C模块和其它主器件的仲裁问题;
- 中断产生逻辑I2CINT:向CPU发送中断信号;
- FIFO中断产生逻辑:以便在I2C模块中接收数据或发送数据时能够同步访问FIFO。(FIFO模式)
上图也给出了非FIFO模式下数据发送和接收的操作方式。CPU将需要发送的数据写入到I2CDXR,并从I2CDRR中读取接收到的数据。当I2C模块配置成发送器时,写入到I2CDXR的数据被复制到I2CXSR中,并逐位地移出到SDA引脚上;当I2C模块配置成接收器时,接收到的数据先移入到I2CRSR,再复制到I2CDRR中。
三.时钟产生源
如图所示:
DSP时钟产生器从外部时钟源接收信号,产生一个频率可编程的I2C输入时钟。I2C输入时钟为CPU时钟,在I2C内部经过两倍以上分频后产生I2C模块时钟和主机时钟。
模块时钟决定了I2C模块以什么频率工作。I2C模块的可编程分频器通过对输入时钟分频得到模块时钟。配置分频器寄存器的IPSC位可确定分频器的值。模块时钟频率的计算公式如下:
主时钟频率=模块时钟频率 X [(ICCL+d)+(ICCH+d)]
为了与所有I2C协议时钟频率匹配,模块时钟必须配置在7~12MHz之间,分频器必须在I2C模块被复位时(即I2CMDR的IR=0)配置。当IRS由0变成1时所分频的频率才有效,当IRS=1时改变IPSC的值不起作用。
当I2C总线的I2C模块被配置成主器件时,在SCL引脚出现主时钟。该时钟控制I2C模块同其他从器件之间通信的时序。I2CCLKL的ICCL位和I2CCLKH的ICCH位的值分别表示分频值的低字节部分和高字节部分。
四.I2C模块操作
1.数据状态
下图描述了I2C总线传送数据时数据线SDA和时钟线SCL的电平状态。
在时钟为高电平时SDA引脚上的数据必须稳定。只有在SCL上时钟信号变低时,数据线SDA引脚的数据才可以改变。
2.操作模式
I2C模块有四种基本操作模式用以支持数据传送。
具体工作如下:
1)如果I2C模块工作在主模式下,当向从模块发送数据时,I2C模块必须保持主发送器模式;接收从模块的数据时,则其必须变为主接收器模式。
2)如果I2C模块是从机,通常是当其识别来自主机的从地址时发送一个应答信号。如果主机将要发送数据给I2C模块,那么模块必须保持从接收器模式。如果主机要求I2C模块发送数据,那么模块必须变成从发送器模式。
五.I2C模块的起始和停止条件
当I2C总线上的I2C模块被配置成主机时,可以由该模块产生起始(START)和停止(STOP)条件。如图所示,当SCL为高电平时,SDA数据线产生由高到低跳变时,表示起始条件开始。主机通过产生这样的条件来表明数据传送开始;当SCL为高电平,SDA数据线产生由低到高跳变时,表明停止条件产生。主机通过产生该条件表明数据传送停止结束。
起始条件开始后且停止条件产生之前,认为此时的I2C总线是处于忙状态的,此时I2CSTR的总线忙位BB=1;在停止条件产生后与下个起始条件产生前,这段期间认为I2C总线是处于空闲的,此时BB=0.。
为了使I2C模块使用起始条件开始数据传送,I2CMDR的主机模式位(MST)和起始条件位(STT)都必须为1.为了使I2C模块使用停止条件终止数据的传送,则停止条件位(STP)必须置1。当RM位和STT位都置1时,产生重复的起始条件。
六.串行数据格式
上图是传输8位数据。SDA数据线上每一位的维持时间相当于SCL一个脉冲。传输数据时,总是高有效位字节(MSB)开始传送。发送和接收数据的个数没有限制。
1)7位地址格式
要使用7位地址格式,需向I2CMDR的扩展地址使能位(XA)写0,并且要确保*数据格式关闭(即I2CMDR的FDF=0)
起始位后第一个字节包括7位的从机地址和1位读写选择位。决定数据传送的方向,当=0,代表主机向所寻址的从机写数据;当=1,主机读来自从机的数据。
每个字节传输完成后,必须插入一个额外的时钟周期应答位(ACK)。如果在主机传送第一个字节后,从机产生应答位,则发送器就会发送n位数据。n是由I2CMDR的BC位来确定的1~8位数。当数据传送完成后,接收器产生一个应答位ACK。
2)10位地址格式
要使用10位地址格式,需向I2CMDR的扩展地址使能位(XA)写1,并且要确保*数据格式关闭(即I2CMDR的FDF=0)
起始位后第一个字节包括11110和从机地址的2个最高位MSBs以及一个读写选择位,第二个字节为剩下的8位地址。主机一旦向从机发送了第二个字节,就可以写数据,或者通过重复使用开始位(START)来改变数据传送方向。
七.I2C协议总线信号时序分析
1.总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上器件都处于释放状态。
2.应答信号ACK
I2C总线的数据都是以8位进行传送,发送器每发送一个字节后,在SCL第9个时钟脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线电平拉低)来表示数据成功接收。
3.无应答信号NACK
在SCL第9个时钟脉冲期间释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途:
a.表示接收器未成功接收数据字节;
b.当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。
八.写通讯过程(便于加深理解)
- 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
- 发送一个地址字节,包括7位地址码和一位=0;
- 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号ACK;
- 主控收到ACK信号后,开始发送第一个数据字节;
- 被控器件收到数据字节后发送一个ACK表示继续传送数据,,发送NACK表示数据传送结束;
- 主控发送完全部数据后,发送一个停止信号STOP,结束整个通讯并释放总线。
九.读通讯过程
- 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
- 发送一个地址字节,包括7位地址码和一位=1;
- 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号ACK;
- 主控收到ACK信号后释放数据总线,开始接收第一个数据字节;
- 主控器件收到数据字节后发送一个ACK表示继续传送数据,,发送NACK表示数据传送结束;
- 主控接收完全部数据后,发送一个停止信号STOP,结束整个通讯并释放总线。
十.I2C协议寻址约定
地址的分配方法有两种:
1.含CPU的智能器件,地址由软件初始化时定义,但不能与其它器件有冲突;
2.不含CPU的非智能硬件,由厂家在器件内固化,不可改变。
高7位为地址码,其分为两部分:
1.高4位属于固定地址不可改变,由厂家固化的统一地址;
2.第三位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定,也并非所有器件都是引脚设定)。
*****************************************************************************************************************这部分内容比较多,全是理论为主,以上只是讲了一些经常用到的知识点,还有一些没有在此写出来,如果有需要可以查阅开发板产品中关于【I2C模块部分手册】。
好啦,这部分暂时没有软件实验部分,这一讲结束。