IIC 概述之24c系列存储器内存分析
IIC
24C01 128B (1010)(A2)(A1)(A0)(0或1) 3 128B
24C02 256B (1010)(A2)(A1)(A0)(0或1) 3 256B
24C04 512B (1010)(A2)(A1)(P0)(0或1) 2 2X256B
24C08 1024B (1010)(A2)(P1)(P0)(0或1) 1 4X256B
24C16 2048B (1010)(P2)(P1)(P0)(0或1) 0 8X256B
解析:IIC总线接口器件24C系列非易失性存储器与89C51接口采用软件模拟IIC。24C系列
存储器器件地址统一为1010XXXX,不要问为什么,这是厂家出厂的时候规定好的了。至
于24C的引脚功能和89C51的接口我就不多说了,本文的重点主要是如何应用。
上面说了,器件的地址字节的高位是1010,那么低4位呢?先说最后一位吧,最后一
位为0的时候表示89C51要写数据入存储器,1的时候表示要从存储器读数据。还剩下中
三位A2,A1和A0。它们的高低电平取决于24C的A2,A1,A0是接高电平还是接地。A2,
A1 和A0有8个组合,因此可以扩展8个相同的器件,根据A2、A1、A0的不同,一样的器件
也会有不同的地址。那么是不是每一个24C都可以扩展8个呢?不是的。注意上表,24C01
有三个可寻址位,A2,A1,A0,所以可以扩展8个,24C02也一样。而04则只可以扩展4个
08只可以扩展2个,16就没有扩展了,只可以挂一片24C16。为什么呢?因为访问24C系列
除了访问器件地址外,还要访问器件内的字节的地址。例如24C01,要对其操作,就先选
选中它的地址,然后操作第一个字节或其他字节,这些字节也是有地址的,分模块,用
一个字节表示,最多可以操作256个字节。24C01和24C02不大于256个字节,对其操作就
简单得多了。但24C04,08和16呢?他们都大于256个字节,怎么办?分模块。注意到上
表的P0,P1,P3没有?把04分成两个模块,2X256B,08四个模块,16就八个模块。究竟
怎么
模块操作呢?拿24C08为例,有A2 P1 P0。A2只可以0或1,所以只能扩展2个24C08,其
内有4个256字节的模块,要操作哪个模块取决于P1,P0的组合。例如,24C08的地址字节
为1010000X第一个字节地址为0,第256个地址为255,如果地址字节是1010001X,那么第
256个字节的地址为0,第512个字节的地址为255。就如此。
再用24C08举例说明如何扩展,当两个24C08的A2脚分别接高电平和地的时候,就可
以了,这样就扩展了,他们的器件地址分别是1010000X和1010100X。当要读第一个(A2
接地)
24C08的的第一个模块的数据时候,单片机先发送地址字节10100001;当要把数据写
进第二个(A2接高电平)24C08的第二个模块的时候,应发送10101010地址字节。
IIC通信过程:
写数据:发送启动信号,发送设备地址信号,检测应答,发送写命令,发送数据,发送停止信号。
读数据:发送启动信号,发送设备地址信号,检测应答,发送写命令,发送要读取数据的地址;发送开始信号,发送读命令。
菜鸟常见错误:用IIC控制硬件时,要特别注意硬件改变状态需要时间(硬件把收到的数据写入自己的寄存器需要时间、根据自己的寄存器改变状态也需要时间)。
IIC 概述之24c系列存储器内存分析的更多相关文章
- java执行程序的内存分析系列专栏
近段时间研究了java的程序执行过程中的内存分配,收获颇多,解决了我最近时间学习java的很多困惑点.写java内存分析系列的目的主要有两个,一来是希望给像我一样的java初学者一定的启发,希望也能解 ...
- java执行程序的内存分析系列专栏二之static变量和方法内存分析
昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能 ...
- Java基础系列(36)- 数组三种初始化及内存分析
内存分析 数组三种初始化 静态初始化 int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)} 动态初始化 int[] a = new i ...
- linux概念之内存分析
linux内存总结 分析样本[root@-comecs ~]# free total used free shared buffers cached Mem: -/+ buffers/cache: S ...
- Android内存优化(三)详解内存分析工具MAT
前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...
- 利用MAT玩转JVM内存分析(一)
本文首发于公众号:javaadu 尽管JVM提供了自动内存管理的机制,试图降低程序员的开发门槛,确实也实现了这一目标,在日常开发中,我们一般都不需要关心对象的内存释放.JVM大部分都是使用trace算 ...
- ElasticSearch 2 (37) - 信息聚合系列之内存与延时
ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...
- Android内存分析命令(转)
一.概述 1.1 内存指标概念 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= U ...
- android--------Android内存分析工具的使用
内存分析(in-memory analytics)是我们编写速度快.效率高的代码必不可少的知识.如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的.那么内存分析是什么? ...
随机推荐
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- red-hat6.5 yum 源配置,cloud-init 安装 This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register
This system is not registered to Red Hat Subscription Management. You can use subscription-manager t ...
- [置顶] 【Git入门之十一】标签管理
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309731 标签是啥?标签就是给某个版本的一个标记. 1.为当前版本创建标 ...
- python遗传算法实现数据拟合
python据说功能强大,触角伸到各个领域,网上搜了一下其科学计算和工程计算能力也相当强,具备各种第三方包,除了性能软肋外,其他无可指摘,甚至可以同matlab等专业工具一较高下. 从网上找了一个使用 ...
- Javascript的模块化编程
随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...
- 推荐:室内定位API - indoor Location API
indoor.rs 公司近日开放了API,包括免费free的,收费fee的版本. 详情见这里,价格不是很贵哦 Open API支持Android/iOS等移动平台 提供工具,帮助进行地图和WiFi信号 ...
- POJ 2697 A Board Game (bfs模拟)
比较水的一道题,在4*4的棋盘上有黑白子,现在有某种移动方式,问能否通过它将棋盘从某个状态移动到另一种状态 只要想好怎么保存hash表来去重,其他就差不多了... #include <iostr ...
- [置顶] Win8.1慎用360优化,可能导致安装驱动出现数据无效的问题。附解决方法
2013年9月30日,更新说明: 不知道是不是我禁用了其他驱动造成 今天开机后连接手机,我的电脑里没出现MTP设备 于是打开设备管理器,发现MTP,也就是我的XPERIA U出现了感叹号图标 右键更新 ...
- ios8中百度推送接收不到
ios8中百度推送接收类型会有所改变: //消息推送注冊 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { ...
- uva 10560 - Minimum Weight(数论)
题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝 ...