I2C 主控器规范译文.docx

上传人:b****8 文档编号:9622970 上传时间:2023-02-05 格式:DOCX 页数:16 大小:407.27KB
下载 相关 举报
I2C 主控器规范译文.docx_第1页
第1页 / 共16页
I2C 主控器规范译文.docx_第2页
第2页 / 共16页
I2C 主控器规范译文.docx_第3页
第3页 / 共16页
I2C 主控器规范译文.docx_第4页
第4页 / 共16页
I2C 主控器规范译文.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

I2C 主控器规范译文.docx

《I2C 主控器规范译文.docx》由会员分享,可在线阅读,更多相关《I2C 主控器规范译文.docx(16页珍藏版)》请在冰豆网上搜索。

I2C 主控器规范译文.docx

I2C主控器规范译文

I2C主控器规范

作者:

RichardHerveille2003年7月3日

1介绍

I2C是一种两线式双向串行总线,在设备间提供一种简单有效的数据交换方式。

它最适合应用在一个临时的短距离多设备间的通信请求。

I2C总线标准是一个真正的多主机总线,它包括冲突检测和仲裁,在两个或两个以上的主机试图同时控制总线时防止数据损坏。

该接口定义了三种传输速率:

-标准模式:

100Kbps

-快速模式:

400Kbps

-高速模式:

3.5Mbps

直接支持100Kbps和400Kbps模式。

对于高速模式,特殊的IOS是必须的。

如果这些IOS是可用的,那么高速模式也同样支持。

特点:

•兼容飞利浦I2C总线标准

•多主机操作

•软件可编程时钟频率

•时钟延展和等待

•软件可编程响应

•中断或传输数据的循环

•仲裁丢失中断,自动取消传送

•启动/停止/重启动/确认位

•启动/停止/重复开始检测

•总线繁忙检测

•支持7和10位寻址模式

•可在各种运作中输入时钟频率

•静态同步设计

•完全仿真

2.IO端口

2.1核心参数

2.1.1ARST_LVL

异步复位水平可被设定为高电平有效(1'b1),或低电平有效(1'b0)。

2.2WISHBONE总线接口信号

核心采用了WISHBONERevB.3,兼容WISHBONE总线的经典界面。

包含了所有输出信号。

每次访问需要2个时钟周期.

arst_i不是WISHBONE总线兼容的信号。

它提供了针对FPGA实现的工具。

用[arst_i]替代[wb_rst_i]可以降低模块使用和提高性能,因为大多数FPGA提供一个专用的异步复位路径。

配合其他的一个否定位使用[arst_i]或[wb_rst_i]。

2.3外部链接

I2C总线接口采用串行数据线(SDA)和一个串行时钟线(SCL)传输数据。

所有设备连接到这两个信号线上,而且必须连接开路漏电极或开路集电极。

两个信号线都必须通过外部电阻器连接到VCC上。

SCL和SDA信号线的三态缓冲器必须连接高电平上,连接图见下图

为FPGA设计的编译器使用下列代码可以自动插入这些缓冲器

VHDL代码:

scl<=scl_pad_owhen(scl_padoen_oe=‘0’)else‘Z’;

sda<=sda_pad_owhen(sda_padoen_oe=‘0’)else‘Z’;

scl_pad_i<=scl;

scl_pad_i<=sda;

Verilog代码:

assignscl=scl_padoen_oe?

1’bz:

scl_pad_o;

assignsda=sda_padoen_oe?

1’bz:

sda_pad_o;

assignscl_pad_i=scl;

assignsda_pad_i=sda;

3寄存器

3.1寄存器列表

3.2寄存器描述

3.2.1分频寄存器

这种寄存器是用来预定SCL时钟线的频率的。

由于I2C接口的结构,芯片采用5倍的SCL内部时钟。

分频寄存器必须在5倍的SCL频率下编程。

只有当‘EN’位被清除时,才可以改变寄存器的值。

例:

wb_clk_i=32MHz,想要得到SCL=100KHz

频率=32MHZ/(5*100KHZ)-1=63(dec)=3F(hex)

重置值:

0xFFFF

3.2.2控制寄存器

只有当EN位被设置时存储器才会响应新的命令。

在停止命令后,当没有数据传输或在命令寄存器内设置一个停止位时清除EN位。

当传输突然停止时,存储器可以暂停I2C总线。

3.2.3传输寄存器

复位值:

0x00

3.2.4接收寄存器

复位值:

0x00

3.2.5命令寄存器

复位值:

0x00

STA,STO,RD,WR,和IACK位自动清除。

这些位总是为零

3.2.6位寄存器

复位值:

0x00

请注意,所有保留位改为零。

为了确保相互兼容,就应该写为0。

4.操作

4.1系统配置

在I2C总线系统采用串行数据线(SDA)和串行时钟线(SCL)传输数据时,所有设备连接到这两个信号上,而且必须连接开放漏电极或开放集电极输出,都必须连接到一个外部上拉电阻。

数据通过SCL和SDA信号线在主机和设备之间进行同步传输。

每一个数据字节是8位长。

一个SCL时钟脉冲里每个数据位的最高有效位被首先发送。

每个传输字节后面都有一个响应位。

在SCL高电平时数据有效;因此,在SCL低电平时SDA的高低状态允许改变,在SCL高电平时SDA状态必须保持稳定。

4.2I2C协议

一般来说,一个标准的通信包括四个部分:

1)开始信号

2)从设备地址传输

3)数据传输

4)停止信号

4.2.1开始信号

当总线是空置/闲置,这意味着没有主机在使用总线(包括SCL线和SDA线都是高电平),一个主机通过发送一个开始信号开始传输数据,。

一个开始信号,通常称为S位,被定义为当SCL为高电平时,SDA有高电平向低电平转换。

这个开始信号表示一个新数据传送的开始。

可以产生重复开始信号而不产生一个停止条件。

主机通过这种方式与其他从设备通信,设备通过反方向与主机通信(如:

从一个设备写到从一个设备读)

当命令寄存器的STA位被设置为有效,RD或WR位被设置为有效时产生一个开始信号。

根据SCL的现实状态产生开始信号或重复开始信号。

4.2.2从器件地址传送

在开始信号之后是从器件地址,后面是主机要传送数据的首字节。

在7位地址之后是一个读写位。

这个读写位标志着器件数据传输的方向。

两个从器件不可能有相同的地址。

只有从器件地址相匹配,才能在第9个SCL时钟周期接受一个由主机产生的SDA线为低电平的响应位。

注:

支持10位地址扩展。

详细的信息请看飞利浦I2C总线规格。

芯片对从器件地址传输与写操作相同。

在传输寄存器中保存从器件的地址,WR位设置为有效。

芯片将在总线上传输从器件地址。

4.2.3数据传输

在获得从器件地址之后,数据输出的进行可以通过由主机发出的RW位来确定传输的方向。

每个传输字节后的第9个SCL时钟周期是一个响应位。

如果没有响应位,则主机可能产生一个停止信号中断数据传输,或者产生一个重复开始信号开始一个新的传输过程。

如果主机作为接收设备,则从器件不响应,从器件释放SDA线用来使主机产生停住信号或重复开始信号。

写操作,在传输寄存器中存放传输数据,并将WR设置为有效。

读操作,要将RD位设置为有效。

在传输数据时芯片要设置TIP标示,表示正在传输数据。

当输出结束时要将TIP标示复位,当TIP标示设置为有效时,产生一个中断信号。

在接收寄存器包含有效数据之后TIP标示被设置为有效。

当TIP标示复位后使用者才能发出一个新的读或写的命令。

4.2.4停止信号

主机可以通过停止信号终止通信产生。

停止信号,通常被称为是P位,被定义当SCL线位于高电平时,SDA线由低向高电平的转换。

4.3仲裁

4.3.1时钟同步

I2C总线是一个真正的多主机总线,允许一个以上的主机连接它。

如果两个或两个以上的主机试图同时控制总线,时钟同步程序确定总线时钟。

由于连接在I2C总线上的线路电平由高到低的转换将影响所有连接在总线上的设备。

因此,SCL线由高到低的转换与有关设备在低电平时的状态有关。

但是如果另一个时钟仍处于低电平周期,这个时钟由低到高电平的切换不会改变SCL线的状态,因此SCL线被有最长低电平周期的器件保持低电平,有最短高电平周期的设备保持高电平。

4.3.2时钟延展

从器件可以使用时钟同步机制,以减缓传输比特率。

在主机完成SCL为低电平之后,从器件可以在规定期间内使SCL为低电平,然后释放。

如果从器件的SCL线低电平期大于主机的SCL线低电平,由此插入等待位产生SCL线的时钟延展

5.体系结构

I2C总线的芯片建立四个主要模块:

时钟发生器,字节命令控制器,位命令控制器令和数据转移寄存器,其他的模块用于接口或存储临时值。

5.1时钟发生器

该时钟发生器产生一个4*FSCL内部时钟信号,触发位于位命令控制中的所有同步元件。

它也处理所需要时钟伸展的从器件。

5.2字节命令控制器

字节命令控制器使用于处理I2C的字节传输。

它是数据按照正确的次序逐个由命令寄存器中传输。

通过在命令寄存器中设置START,STOP,和READ位来实现。

例如,字节命令控制器生成一个序列,从而产生一个开始信号,从器件读一个字节,然后产生一个停止信号。

为此,它会将每个字节操作分为单独位操作,然后发送到位命令控制器。

5.3位命令控制器

位命令控制器通过控制SCL线和SDA的线路处理实际传输的数据和产生开始,重复开始,停止信号。

字节命令控制器控制位命令控制器进行操作。

对于单字节读取,位命令控制器收到8个独立读取命令。

每个位操作分为5个阶段(闲置和A,B,C和D),除停止操作外分为4个阶段(闲置和A,B和C)。

5.4数据转移寄存器

数据移位寄存器包含当前要转移的相关数据。

在读操作中,数据通过SDA线转移。

在一个字节被读取后,其内容被复制到接收寄存器。

在写操作中,发送寄存器的内容复制到数据移位寄存器中,然后通过SDA线传输。

6.编程示例

示例1

写一位数据。

从器件地址=0x51(b”1010001”),数据=0xAC

I2C总线序列:

1)生成启动命令

2)写入从地址+写位

3)从器件接收响应

4)写入数据

5)从器件接收响应

6)产生停止命令

命令:

1)写入0xA2(地址+写位)到传送寄存器,设置STA位和WR位。

-等待中断或取消TIP标志-

2)从状态寄存器中读取RxACK位,应为'0'。

写0xAC到传送寄存器,设置STO位和WR位。

-等待中断或取消TIP标志-

3)从状态寄存器读取RxACK位,应为‘0’。

请注意,时间中断程序没有在这里显示。

它是假定的ISR比I2C总线周期时间快,因此可忽略。

示例2

从一个I2C存储设备读取一个字节数据。

从器件地址=0x4E,读取内存位置=0x20

I2C总线序列:

1)产生启动信号

2)写入从地址+写位

3)从器件接收响应

4)写入内存位置

5)从器件接收响应

6)产生重复启动信号

7)写入从地址+读位

8)从器件接收响应

9)从从器件读取字节

10)写入不响应位(NACK)到从器件,说明传输结束

11)产生停止信号

命令:

1)写入0x9C(地址+写位)到传送寄存器,设置STA位和WR位。

-等待中断或取消TIP标志-

2)从状态寄存器读取RxACK位,应为'0'。

写入0x20到传送寄存器,设置WR位。

-等待中断或取消TIP标志-

3)从状态寄存器读取RxACK位,应为'0'。

写入0x9D(地址+读位)到传送寄存器,设置STA位和WR位。

-等待中断或取消TIP标志-

4)设置RD位,设定ACK为'1'(NACK),设置STO位

请注意,时间中断程序没有在这里显示。

它是假定的ISR比I2C总线周期时间快,因此可忽略。

附录A仿真结果

仿真工具:

SynplifyPro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1