单片机学习笔记 18. IIC总线EEPROM(理论)
更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁
单片机学习笔记 3. LED灯流水灯
单片机学习笔记 4. 蜂鸣器滴~滴~滴~
单片机学习笔记 5. 数码管静态显示
单片机学习笔记 6. 数码管动态显示
单片机学习笔记 7. 独立键盘
单片机学习笔记 8. 矩阵键盘按键检测
单片机学习笔记 9. 8×8LED点阵屏
单片机学习笔记 10. 中断系统(理论)
单片机学习笔记 11. 外部中断
单片机学习笔记 12. 定时/计数器_定时
单片机学习笔记 13. 定时/计数器_计数
单片机学习笔记 14. 定时/计数器_中断
单片机学习笔记 15. 串口通信(理论)
单片机学习笔记 16. 串口通信
单片机学习笔记 17. 串口通信-发送汉字
目录
0、实现的功能
使用程序模拟IIC通信协议
1、Keil工程
1-1 串行通信中的IIC总线工作原理和协议
常用的串行总线协议有:UART、1-wire、I2C、SPI
主从方式是主机主动,从机不会主动
在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,I2C总线要通过总线仲裁,以决定由哪一台主机控制总线
在80C51单片机应用系统的串行总线扩展中,我们经常遇到的是以80C51单片机为主机,其它接口器件为从机的单主机情况。
IIC中默认为高电平(和P0口类似,都接上拉电阻),任一为低电平,则都为低电平。
IIC总线传输协议
SCL必须都为高电平。因为是主从模式,必须从主机接收到信号才能够发送数据,此时数据总线SDA由高电平变为低电平
不需要接收数据的时候,总线就占用状态(为1)即可。
应答位的作用:
- 主机在发送数据时,每次发送一字节数据,都需要读取从机应答位,当从机空闲可以接收该字节数据时,从机会发出应答(一帧数据的第9位为“0”),当从机正忙于其他工作的处理来不及接收主机发送的数据时,从机会发出非应答(一数据的第9位为“1”)主机则应发出终止信号以结束数据的继续传送,主机通过从机发出的应答位来判断从机是否成功接收数据
- 当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线(不然从机的SDA一直为0,下次主机就无法传输数据),以允许主机产生终止信号
数据帧格式
起始信号后还有一个字节的数据,前7位表示从机地址,第8位表示R1/T0
在总线的数据传输中,可以有以下几种方式:
主机只要不想要数据的时候,就要发送非应答信号,不然会影响下一次的数据传输
总线的寻址
寻址字节的定义,前面已经说了,前7位地址位,最后一位表示读/写
寻址过程:
- 主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/T位将自己确定为发送器或接收器
- 从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8(2*2*2)个同样的器件,即可以有8个同样的器件接入到该12C总线系统中。
80C51单片机I2C串行总线器件的接口
总线数据传送的模拟
主机可以采用不带I2C总线接口的单片机,如80C51、STC89C52等单片机,利用软件实现I2C总线的数据传送,即软件与硬件结合的信号模拟。
I2C对信号应答的响应时间是有要求的。应答信号的时钟信号要大于4us,起始/终止信号的数据信号高电平大于4.7us,低电平大于4us
起始/终止信号时,SCL时钟信号都为高的情况,SDA再发生变化;应答信号时,SCL时钟信号都为低的情况,SDA再发生变化。
这和前面的数据位的有效性规定一致,SCL高电平时,SDA的数据必须稳定,只有SCL低电平时,SDA状态才允许变化
I2C起始信号
//IC起始信号程序 void I2cStart() { SCL =1; SDA =1; delay5us(); SDA = 0; delay5us(); }
I2C终止信号
//IC终止信号程序 void I2cStop() { SCL = 0; SDA = 0; SCL = 1; delay5us(); SDA = 1; delay5us(); }
I2C主机读 从机应答
//I2C主机读从机应答 bit ReadACK() { SCL = 1; delay5us(); if(SDA) { SCL = 0; return(1); } else { SCL = 0; return(0); } }
I2C主机发送应答
//I2C主机发送应答 void SendACK(bit i) { SCL = 0; if(i) SDA = 1; else SDA = 0; SCL = 1; delay5us(); SCL=0;//拉低时钟总线 SDA =1; //释放数据总线 }
串行EEPROM的扩展
(1)串行EEPROM典型产品
ATMEL公司的AT24C系列:(1k指的是1k位bit,也就是128字节Byte)
该单片机用的是AT24C02
(2)写入过程
AT24C系列E2PROIM芯片地址的固定部分为1010,A2、A1、A0引脚接高、低电平后得到确定的3位编码。形成的7位编码即为该器件的地址码。
单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为响应,单片机收到应后就可以传送数据了。(3)读出过程
起始信号--地址+0(写)--从机应答--主机写数据--从机应答--新的起始信号--地址+1(读)--从机应答--从机写数据--主机应答----------主机非应答--主机暂停
原文地址:https://blog.csdn.net/u014087103/article/details/144358173
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!