1.总纲--复习IIC(inter integrated circuit)协议以及自己顺便读一下数据手册。

/*************************************************************************************/

1.1IIC协议的总结

1.2AT24C02的数据手册的阅读

1.3AT24C02关键部分的摘抄,以及IIC协议的引入及使用

1.4关键代码的编写,以及AT24C02的上层协议。

/*************************************************************************************/

1.1IIC协议

1.1.1、首先IIC协议分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。在多主机的系统中,如果有多个主机

只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL, (IIC是半双工而不是全双工)

两根线经过上拉电阻上拉之VCC,所以总线在空闲的状态下都是高电平。

注意:IIC协议:在SCL的高电平周期内,SDA线上的数据必须保持稳定(因为在SCL为高电平时,SDA如果有跳变就会被认为起始信号或者终止信号),数据线SDA仅可以在时钟SCL为低电平时改变。这一点可以参考时序图看出。

1.1.2、起始信号:SCL为高时 SDA是由高电平向低电平变化。

1.1.3、终止信号:SCL为高时 SDA为由低电平向高电平变化。

1.1.4、应答信号:每当主机向从机发送8bit数据时第九个时钟周期,从机需要给出一个低电平表示应答,

1.1.4、发送寻址信号。

数据帧格式:
有应答与非应答,
分为地址信息 和 数据信息,地址8bit--- 7位表示从机地址 第8位表示读还是写。
数据则按照数据手册的时序图来编写。
具体编写代码时:
要注意是从高位到低位,还是从低位到高位传输数据。一样采用移位位与/位或的方式。

1.2AT24C02的数据手册的阅读

概括性知识:首先阅读一外设芯片的数据手册时,要大致这个芯片的作用是什么?然后要知道这款芯片对外的接口是什么?

(是标准的协议比如SPI、IIC或其他标准协议又或者是该芯片的自定义的时序图通信协议比如ds18B20单总线协议、LCD的驱动都是自定义的协议)。然后就是熟读该芯片的数据手册熟悉他的结构及寄存器,这样才能更了解该芯片的使用功能。

在这里先get一下重点:一般芯片的数据手册中比较重要(也是相通的地方)的地方:一般开头都是:概括,特性,封装

然后最重要的是 interface,然后就是按照他的上层协议得到相应的数据。

那么接下来介绍如何读24c02芯片的数据手册。

按照我们上边的分析来看,这是一个内存(flash)芯片,说白了就是存储数据,如何将数据写入存储,在需要的时候将数据读出使用。先把准一个大方向。

首先是特性,然后就是封装,引脚介绍, 当然我们通过其引脚判断 SDA、SCL、VCC、GND.我们就知道该芯片是通过IIC总线协议来通信的,具体我们可以先写IIC底层时序。(这次之前先要初始化GPIO,主要是SDA、SCL这两个引脚)这里把属于IIC的底层时序,写到这里(为了和AT24C02的上层时序写在一起)

启动、终止、应答、写一个字节、读一个字节,

1.2.1启动代码&&终止代码

在初始化gpio引脚后,将SCL和SDA拉高。让总线处于空闲状态。

 void IIC_Start()
{
SCL=;
SDA=;
Delay();
SDA=;
Delay();
SCL= ; //这里将SCL线拉低,钳住SCL,已经准备好发送或接受数据。也就是说每次Start信号后,SCL是被拉低的。
}
void IIC_End()
{
SCL=;
SDA=;
Delay();
SCL=;
Delay();
SDA=;
Delay();
}

起始信号产生后总线处于被占用的状态,在终止信号产生后总线处于空闲状态。然后起始信号的终止信号都是由主机发出的。

1.2.2、IIC总线的数据传输

IIC数据传输:这里说的数据起始也包括地址数据和真正传输的数据,

然后发送一个字节的数据。

void Send_Byte(char data)
{
char a=0;
SCL=0; //先将SCL时钟线拉低
//MSB (the Most Significant Bit) 高位在前
for(a=0;a<8;a++)
{
SDA=(data&0x80)>>7
data=data<<1;
Delay();
SCL=1;
Delay();
SCL=0;
Delay(); //具体延时时间数据手册中的时序图中具体有写。
} }

应答信号:即就是在等待从机是否将SDA拉低。但是如果没有等到该信号的到来,我们软件的设计需要足够灵活,不能死等下去导致系统死机,如果没有看门狗就会真正的挂掉的,所以设置一个变量我们只需要等待一定的时间认定这次数据不对,接着再读。

// 返回1的话 成功应答  返回0 没有应答。
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=;
SDA_IN(); // 将SDA 数据线设置为输入
SDA=;delay_us();
SCL=;delay_us();
while(READ_SDA) //判断 SDA数据线是否为低,也就是是否应答。
{
ucErrTime++;
if(ucErrTime>) // 软件设置超时时间
{
IIC_Stop();
            ,return ;
}
}
SCL=;
return ;
}

读出一个字节的数据:根据IIC底层时序图。

char IIC_read_Byte()
{
char receive=,a=;
SCL=; //将SCL拉低,,在读数据之前,需要将io设置为输入模式
for(a=;a<;a++)
{
receive<<;
SCL=;
Delay();
SCL=;
Delay();
if(SDA)
receive|=0X01;
}
// 要添加应答信号,也就是说在第九个时钟周期,SDA是否为低电平。
// 具体看协议中是否规定了要求应答信号。如果有那么就要加上,如果无则不需要应答信号。 return receive;
}

数据手册中的接口协议(也就是基于IIC底层的上层的协议)

往AT24C02中的写入一个字节:(当然还有页写这里就以字节写为例)

往24c02中读出一个字节(当然还有页读这里以当前地址读为例):

从器件的地址 :

在起始信号后必须发一个从机的地址(7bit(地址信息)+1bit(R/W)( 写低电平有效 ))

E:\STM32\自己的总结回顾\各种总线知识汇总\iic-------文件夹中的iic、spi总线的ppt;

从AT24c02中一个地址中写入一个字节

//这是基于AT24C02数据手册也就是上边的数据帧格式(具体代码)

void Wirte_Byte(unsigned char addr,char date)      //我们默认该内存芯片的只有 256 Byte
{ IIC_Start(); // 起始信号 该函数结束时 SCL=0;
Send_Byte(0XA0);    // 发送从机地址,该函数刚开始时,SCL=0; 产生8个时钟周期后, SCL=0了。
IIC_Wait_Ack();    // ack的时候,首先将SDA设置成输入模式,SCL=1(第九个时钟周期的高电平),接下来等SDA是否为低电平,不管SDA是否
//为低电平,最后等待一定时间后,SCL最终就会拉低,(第九个时钟周期结束)。
Send_Byte(addr);
IIC_Wait_Ack();
Send_Byte(date);
IIC_Wait_Ack();    // 与上边次开始两行是一样的。最后 SCL=0;
TTC_End();          // 在SCL线为高时,SDA线产生下降沿。
}

复习IIC协议---以AT24C02为例的更多相关文章

  1. STM32F10x -- 利用IIC协议操作AT24C02

    关于AT24C02芯片的一些参数性能可参考其他的一些相关资料.此处只贴出程序. 宏文件AT24CXX.h #ifndef _AT24CXX_H_ #define _AT24CXX_H_ #includ ...

  2. 第十六章 IIC协议详解+UART串口读写EEPROM

    十六.IIC协议详解+Uart串口读写EEPROM 本文由杭电网友曾凯峰根据小梅哥FPGA IIC协议基本概念公开课内容整理并最终编写Verilog代码实现使用串口读写EEPROM的功能. 以下为原文 ...

  3. IIC协议建模——读写EEPROM

    案例采用明德扬设计思想完成.IIC协议是非常常用的接口协议,在电子类岗位招聘要求中经常出现它的身影.关于IIC协议这里只做简要介绍,详细信息请自行百度或查阅相关Datasheet,网上资料非常多.该篇 ...

  4. IIC协议学习笔记

    "移植"的重要性:并非所有的电路都得自己设计,到了一定阶段,"移植"也是一种学习能力.--CrazyBingo 转眼间期末又到了,最近开始了所谓的期末总预习,比 ...

  5. IIC协议理解(转)

    目录 IIC协议理解(转) 个人小结记录 (记一下这个就够了) 以下为转载记录 概述 概述 输出级 主设备与从设备 速率 时序 空闲状态 起始位与停止位 数据的有效性 数据的传送 工作过程 主设备向从 ...

  6. IIC协议解释(转)

    IIC协议解释 推荐资源: http://m.elecfans.com/article/574049.html       and       https://blog.csdn.net/firefl ...

  7. FPGA基础设计(四):IIC协议

    很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kb ...

  8. IIC协议解释

    IIC协议解释 (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量 ...

  9. 基于STM8的IIC协议--实例篇--时钟模块(DS3231)读取

    1. 综述 由上篇博客可知道IIC协议如何用代码实现,本篇博客就不涉及协议内容,只讲解如何使用. 本次的实验传感为:DS3231(时钟模块),对于时钟模块的具体信息我也就不多介绍,大家可以自行度娘,具 ...

随机推荐

  1. tarjan系列算法代码小结

    个人使用,可能不是很详细 强联通分量 这里的dfn可以写成low 因为都是在栈中,只要保证该节点的low值不为本身即可 void tarjan(int now) { dfn[now]=low[now] ...

  2. 基于GIS的视频管理指挥平台

    平台利用空间地理信息技术,以GIS地图为基础,将各类信息空间化.可视化,实现基于空间电子地图的可视化查询和分析,它能使情报.推理.分析与其他可用数据融为一体,提供依托于电子地图的清晰而精确的现场态势图 ...

  3. Python进阶之模块

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  4. 39.Odoo产品分析 (四) – 工具板块(8) – 生产力(1)

    查看Odoo产品分析系列--目录 生产力相当于一个即时贴或便签.用便签或待办事项处理个人的任务.  安装生产力模块,得到"便签"主菜单:  创建一个便签,该表单对应note.not ...

  5. .NET性能优化小技巧

    .NET 性能优化小技巧 Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 HttpClient 优化 关于使用 Htt ...

  6. JVM远程调试功能

    有时候想调试线上的程序 可以启用远程调试功能 在本地调试远程代码. 远程JVM启用调试模式 /usr/local/jdk/bin/java -server -Xms256m -Xmx256m -XX: ...

  7. Linux如何查找某个时间点后生成的空文件

    今天遇到一个特殊需求,需要找到某天(例如2017-04-13)以及这之后生成的空文件.那么这个要怎么处理呢?这个当然是用find命令来解决.如下所示, -mtime -5 表示查找距现在 5*24H ...

  8. 从0开始的Python学习002python的数据类型

    在创建变量的时候不用声明数据类型 # 创建变量 a = 10 # 打印变量值 print(a) 结果如下: 这种感觉和Java有很大的不同,感觉python很神奇,数据的类型是python自己决定的. ...

  9. ATL右键文件菜单

    自己写的小程序中用到的,网上资料相对还是毕竟全的,这里再整理下.毕竟我也不是很了解ATL,里面估计还是有不少问题的,就当作参考吧. 1.创建ATL工程,这个没什么好讲的. 我对COM组件没什么研究,这 ...

  10. swoole多端口监听

    今天测试swoole写webserver实现多端口监听.记录下爬过的坑:关于tcp协议监听触发不到receive!!!!! 首先上服务端代码 class Http { /** * 服务实例 * @va ...