蓝桥杯单片机IIC总线协议及EEPROM AT24C02
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
页写时序
S
1010XXX0
A 字节首地址 A
Data1
A
Data2
A
… …
A
Data n
A
P
写保护
写保护操作特性可使用户避免由于不当操作而造成对存 储区域内部数据的改写。 当 WP管脚接高时,整个寄存器区全部被保护起来而变 为只可读取;24C02可以接收从器件地址和字节地址,但是 装置在接收到第一个数据字节后不发送应答信号从而避免寄 存器区域被编程改写 。
串行E2PROM典型产品 ATMEL公司的AT24C系列:
AT24C01:128字节(128×8位); AT24C02:256字节(256×8位); AT24C04:512字节(512×8位) AT24C08:1K字节(1K×8位); AT24C16:2K字节(2K×8位);
AT24C02引脚分布
S
1010XXX0
A 字节首地址 A
Data1
A
Data2
A
… …
A
Data n
A
P
单片机从24C02的add地址上读取一个数
unsigned char rdbyte_24c02(unsigned char add) { // Device Address 1100 000 R/W unsigned char da; iic_start(); iic_sendbyte(0xa0); iic_waitack(); iic_sendbyte(add); iic_waitack(); iic_start(); iic_sendbyte(0xa1); iic_waitack(); da = iic_recbyte(); iic_ack(0); iic_stop(); return da; }
void iic_start(void) { SDA = 1; _nop_(); SCL = 1; somenop; SDA = 0; somenop; SCL = 0; }
终止信号
void iic_stop(void) { SDA = 0; _nop_(); SCL = 1; somenop; SDA = 1;
传送数据时,单片机首先发送一个字节的被写入器件的 存储区的首地址,收到存储器器件的应答后,单片机就逐个 发送各数据字节,但每发送一个字节后都要等待应答。 AT24C系列器件片内地址在接收到每一个数据字节地址后 自动加1,在芯片的“一次装载字节数”(不同芯片字节数不 同)限度内,只需输入首地址。装载字节数超过芯片的“一 次装载字节数”时,数据地址将“上卷”,前面的数据将被 覆盖。 当要写入的数据传送完后,单片机应发出终止信号以结束 写入操作。写入n个字节的数据格式 :
WP 写保护 如果WP 管脚连接到 Vcc 所有的内容都被写保护,只能读。当 WP 管脚连接到Vss或悬空,允许器件进行正常的读/写操作。
AT24C02读写时间周期
AT24C02功能描述 AT24WC01/02/04/08/16 支持 I2C 总线数据传送协议 和I2C总线协议规定。 任何将数据传送到总线的器件作为发送器,任何 从总线接收数据的器件为接收器。 数据传送是由产生串行时钟和所有起始停止信号 的主器件控制的,主器件和从器件都可以作为发送器 或接收器,但由主器件控制传送数据 ( 发送或接收 ) 的 模式,通过器件地址输入端 A0 、 A1 和 A2 可以实现将 最多 8 个 24WC01 和 24WC02 器件, 4 个 24WC04 器件 (仅使用A1A2 地址管脚),2个24WC08器件(仅使用地址 管脚 A2 A0)和 1个 24WC16器件连接到总线上(所有 地址管脚 A0 A1 A2 都未用)。
void iic_sendbyte(unsigned char byt) { unsigned char i; for(i=0;i<8;i++) { if(byt&0x80) SDA = 1; else SDA = 0; somenop; SCL = 1; byt <<= 1; somenop; SCL = 0; } }
器件寻址
1 0 1 0 A2 A1 A0
R/W
主器件通过发送一个起始信号启动发送过程,然后发送它 所要寻址的从器件的地址: 8位从器件地址的高4位固定为1010,接下来的3位A2A1A0 为器件的地址位,用来定义哪个器件以及器件的哪个部分被 主器件访问。 最低位作为读写控制位: 1 表示对从器件进行读操作 0 表示对从器件进行写操作
在主器件发送起始信号和从器件地址字节后24C02监视总线 并当其地址与发送的从地址相符时,响应一个应答信号(通过 SDA线),24C02根据读写控制位(R/W)的状态进行读或写操作
应答信号
I2C总线数据传送时,每成功地传送一个字节数据后,接 收器都必须产生一个应答信号,应答的器件在第9个时钟周期 时,将SDA线拉低,表示其已收到一个8位数据。 24C02在接收到起始信号和从器件地址之后响应一个应答 信号,如果器件已选择了写操作,则在每接收一个8位字节之 后响应一个应答信号; 当24C02工作于读模式时,在发送一个 8 位数据后释放 SDA线并监视一个应答信号,一旦接收到应答信号,24C02 继续发送数据,如主器件没有发送应答信号器件停止传送 数据且等待一个停止信号。
S 1010XXX0 A 字节首地址 A S 1010XXX1 A Data1 A … … A Data n A P
大赛24C02部分电路图
起始信号
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();} sbit SCL = P2^0; sbit SDA = P2^1;
应答时序
主机时钟
发送器输出的数据
接收器输出的数据
(2)写入过程
AT24C系列E2PROM芯片地址的固定部分为 1010,A2、A1、A0引脚接高、低电平后得到确定 的3位编码。形成的7位编码即为该器件的地址码。 单片机进行写操作时,首先发送该器件的7位地 址码和写方向位“0”(共8位,即一个字节),发 送完后释放SDA线并在SCL线上产生第9个时钟信 号;被选中的存储器器件在确认是自己的地址后,在 SDA线上产生一个应答信号作为相应,单片机收到 应答后就可以传送数据了。
每发送一个字节数据后24C02产生一个应答位并将字节 地址低位加 1 高位保持不变 ,如果在发送停止信号之前主 器件发送超过P+1个字节 地址计数器将自动翻转,先前写 入的数据被覆盖。
接收到P+1字节数据和主器件发送的停止信号后 24C02 启动内部写周期将数据写到数据区,所有接收的数据在一 个写周期内写入24C02。
somenop; SCL=0;
}
单片机向24Hale Waihona Puke Baidu02的应答信号
void iic_ack(bit ackbit) { if(ackbit) SDA = 0; else SDA = 1; somenop; SCL = 1; somenop; SCL = 0; SDA = 1; }
24C02 单片机
单片机等待来自24C02的应答信号
S
1010xxx0
A
字节首地址
A
Data1
A
Data2
A
… …
A
Data n
A
P
写入时序
S
器件地址+0
A 字节首地址 A
Data1
A
Data2
A
… …
A
Data n
A
P
页写
24C02可以一次写入 16 个字节的数据 页写操作的启动和字节写一样,不同在于传送了一字节 数据后并不产生停止信号,主器件被允许再发送 P=15个额 外的字节;
I2C总线器件的扩展
一、扩展电路
基于IIC总线的E2PROM —— AT24C02
特性 与 400KHz IIC 总线兼容 1.8 到 6.0 伏工作电压范围 低功耗 CMOS 技术 写保护功能 当 WP 为高电平时进入写保护状态 页写缓冲器 自定时擦写周期 1,000,000 编程/擦除周期 可保存数据 100 年 8 脚 DIP SOIC 或 TSSOP 封装 温度范围 商业级 工业级和汽车级
bit iic_waitack(void) { SDA = 1; somenop; SCL = 1; 单片机 somenop; if(SDA) 24C02 { SCL = 0; iic_stop(); return 0; } else { SCL = 0; return 1; } }
单片机向24C02发送一个字节
单片机向24C02的add地址上,写入char型的数dat
void wrbyte_24c02(unsigned char add,unsigned char dat) { // Device Address 1010 000 R/W iic_start(); iic_sendbyte(0xa0); iic_waitack(); iic_sendbyte(add); iic_waitack(); iic_sendbyte(dat); iic_waitack(); iic_stop(); delay(10); }
连续读时序
小结读出过程
单片机先发送该器件的7位地址码和写方向位“0”(“伪 写”),发送完后释放SDA线并在SCL线上产生第9个时钟信 号。被选中的存储器器件在确认是自己的地址后,在SDA线 上产生一个应答信号作为回应。 然后,再发一个字节的要读出器件的存储区的首地址,收 到应答后,单片机要重复一次起始信号并发出器件地址和读 方向位(“1”),收到器件应答后就可以读出数据字节,每 读出一个字节,单片机都要回复应答信号。当最后一个字节 数据读完后,单片机应返回以“非应答”(高电平),并发 出终止信号以结束读出操作。
读操作
24C02 读操作的初始化方式和写操作时一样,仅把 R / W 位置为 1 ,有三种不同的读操作方式:立即地址读、选择 读和连续读。
1
0
1
0
A2
A1
A0
R/W
立即地址读
AT24C02的地址计数器内容为最后操作字节的地址 加 1。也就是说,如果上次读/写的操作地址为 N,则立 即读的地址从地址 N+1开始。如果 N=E(这里对24WC01, E=127;对 24WC02,E=255;对24WC04,E=511;对 24WC08,E=1023;对 24WC16,E=2047)则计数器将 翻转到 0 且继续输出数据。 AT24C02 接收到从器件地址信号后R/W 位置 1,它首 先发送一个应答信号,然后发送一个8 位字节数据,主器 件不需发送一个应答信号,但要产生一个停止信号。
单片机从24C02读取一个字节
unsigned char iic_recbyte(void) { unsigned char da; unsigned char i; for(i=0;i<8;i++) { SCL = 1; somenop; da <<= 1; if(SDA) da |= 0x01; SCL = 0; somenop; } return da; }
I2C总线协议
1、只有在总线空闲时才允许启动数据传送; 2、在数据传送过程中,当SCL=1时,数据线SDA必须保持 稳定状态,不允许有跳变;SCL=1时,数据线SDA的任何电 平变化将被看作总线的起始或停止信号;
起始信号 时钟线SCL保持高电平期间,数据线SDA电平从高到低 的跳变作为I2C总线的起始信号。 停止信号 时钟线SCL保持高电平期间,数据线SDA电平从低到高的 跳变作为I2C总线的停止信号
立即地址读时序
选择性读
选择性读操作允许主器件对寄存器的任意字节进行读 操作,主器件首先通过发送起始信号、从器件地址和它想 读取的字节数据的地址执行一个伪写操作。
在24C02应答之后,主器件重新发送起始信号和从器件 地址,此时R/W位置1,24C02响应并发送应答信号,然后 输出所要求的一个8 位字节数据,主器件不发送应答信号 但产生一个停止信号 。
选择性读时序
连续读
连续读操作可通过立即读或选择性读操作启动,在24C02 发送完一个 8 位字节数据后,主器件产生一个应答信号来响 应,告知24C02主器件要求更多的数据,对应每个主机产生的 应答信号,24C02将发送一个 8 位数据字节,当主器件不发 送应答信号而发送停止位时结束此操作。 从24C02输出的数据按顺序由 N 到 N+1 输出,读操作时, 地址计数器在24C02 整个地址内增加,这样整个寄存器区域 在可在一个读操作内全部读出。当读取的字节超过E (这里对 24WC01, E=127;对 24WC02,E=255;对24WC04, E=511;对24WC08,E=1023;对 24WC16,E=2047),计 数器将翻转到零并继续输出数据字节。