EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——凔海笔记之FPGA(九):Verilog描述IIC单字节读写协议 & e& d* |! F q9 K
0 ]; }6 f: f& [; e
一、简介AT24C045 X& z; E. _8 N4 ]/ I
AT24C04是小容量(4KB)IIC总线EPROM存储元件。这句话说得很有内容呀。首先,AT24c04是存储元件,还是EPROM即可擦写可编程只读存储器,而且断电可保存。其次,对AT24c04的控制是采用IIC协议的,也就是说,IIC≠AT24C04,曾几何时,傻傻的以为IIC=AT24CXX。
8 f! q1 v+ [' b& h
I9 f8 C9 I( m U 那接下来,就先说一下AT24C04吧。
6 H9 C, x: E P* ^' A3 v1 S
; j$ q) t' _- @. n/ O! RA0空引脚,不是地址设置引脚,A1/A2器件地址设置引脚,是用来设置器件地址的,可以挂4个AT24c04。WP写保护,低电平可对整个AT24c04的512字节进行读写操作,高电平则会使前256个地址受保护,只读不能写,后面的则爱咋地咋地了。SDA数据总线,是一个双向口,SCL则是时钟线。" T! `) P6 \! j% N% T# [
IIC总线采用两线制,由数据线SDA和时钟线SCL构成。IIC总线对数据通信时序进行了严格的定义,主要包括起始、应答、结束还有数据读写的时序。 Q! I7 y# r; b7 R$ g8 `2 d2 Y
下面,就看看IIC单字节读写操作吧。n(*≧▽≦*)n
" H, M. q; Z! h8 B4 m* X
) q. Q7 {( d9 I0 r; z4 ^* o) S
可见,写IIC协议就是玩拼图,拼的好与坏,就看咱对时序的分析了。* {& A1 K5 v9 u
但在玩拼图之前咱还是先了解一下IIC协议的一些基本知识。
0 p# ^* b2 R, {1、起始信号/ n8 c# E1 e9 }8 f3 ` \
SCL保持高电平的状态下,SDA出现下降沿定义为I2C总线的起始信号,它是由主控器主动建立的一种电平跳变时序信号,标志着一次数据传输的开始,而在建立该信号之前IIC总线必须处于空闲状态。瞧下图
; j" ^9 q2 d D0 U" S
, B, C0 o0 D/ W9 \6 J
4 Q! T% q! x5 c! T% H
2、写地址/ }! H2 w' P8 F
写地址包括写设备地址和写数据地址。就如同笔者兼职家教,得先找到人家在哪个小区哪个楼,再找到人家在哪个单元等。然后才能去输出自己的知识(数据)。9 C# y, E) V3 C3 f# w: w2 Q
写地址有固定的格式:( \* A8 j9 y7 l& P$ n: i$ n/ Y6 A# p
$ p5 r l9 _# K; y
硬件ID:就是知道是哪个小区,它会随着厂商设备的种类不同而改变,例如:AT24C04是4’b1010。
# h w2 w- d8 K; Z0 g硬件地址:就是芯片上的A0\A1\A2,A0空引脚(why?),A1/A2器件地址设置引脚,是用来设置器件地址的,可以挂4个AT24c04。
" R+ }7 J& c4 j" n6 C访问方向:写为1读是0。
6 M0 |' N z$ l* I2 P. v# K写数据地址:AT24C04可以对512字节进行读写操作,而数据地址只有8位!也就是说,只能读写256字节,肿么破??????????????这时候会不会想到A0为什么说是空引脚呢?没错,它就是来凑数的,实现对512字节的读写。对此,我不得不说8 e2 B6 N/ j- d/ p3 J$ S8 h
9 B1 J: C9 @2 j% q W) K o5 R
还得补充一句,写数据是新的下降沿跟新数据,上升沿锁存/读取数据。" N: i8 i. ?! B# a6 l# `
3、应答信号2 S$ x7 f, J$ B% ?' o4 `# E% A. u
IIC总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在下一个时钟脉冲释放数据线,由主机反馈一个应答信号。读数据就无视应答位。! ?) z6 a( X; A) I
应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示主机已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示主机接收该字节没有成功。' z! x( Z: x! e" b0 y4 ?
8 M& ]( M8 A) z# z+ p! ]
4、读写数据:9 O" D8 \3 c) i5 ~# h \7 h7 \" V8 M
写数据就是写数据是新的下降沿跟新数据,上升沿锁存/读取数据,并且高位在前- }9 k* T' O7 o% b
读数据可以看做重复读取8次应答位,SCL的下降沿使从机跟新数据,然后主机在SCL的上升沿读取数据,此外,从机也会由高到低更新数据位。
, P# f+ } L j; y& T结束位:8 [2 B' z- w- A1 ~+ J
在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。
2 f4 E6 I7 ^( T* P# \ 停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。
2 E& f: J4 N& ~( q- Y
7 u' e$ l$ F7 Y; k
所谓的空闲状态就是I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
" o% ]: {& o/ ?8 A1 B |