I2C 主控器规范译文Word文档格式.docx
《I2C 主控器规范译文Word文档格式.docx》由会员分享,可在线阅读,更多相关《I2C 主控器规范译文Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
•时钟延展和等待
•软件可编程响应
•中断或传输数据的循环
•仲裁丢失中断,自动取消传送
•启动/停止/重启动/确认位
•启动/停止/重复开始检测
•总线繁忙检测
•支持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;
=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接收寄存器
3.2.5命令寄存器
STA,STO,RD,WR,和IACK位自动清除。
这些位总是为零
3.2.6位寄存器
请注意,所有保留位改为零。
为了确保相互兼容,就应该写为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位。
3)从状态寄存器读取RxACK位,应为‘0’。
请注意,时间中断程序没有在这里显示。
它是假定的ISR比I2C总线周期时间快,因此可忽略。
示例2
从一个I2C存储设备读取一个字节数据。
从器件地址=0x4E,读取内存位置=0x20
1)产生启动信号
4)写入内存位置
5)从器件接收响应
6)产生重复启动信号
7)写入从地址+读位
8)从器件接收响应
9)从从器件读取字节
10)写入不响应位(NACK)到从器件,说明传输结束
11)产生停止信号
1)写入0x9C(地址+写位)到传送寄存器,设置STA位和WR位。
2)从状态寄存器读取RxACK位,应为'
写入0x20到传送寄存器,设置WR位。
3)从状态寄存器读取RxACK位,应为'
写入0x9D(地址+读位)到传送寄存器,设置STA位和WR位。
4)设置RD位,设定ACK为'
1'
(NACK),设置STO位
附录A仿真结果
仿真工具:
SynplifyPro